Make sure all of the crash data is written. Also silences annoying gcc warning. execve takes char *const[] as arguments so copy magic parameter. I think that is a standards bug, personally.
This commit is contained in:
@@ -32,7 +32,15 @@ static void safe_print( int fd, ... )
|
|||||||
const char *p = va_arg( ap, const char * );
|
const char *p = va_arg( ap, const char * );
|
||||||
if( p == NULL )
|
if( p == NULL )
|
||||||
break;
|
break;
|
||||||
write( fd, p, strlen(p) );
|
size_t len = strlen( p );
|
||||||
|
while( len )
|
||||||
|
{
|
||||||
|
ssize_t result = write( fd, p, strlen(p) );
|
||||||
|
if( result == -1 )
|
||||||
|
_exit( 1 );
|
||||||
|
len -= result;
|
||||||
|
p += result;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
va_end( ap );
|
va_end( ap );
|
||||||
}
|
}
|
||||||
@@ -79,10 +87,12 @@ static void NORETURN spawn_child_process( int from_parent )
|
|||||||
}
|
}
|
||||||
|
|
||||||
char path[1024];
|
char path[1024];
|
||||||
|
char magic[32];
|
||||||
GetExecutableName( path, sizeof(path) );
|
GetExecutableName( path, sizeof(path) );
|
||||||
|
strncpy( magic, CHILD_MAGIC_PARAMETER, sizeof(magic) );
|
||||||
|
|
||||||
/* Use execve; it's the lowest-level of the exec calls. The others may allocate. */
|
/* Use execve; it's the lowest-level of the exec calls. The others may allocate. */
|
||||||
char *argv[3] = { path, CHILD_MAGIC_PARAMETER, NULL };
|
char *argv[3] = { path, magic, NULL };
|
||||||
char *envp[1] = { NULL };
|
char *envp[1] = { NULL };
|
||||||
execve( path, argv, envp );
|
execve( path, argv, envp );
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user