/* * Return a pretty command, on some OS's we might do something * different than just display the command. * * free_ret - whether or not to free the return value */ char * execview_pretty_command(MCAP_CMD_S *mc_cmd, int *free_ret) { char *str; int rv_to_free = 0; if(free_ret) *free_ret = rv_to_free; if(!mc_cmd) return NULL; str = mc_cmd->command; #ifdef _WINDOWS if(*str == '*' || (*str == '\"' && str[1] == '*')){ if(!strncmp(str + ((*str == '\"') ? 2 : 1), "DDE*", 4)) str = cpystr("via app already running"); else if(!strncmp(str + ((*str == '\"') ? 2 : 1),"ShellEx*",8)) str = cpystr("via Explorer defined app"); else str = cpystr("via Windows-specific method"); rv_to_free = 1; } #elif OSX_TARGET if(mc_cmd->special_handling){ CFStringRef str_ref = NULL, kind_str_ref = NULL; CFURLRef url_ref; char buf[256]; if((str_ref = CFStringCreateWithCString(NULL, mc_cmd->command, kCFStringEncodingASCII)) == NULL) return ""; if((url_ref = CFURLCreateWithString(NULL, str_ref, NULL)) == NULL) return ""; if(LSCopyDisplayNameForURL(url_ref, &kind_str_ref) != noErr) return ""; if(CFStringGetCString(kind_str_ref, buf, (CFIndex)255, kCFStringEncodingASCII) == false) return ""; buf[255] = '\0'; str = cpystr(buf); rv_to_free = 1; if(kind_str_ref) CFRelease(kind_str_ref); } #else /* always pretty */ #endif if(free_ret) *free_ret = rv_to_free; return(str); }
std::ostream& operator<<(std::ostream& out, CFURLRef u) { if(nullptr == u) { out << "(null)"; return out; } CFStringRef s = CFURLGetString(u); #if !TARGET_OS_IPHONE if(CFStringHasPrefix(s, CFSTR("file:"))) { CFStringRef displayName = nullptr; OSStatus result = LSCopyDisplayNameForURL(u, &displayName); if(noErr == result && nullptr != displayName) { out << displayName; CFRelease(displayName); displayName = nullptr; } } else #endif out << s; return out; }
static PyObject *Launch_LSCopyDisplayNameForURL(PyObject *_self, PyObject *_args) { PyObject *_res = NULL; OSStatus _err; CFURLRef inURL; CFStringRef outDisplayName; if (!PyArg_ParseTuple(_args, "O&", CFURLRefObj_Convert, &inURL)) return NULL; _err = LSCopyDisplayNameForURL(inURL, &outDisplayName); if (_err != noErr) return PyMac_Error(_err); _res = Py_BuildValue("O&", CFStringRefObj_New, outDisplayName); return _res; }
CFStringRef CreateDisplayNameForURL(CFURLRef url) { assert(nullptr != url); CFStringRef displayName = nullptr; #if !TARGET_OS_IPHONE CFStringRef scheme = CFURLCopyScheme(url); if(scheme) { bool isFileURL = (kCFCompareEqualTo == CFStringCompare(CFSTR("file"), scheme, kCFCompareCaseInsensitive)); CFRelease(scheme), scheme = nullptr; if(isFileURL) { OSStatus result = LSCopyDisplayNameForURL(url, &displayName); if(noErr != result) { LOGGER_WARNING("org.sbooth.AudioEngine", "LSCopyDisplayNameForURL failed: " << result); displayName = CFURLCopyLastPathComponent(url); } } else { displayName = CFURLGetString(url); CFRetain(displayName); } } // If scheme is nullptr the URL is probably invalid, but can still be logged else { displayName = CFURLGetString(url); CFRetain(displayName); } #else displayName = CFURLGetString(url); CFRetain(displayName); #endif return displayName; }