unified and fixed SetFinderInfo

This commit is contained in:
Kelvin Sherlock 2013-04-10 22:27:49 -04:00
parent 80e55b8c82
commit 6d76fae173
3 changed files with 12 additions and 51 deletions

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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)