mirror of
https://github.com/jart/cosmopolitan.git
synced 2025-05-29 16:52:28 +00:00
Remove .com logic from GetProgramExecutableName (#1134)
The `com` parameter to `TryPath` was always 1, so there was no reason to have it. This patch changes the logic to be as though `com` was 0, which provides a possible answer to the TODO question -- the answer is no. If we never care about appending `.com`, then `CopyWithCwd` doesn't need to return anything beyond a boolean success value.
This commit is contained in:
parent
f8c0186221
commit
cec4c04aa1
1 changed files with 10 additions and 20 deletions
|
@ -93,7 +93,7 @@ static int OldApeLoader(char *s) {
|
||||||
(!strncmp((b = basename(s)), ".ape-", 5) && AllNumDot(b + 5));
|
(!strncmp((b = basename(s)), ".ape-", 5) && AllNumDot(b + 5));
|
||||||
}
|
}
|
||||||
|
|
||||||
static char *CopyWithCwd(const char *q, char *p, char *e) {
|
static int CopyWithCwd(const char *q, char *p, char *e) {
|
||||||
char c;
|
char c;
|
||||||
if (*q != '/') {
|
if (*q != '/') {
|
||||||
if (q[0] == '.' && q[1] == '/') {
|
if (q[0] == '.' && q[1] == '/') {
|
||||||
|
@ -109,29 +109,19 @@ static char *CopyWithCwd(const char *q, char *p, char *e) {
|
||||||
if (p + 1 /* nul */ < e) {
|
if (p + 1 /* nul */ < e) {
|
||||||
*p++ = c;
|
*p++ = c;
|
||||||
} else {
|
} else {
|
||||||
return NULL;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
*p = 0;
|
*p = 0;
|
||||||
return p;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
// if q exists then turn it into an absolute path. we also try adding
|
// if q exists then turn it into an absolute path.
|
||||||
// a .com suffix since the ape auto-appends it when resolving
|
static int TryPath(const char *q) {
|
||||||
//
|
if (!CopyWithCwd(q, g_prog.u.buf, g_prog.u.buf + sizeof(g_prog.u.buf))) {
|
||||||
// TODO(jart): is this still relevant?
|
|
||||||
static int TryPath(const char *q, int com) {
|
|
||||||
char *p;
|
|
||||||
if (!(p = CopyWithCwd(q, g_prog.u.buf,
|
|
||||||
g_prog.u.buf + sizeof(g_prog.u.buf) - com * 4))) {
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
if (!sys_faccessat(AT_FDCWD, g_prog.u.buf, F_OK, 0)) return 1;
|
return !sys_faccessat(AT_FDCWD, g_prog.u.buf, F_OK, 0);
|
||||||
if (!com) return 0;
|
|
||||||
p = WRITE32LE(p, READ32LE(".com"));
|
|
||||||
*p = 0;
|
|
||||||
if (!sys_faccessat(AT_FDCWD, g_prog.u.buf, F_OK, 0)) return 1;
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// if the loader passed a relative path, prepend cwd to it.
|
// if the loader passed a relative path, prepend cwd to it.
|
||||||
|
@ -221,13 +211,13 @@ static inline void InitProgramExecutableNameImpl(void) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// don't trust argument parsing if set-id.
|
// don't trust argv or envp if set-id.
|
||||||
if (issetugid()) {
|
if (issetugid()) {
|
||||||
goto UseEmpty;
|
goto UseEmpty;
|
||||||
}
|
}
|
||||||
|
|
||||||
// try argv[0], then argv[0].com, then $_, then $_.com.
|
// try argv[0], then then $_.
|
||||||
if (TryPath(__argv[0], 1) || TryPath(__getenv(__envp, "_").s, 1)) {
|
if (TryPath(__argv[0]) || TryPath(__getenv(__envp, "_").s)) {
|
||||||
goto UseBuf;
|
goto UseBuf;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue