Implement extended attributes version in BeOS and Haiku.

This commit is contained in:
2021-03-31 16:53:58 +01:00
parent f95b6fccb9
commit e5756d198f
3 changed files with 190 additions and 2 deletions

View File

@@ -31,7 +31,7 @@ project(
DESCRIPTION "Filesystem test creator for BeOS and Haiku"
LANGUAGES C)
set(PLATFORM_SOURCES attr.c deleted.c dirdepth.c filename.c files.c frag.c links.c os.c perms.c perms.h rsrcfork.c sparse.c time.c time.h volume.c volume.h xattr.c)
set(PLATFORM_SOURCES attr.c deleted.c dirdepth.c filename.c files.c frag.c links.c os.c perms.c perms.h rsrcfork.c sparse.c time.c time.h volume.c volume.h xattr.c xattr.h)
set(EXECUTABLE_NAME "fssetter-${CMAKE_SYSTEM_NAME}-${CMAKE_SYSTEM_PROCESSOR}")

View File

@@ -22,9 +22,96 @@ Aaru Data Preservation Suite
Copyright (C) 2011-2021 Natalia Portillo
*****************************************************************************/
#include <TypeConstants.h>
#include <errno.h>
#include <fs_attr.h>
#include <stdio.h>
#include <stdio_pre.h>
#include <sys/stat.h>
#include <unistd.h>
#include "xattr.h"
#include "../include/defs.h"
#include "../log.h"
void ExtendedAttributes(const char* path)
{
// TODO
int ret;
FILE* file;
int rc;
int cRc;
int attr_fd;
ret = chdir(path);
if(ret)
{
log_write("Error %d changing to specified path.\n", errno);
return;
}
ret = mkdir("XATTRS", 0755);
if(ret)
{
log_write("Error %d creating working directory.\n", errno);
return;
}
ret = chdir("XATTRS");
if(ret)
{
log_write("Error %d changing to working directory.\n", errno);
return;
}
log_write("Creating files with extended attributes.\n");
rc = 0;
cRc = 0;
file = fopen("comment", "w+");
if(file == NULL) rc = errno;
else
{
fprintf(file, "This file has an extended attribute called \"comment\" that is 34 bytes long.\n");
fclose(file);
attr_fd = fs_open_attr("comment", "comment", B_STRING_TYPE, O_RDWR);
if(attr_fd >= 0)
{
cRc = fs_write_attr(attr_fd, "comment", B_STRING_TYPE, 0, stringAttribute, 34);
cRc = cRc < 0 ? errno : 0;
fs_close_attr(attr_fd);
}
else
rc = errno;
}
log_write("\tFile with an extended attribute called \"comment\", rc = %d, cRc = %d\n", rc, cRc);
rc = 0;
cRc = 0;
file = fopen("icon", "w+");
if(file == NULL) rc = errno;
else
{
fprintf(file, "This file has an extended attribute called \"comment\" that is 34 bytes long.\n");
fclose(file);
attr_fd = fs_open_attr("icon", "BEOS:L:STD_ICON", B_LARGE_ICON_TYPE, O_RDWR);
if(attr_fd >= 0)
{
cRc = fs_write_attr(attr_fd, "BEOS:L:STD_ICON", B_LARGE_ICON_TYPE, 0, iconAttribute, 1024);
cRc = cRc < 0 ? errno : 0;
fs_close_attr(attr_fd);
}
else
rc = errno;
}
log_write("\tFile with an extended attribute called \"BEOS:L:STD_ICON\", rc = %d, cRc = %d\n", rc, cRc);
}

101
setter/src/beos/xattr.h Normal file
View File

