From 6d76fae1739a2f7db0336c6b1cef0572ebac8c51 Mon Sep 17 00:00:00 2001 From: Kelvin Sherlock Date: Wed, 10 Apr 2013 22:27:49 -0400 Subject: [PATCH] unified and fixed SetFinderInfo --- toolbox/os.cpp | 23 +---------------------- toolbox/os_highlevel.cpp | 26 +++----------------------- toolbox/os_internal.cpp | 14 ++++++++------ 3 files changed, 12 insertions(+), 51 deletions(-) diff --git a/toolbox/os.cpp b/toolbox/os.cpp index 4fccaf2..b0f0aeb 100644 --- a/toolbox/os.cpp +++ b/toolbox/os.cpp @@ -806,29 +806,8 @@ namespace OS } - // finder info is actually 32 bytes, so read and update the first 16. - { - uint8_t buffer[32]; - int ok; + d0 = Internal::SetFinderInfo(sname, memoryPointer(parm + 32), false); - std::memset(buffer, 0, sizeof(buffer)); - - ok = ::getxattr(sname.c_str(), XATTR_FINDERINFO_NAME, buffer, 32, 0, 0); - - // only 16 bytes copied. - std::memcpy(buffer, memoryPointer(parm + 32), 16); - - ok = ::setxattr(sname.c_str(), XATTR_FINDERINFO_NAME, buffer, 32, 0, 0); - - if (ok < 0) - { - d0 = errno_to_oserr(errno); - memoryWriteWord(d0, parm + 16); - return d0; - } - } - - d0 = 0; memoryWriteWord(d0, parm + 16); return d0; } diff --git a/toolbox/os_highlevel.cpp b/toolbox/os_highlevel.cpp index 6812a0d..a664378 100644 --- a/toolbox/os_highlevel.cpp +++ b/toolbox/os_highlevel.cpp @@ -246,6 +246,7 @@ namespace OS { uint32_t spec; uint32_t finderInfo; + uint16_t d0; StackFrame<8>(spec, finderInfo); @@ -259,30 +260,9 @@ namespace OS { Log(" FSpSetFInfo(%s, %08x)\n", path.c_str(), finderInfo); + d0 = Internal::SetFinderInfo(path, memoryPointer(finderInfo), false); - // todo -- move to separate function? used in multiple places. - uint8_t buffer[32]; - std::memset(buffer, 0, sizeof(buffer)); - int rv; - - rv = ::getxattr(path.c_str(), XATTR_FINDERINFO_NAME, buffer, 32, 0, 0); - - if (rv < 0) - { - switch (errno) - { - case ENOENT: - case EACCES: - return errno_to_oserr(errno); - } - } - - std::memmove(buffer, memoryPointer(finderInfo), 16); - - rv = ::setxattr(path.c_str(), XATTR_FINDERINFO_NAME, buffer, 32, 0, 0); - - - return rv < 0 ? errno_to_oserr(errno) : 0; + return d0; } diff --git a/toolbox/os_internal.cpp b/toolbox/os_internal.cpp index af42ea5..92388af 100644 --- a/toolbox/os_internal.cpp +++ b/toolbox/os_internal.cpp @@ -147,7 +147,12 @@ namespace OS { namespace Internal { std::memset(buffer, 0, sizeof(buffer)); int rv; - if (!extended) + if (extended) + { + std::memmove(buffer, info, 32); + + } + else { rv = ::getxattr(pathName.c_str(), XATTR_FINDERINFO_NAME, buffer, 32, 0, 0); @@ -160,12 +165,9 @@ namespace OS { namespace Internal { return errno_to_oserr(errno); } } - } - - if (extended) std::memmove(buffer, info, 16); - else - std::memmove(buffer, info, 32); + + } // convert pdos types. if (::memcmp(buffer + 2, " pdos", 6) == 0)