~ chicken-core (chicken-5) bb7016ac25ee22a7570227f429f5fb7abb5062e6
commit bb7016ac25ee22a7570227f429f5fb7abb5062e6 Author: felix <felix@call-with-current-continuation.org> AuthorDate: Mon Feb 15 09:51:26 2010 +0100 Commit: felix <felix@call-with-current-continuation.org> CommitDate: Mon Feb 15 09:51:26 2010 +0100 don't fuck with me, git diff --git a/chicken.h b/chicken.h index 830ab88e..2f9d3273 100644 --- a/chicken.h +++ b/chicken.h @@ -2141,9 +2141,9 @@ C_path_to_executable() pid = C_getpid(); C_sprintf(linkname, "/proc/%i/exe", pid); - ret = C_readlink(linkname, buffer, sizeof(buffer) - 1); + ret = C_readlink(linkname, buffer, MAX_PATH - 1); - if(ret == -1 || ret >= sizeof(buffer) - 1) + if(ret == -1 || ret >= MAX_PATH - 1) return NULL; for(--ret; ret > 0 && buffer[ ret ] != '/'; --ret); @@ -2151,19 +2151,27 @@ C_path_to_executable() buffer[ ret ] = '\0'; return buffer; # elif defined(_WIN32) && !defined(__CYGWIN__) - int n = GetModuleFileName(NULL, buffer, sizeof(buffer) - 1); + int i; + int n = GetModuleFileName(NULL, buffer, MAX_PATH - 1); - if(n == 0 || n >= sizeof(buffer) - 1) + if(n == 0 || n >= MAX_PATH - 1) return NULL; - buffer[ n ] = '\0'; + for(i = n - 1; i >= 0 && buffer[ i ] != '\\'; --i); + + buffer[ i ] = '\0'; return buffer; # elif defined(C_MACOSX) && defined(C_GUI) CFBundleRef bundle = CFBundleGetMainBundle(); CFURLRef url = CFBundleCopyExecutableURL(bundle); + int i; - if(CFURLGetFileSystemRepresentation(url, true, buffer, sizeof(buffer))) + if(CFURLGetFileSystemRepresentation(url, true, buffer, MAX_PATH)) { + for(i = C_strlen(buffer); i >= 0 && buffer[ i ] != '/') --i; + + buffer[ i ] = '\0'; return buffer; + } else return NULL; # elif defined(__unix__) || defined(C_XXXBSD) int i, j, k, l; @@ -2186,7 +2194,7 @@ C_path_to_executable() } else { /* try current dir */ - if(C_getcwd(buffer, sizeof(buffer) - 1) == NULL) + if(C_getcwd(buffer, MAX_PATH - 1) == NULL) return NULL; j = C_strlen(buffer); @@ -2219,7 +2227,7 @@ C_path_to_executable() if(C_access(buffer, F_OK)) { dname = C_strdup(buffer); - l = C_readlink(dname, buffer, C_sizeof(buffer) - 1); + l = C_readlink(dname, buffer, MAX_PATH - 1); if(l == -1) { /* not a symlink (we ignore other errors here */Trap