~ 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