@@ -0,0 +1,101 @@
/****************************************************************************
Aaru Data Preservation Suite
-----------------------------------------------------------------------------
Author(s) : Natalia Portillo
--[ License ] ---------------------------------------------------------------
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
-----------------------------------------------------------------------------
Copyright (C) 2011-2021 Natalia Portillo
*****************************************************************************/
#ifndef AARU_FSTESTER_SETTER_SRC_BEOS_XATTR_H_
#define AARU_FSTESTER_SETTER_SRC_BEOS_XATTR_H_
static unsigned char stringAttribute[34] = {
0x54, 0x68, 0x69, 0x73, 0x20, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x20, 0x63,
0x6F, 0x6E, 0x74, 0x61, 0x69, 0x6E, 0x73, 0x20, 0x61, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6E, 0x67,
0x2E, 0x00
};
unsigned char iconAttribute[1024] = {
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0x1D, 0x17, 0x1E, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0x19, 0x13, 0x1E, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0x1D, 0x8E, 0x1E, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1D, 0x1A,
0x19, 0x18, 0x16, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1C, 0x1A, 0x1C,
0x67, 0x67, 0x67, 0x14, 0x1D, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x19, 0x67, 0x19,
0x67, 0x8E, 0x8E, 0x8E, 0x13, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1A, 0x67, 0x18, 0x67,
0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x1D, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x18, 0x67, 0x14, 0x8E,
0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x19, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1C, 0x14, 0x13, 0x8E, 0x8E,
0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x17, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x16, 0x8E, 0x8E, 0x8E, 0x8E,
0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x17, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1B, 0x8E, 0x8E, 0x94, 0x94, 0x8E,
0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x17, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1E, 0x8E, 0x94, 0x94, 0x94, 0x94, 0x94,
0x94, 0x8E, 0x8E, 0x94, 0x94, 0x18, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x12, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94,
0x94, 0x94, 0x94, 0x94, 0x94, 0x19, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x14, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94,
0x94, 0x94, 0x94, 0x94, 0x94, 0x18, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0x14, 0xB5, 0xB5, 0xB5, 0x94, 0xB5, 0x94, 0x94, 0x94,
0xB5, 0x94, 0x94, 0xB5, 0x94, 0x15, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1E, 0x8E, 0xB5, 0xB5, 0xB5, 0x94, 0xB5, 0x94, 0xB5, 0x94, 0xB5,
0x94, 0x94, 0xB5, 0x94, 0xB5, 0x8E, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0x8E, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0x94, 0xB5, 0x94, 0xB5, 0x94,
0xB5, 0xB5, 0xB5, 0xB5, 0x94, 0x94, 0x14, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0x67, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5,
0xB5, 0xB5, 0xB5, 0x94, 0xB5, 0x94, 0x94, 0x1D, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0x1F, 0x94, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5,
0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0x94, 0xB5, 0x14, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0x19, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5,
0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0x94, 0xB5, 0x94, 0x1E, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0x14, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5,
0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0x94, 0x94, 0x94, 0x18, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0x8E, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5,
0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0x94, 0x94, 0x94, 0x12, 0x1E, 0x1E, 0x1E, 0x1E, 0x1F, 0x3F, 0xFF,
0xFF, 0xFF, 0xFF, 0x8E, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5,
0xB5, 0xB5, 0xB5, 0x94, 0xB5, 0x94, 0x94, 0x94, 0x8E, 0x1A, 0x1B, 0x1B, 0x1C, 0x1E, 0x3F, 0xFF,
0xFF, 0xFF, 0xFF, 0x8E, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5,
0xB5, 0xB5, 0xB5, 0xB5, 0x94, 0x94, 0x94, 0xB5, 0xB5, 0x16, 0x18, 0x19, 0x1B, 0x1E, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0x12, 0xB5, 0x7F, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5,
0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0x94, 0xB5, 0xB5, 0xB5, 0x13, 0x16, 0x18, 0x1B, 0x1E, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0x19, 0x7F, 0x7F, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5,
0xB5, 0xB5, 0x94, 0x94, 0x94, 0x94, 0xB5, 0xB5, 0x0B, 0x12, 0x14, 0x17, 0x1B, 0x1F, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0x1F, 0xB5, 0x7F, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5,
0xB5, 0xB5, 0xB5, 0xB5, 0x94, 0xB5, 0xB5, 0xB5, 0x0B, 0x11, 0x14, 0x17, 0x1C, 0x3F, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0x19, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5,
0xB5, 0xB5, 0xB5, 0x94, 0xB5, 0xB5, 0xB5, 0xB5, 0x0E, 0x11, 0x14, 0x1A, 0x1E, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x16, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5,
0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0x0B, 0x10, 0x14, 0x19, 0x1D, 0x3F, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x61, 0xAF, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5,
0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0x0C, 0x12, 0x16, 0x1B, 0x1E, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0x18, 0x0E, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5,
0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0x12, 0x18, 0x1B, 0x1E, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0x1E, 0x1D, 0x19, 0x15, 0x8E, 0x8E, 0x0E,
0x10, 0x12, 0x15, 0x19, 0x1B, 0x1D, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
};
#endif // AARU_FSTESTER_SETTER_SRC_BEOS_XATTR_H_