|
|
@ -1,3 +1,4 @@ |
|
|
|
|
|
#define _GNU_SOURCE |
|
|
#include <sys/wait.h> |
|
|
#include <sys/wait.h> |
|
|
#include <sys/resource.h> |
|
|
#include <sys/resource.h> |
|
|
#include <string.h> |
|
|
#include <string.h> |
|
|
@ -5,14 +6,5 @@ |
|
|
|
|
|
|
|
|
pid_t wait4(pid_t pid, int *status, int options, struct rusage *usage) |
|
|
pid_t wait4(pid_t pid, int *status, int options, struct rusage *usage) |
|
|
{ |
|
|
{ |
|
|
pid_t ret = syscall4(__NR_wait4, pid, (long)status, options, (long)usage); |
|
|
return syscall4(__NR_wait4, pid, (long)status, options, (long)usage); |
|
|
/* Fixup kernel time_t... */ |
|
|
|
|
|
if (usage) { |
|
|
|
|
|
long kusage[4]; |
|
|
|
|
|
memcpy(kusage, usage, sizeof kusage); |
|
|
|
|
|
memmove((struct timeval *)usage + 2, (long *)usage + 4, sizeof *usage - 2*sizeof(struct timeval)); |
|
|
|
|
|
usage->ru_utime = (struct timeval){ kusage[0], kusage[1] }; |
|
|
|
|
|
usage->ru_stime = (struct timeval){ kusage[2], kusage[3] }; |
|
|
|
|
|
} |
|
|
|
|
|
return ret; |
|
|
|
|
|
} |
|
|
} |
|
|
|