From e5756d198fa21817cdc99e3542b30ed51ddc03d7 Mon Sep 17 00:00:00 2001 From: Natalia Portillo Date: Wed, 31 Mar 2021 16:53:58 +0100 Subject: [PATCH] Implement extended attributes version in BeOS and Haiku. --- setter/src/beos/CMakeLists.txt | 2 +- setter/src/beos/xattr.c | 89 ++++++++++++++++++++++++++++- setter/src/beos/xattr.h | 101 +++++++++++++++++++++++++++++++++ 3 files changed, 190 insertions(+), 2 deletions(-) create mode 100644 setter/src/beos/xattr.h diff --git a/setter/src/beos/CMakeLists.txt b/setter/src/beos/CMakeLists.txt index 517b00c..6cd04cf 100644 --- a/setter/src/beos/CMakeLists.txt +++ b/setter/src/beos/CMakeLists.txt @@ -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}") diff --git a/setter/src/beos/xattr.c b/setter/src/beos/xattr.c index 180852b..6795b08 100644 --- a/setter/src/beos/xattr.c +++ b/setter/src/beos/xattr.c @@ -22,9 +22,96 @@ Aaru Data Preservation Suite Copyright (C) 2011-2021 Natalia Portillo *****************************************************************************/ +#include +#include +#include +#include +#include +#include +#include + +#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); } diff --git a/setter/src/beos/xattr.h b/setter/src/beos/xattr.h new file mode 100644 index 0000000..82ba1ac --- /dev/null +++ b/setter/src/beos/xattr.h @@ -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 . + +----------------------------------------------------------------------------- +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_