/* This function only works on 10.5 and later. Pass in a unicode object as path */ static PyObject* usbobserver_send2trash(PyObject *self, PyObject *args) { UInt8 *utf8_chars; FSRef fp; OSStatus op_result; if (!PyArg_ParseTuple(args, "es", "utf-8", &utf8_chars)) { return NULL; } FSPathMakeRefWithOptions(utf8_chars, kFSPathMakeRefDoNotFollowLeafSymlink, &fp, NULL); op_result = FSMoveObjectToTrashSync(&fp, NULL, kFSFileOperationDefaultOptions); PyMem_Free(utf8_chars); if (op_result != noErr) { PyErr_SetString(PyExc_OSError, GetMacOSStatusCommentString(op_result)); return NULL; } Py_RETURN_NONE; }
QT_BEGIN_NAMESPACE #if !defined(QWS) && !defined(Q_WS_QPA) && defined(Q_OS_MAC) static inline bool _q_isMacHidden(const char *nativePath) { OSErr err; FSRef fsRef; err = FSPathMakeRefWithOptions(reinterpret_cast<const UInt8 *>(nativePath), kFSPathMakeRefDoNotFollowLeafSymlink, &fsRef, 0); if (err != noErr) return false; FSCatalogInfo catInfo; err = FSGetCatalogInfo(&fsRef, kFSCatInfoFinderInfo, &catInfo, NULL, NULL, NULL); if (err != noErr) return false; FileInfo * const fileInfo = reinterpret_cast<FileInfo*>(&catInfo.finderInfo); return (fileInfo->finderFlags & kIsInvisible); }
bool IsAliasShortcut(CStdString &path) { bool rtn = false; #if defined(__APPLE__) && !defined(__arm__) // Note: regular files that have an .alias extension can be // reported as an alias when clearly, they are not. Trap them out. if (URIUtils::GetExtension(path) != ".alias") { FSRef fileRef; Boolean targetIsFolder, wasAliased; // It is better to call FSPathMakeRefWithOptions and pass kFSPathMakeRefDefaultOptions // since it will succeed for paths such as "/Volumes" unlike FSPathMakeRef. if (noErr == FSPathMakeRefWithOptions((UInt8*)path.c_str(), kFSPathMakeRefDefaultOptions, &fileRef, NULL)) { if (noErr == FSIsAliasFile(&fileRef, &wasAliased, &targetIsFolder)) { if (wasAliased) { rtn = true; } } } } #elif defined(_LINUX) // Linux does not use alias or shortcut methods #elif defined(WIN32) /* Needs testing under Windows platform so ignore shortcuts for now if (CUtil::GetExtension(path) == ".lnk") { rtn = true; } */ #endif return(rtn); }
static bool _q_isMacHidden(const QString &path) { OSErr err = noErr; FSRef fsRef; #if (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_4) if (QSysInfo::MacintoshVersion >= QSysInfo::MV_10_4) { err = FSPathMakeRefWithOptions(reinterpret_cast<const UInt8 *>(QFile::encodeName(QDir::cleanPath(path)).constData()), kFSPathMakeRefDoNotFollowLeafSymlink, &fsRef, 0); } else #endif { QFileInfo fi(path); FSRef parentRef; err = FSPathMakeRef(reinterpret_cast<const UInt8 *>(fi.absoluteDir().absolutePath().toUtf8().constData()), &parentRef, 0); if (err == noErr) { QString fileName = fi.fileName(); err = FSMakeFSRefUnicode(&parentRef, fileName.length(), reinterpret_cast<const UniChar *>(fileName.unicode()), kTextEncodingUnknown, &fsRef); } } if (err != noErr) return false; FSCatalogInfo catInfo; err = FSGetCatalogInfo(&fsRef, kFSCatInfoFinderInfo, &catInfo, NULL, NULL, NULL); if (err != noErr) return false; FileInfo * const fileInfo = reinterpret_cast<FileInfo*>(&catInfo.finderInfo); bool result = (fileInfo->finderFlags & kIsInvisible); return result; }
void TranslateAliasShortcut(CStdString &path) { #if defined(__APPLE__) && !defined(__arm__) FSRef fileRef; Boolean targetIsFolder, wasAliased; if (noErr == FSPathMakeRefWithOptions((UInt8*)path.c_str(), kFSPathMakeRefDefaultOptions, &fileRef, NULL)) { if (noErr == FSResolveAliasFileWithMountFlags(&fileRef, TRUE, &targetIsFolder, &wasAliased, kResolveAliasFileNoUI)) { if (wasAliased) { char real_path[PATH_MAX]; if (noErr == FSRefMakePath(&fileRef, (UInt8*)real_path, PATH_MAX)) { path = real_path; } } } } #elif defined(_LINUX) // Linux does not use alias or shortcut methods #elif defined(WIN32) /* Needs testing under Windows platform so ignore shortcuts for now CComPtr<IShellLink> ipShellLink; // Get a pointer to the IShellLink interface if (NOERROR == CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, IID_IShellLink, (void**)&ipShellLink)) WCHAR wszTemp[MAX_PATH]; // Get a pointer to the IPersistFile interface CComQIPtr<IPersistFile> ipPersistFile(ipShellLink); // IPersistFile is using LPCOLESTR so make sure that the string is Unicode #if !defined _UNICODE MultiByteToWideChar(CP_ACP, 0, lpszShortcutPath, -1, wszTemp, MAX_PATH); #else wcsncpy(wszTemp, lpszShortcutPath, MAX_PATH); #endif // Open the shortcut file and initialize it from its contents if (NOERROR == ipPersistFile->Load(wszTemp, STGM_READ)) { // Try to find the target of a shortcut even if it has been moved or renamed if (NOERROR == ipShellLink->Resolve(NULL, SLR_UPDATE)) { WIN32_FIND_DATA wfd; TCHAR real_path[PATH_MAX]; // Get the path to the shortcut target if (NOERROR == ipShellLink->GetPath(real_path, MAX_PATH, &wfd, SLGP_RAWPATH)) { // Get the description of the target TCHAR szDesc[MAX_PATH]; if (NOERROR == ipShellLink->GetDescription(szDesc, MAX_PATH)) { path = real_path; } } } } } */ #endif }
OSStatus FSPathMakeRef(const uint8_t* path, FSRef* fsref, Boolean* isDirectory) { return FSPathMakeRefWithOptions(path, kFSPathMakeRefDoNotFollowLeafSymlink, fsref, isDirectory); }