mirror of
https://github.com/ksherlock/mpw.git
synced 2025-04-04 17:29:30 +00:00
unified and fixed SetFinderInfo
This commit is contained in:
parent
80e55b8c82
commit
6d76fae173
@ -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;
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
||||
|
@ -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)
|
||||
|
Loading…
x
Reference in New Issue
Block a user