aboutsummaryrefslogtreecommitdiff
path: root/darwin-bootstrap/posixspawn-hook.c
diff options
context:
space:
mode:
authorcomex2015-03-01 20:09:08 -0500
committercomex2015-03-01 20:09:08 -0500
commitdafa90aaff6a5c1bc0fe91c5c80c1151d3bcaf65 (patch)
tree77e0f036c503d11e147d050c56561163b9700eb8 /darwin-bootstrap/posixspawn-hook.c
parentfix stack alignment (diff)
downloadsubstitute-dafa90aaff6a5c1bc0fe91c5c80c1151d3bcaf65.tar.gz
seems to work
Diffstat (limited to 'darwin-bootstrap/posixspawn-hook.c')
-rw-r--r--darwin-bootstrap/posixspawn-hook.c24
1 files changed, 15 insertions, 9 deletions
diff --git a/darwin-bootstrap/posixspawn-hook.c b/darwin-bootstrap/posixspawn-hook.c
index 51ab5b3..86c3d01 100644
--- a/darwin-bootstrap/posixspawn-hook.c
+++ b/darwin-bootstrap/posixspawn-hook.c
@@ -155,14 +155,15 @@ static int hook_posix_spawn_generic(__typeof__(posix_spawn) *old,
posix_spawnattr_t my_attr = NULL;
short flags = 0;
- if (posix_spawnattr_getflags(attrp, &flags))
+ if (attrp && posix_spawnattr_getflags(attrp, &flags))
goto crap;
if (IB_VERBOSE) {
- ib_log("hook_posix_spawn_generic: path=%s%s%s",
+ ib_log("hook_posix_spawn_generic: path=%s%s%s (ld=%d)",
path,
(flags & POSIX_SPAWN_SETEXEC) ? " (exec)" : "",
- (flags & POSIX_SPAWN_START_SUSPENDED) ? " (suspend)" : "");
+ (flags & POSIX_SPAWN_START_SUSPENDED) ? " (suspend)" : "",
+ is_launchd);
for (char *const *ap = argv; *ap; ap++)
ib_log(" %s", *ap);
}
@@ -175,12 +176,17 @@ static int hook_posix_spawn_generic(__typeof__(posix_spawn) *old,
/* which dylib should we add, if any? */
const char *dylib_to_add;
- if (!is_launchd)
- dylib_to_add = bl_dylib;
- else if (!strcmp(path, "/usr/libexec/xpcproxy"))
- dylib_to_add = psh_dylib;
- else
- goto skip;
+ if (is_launchd) {
+ if (!strcmp(path, "/usr/libexec/xpcproxy"))
+ dylib_to_add = psh_dylib;
+ else
+ goto skip;
+ } else {
+ if (!strcmp(path, "/Library/Substitute/Helpers/substituted"))
+ goto skip;
+ else
+ dylib_to_add = bl_dylib;
+ }
if (attrp) {
posix_spawnattr_t attr = *attrp;