Revert "Remove -d option from logwrapper"
This reverts commit 4d74bcf445
Change-Id: Ibcd19400cd2589b52df2b3acaba25f02676ba9e0
This commit is contained in:
parent
d7c52a458e
commit
b10c7b4e3d
|
@ -35,14 +35,17 @@ void fatal(const char *msg) {
|
|||
|
||||
void usage() {
|
||||
fatal(
|
||||
"Usage: logwrapper BINARY [ARGS ...]\n"
|
||||
"Usage: logwrapper [-d] BINARY [ARGS ...]\n"
|
||||
"\n"
|
||||
"Forks and executes BINARY ARGS, redirecting stdout and stderr to\n"
|
||||
"the Android logging system. Tag is set to BINARY, priority is\n"
|
||||
"always LOG_INFO.\n");
|
||||
"always LOG_INFO.\n"
|
||||
"\n"
|
||||
"-d: Causes logwrapper to SIGSEGV when BINARY terminates\n"
|
||||
" fault address is set to the status of wait()\n");
|
||||
}
|
||||
|
||||
void parent(const char *tag, int parent_read) {
|
||||
void parent(const char *tag, int seg_fault_on_exit, int parent_read) {
|
||||
int status;
|
||||
char buffer[4096];
|
||||
|
||||
|
@ -102,6 +105,8 @@ void parent(const char *tag, int parent_read) {
|
|||
} else
|
||||
ALOG(LOG_INFO, "logwrapper", "%s wait() failed: %s (%d)", tag,
|
||||
strerror(errno), errno);
|
||||
if (seg_fault_on_exit)
|
||||
*(int *)status = 0; // causes SIGSEGV with fault_address = status
|
||||
}
|
||||
|
||||
void child(int argc, char* argv[]) {
|
||||
|
@ -119,6 +124,7 @@ void child(int argc, char* argv[]) {
|
|||
|
||||
int main(int argc, char* argv[]) {
|
||||
pid_t pid;
|
||||
int seg_fault_on_exit = 0;
|
||||
|
||||
int parent_ptty;
|
||||
int child_ptty;
|
||||
|
@ -128,6 +134,16 @@ int main(int argc, char* argv[]) {
|
|||
usage();
|
||||
}
|
||||
|
||||
if (strncmp(argv[1], "-d", 2) == 0) {
|
||||
seg_fault_on_exit = 1;
|
||||
argc--;
|
||||
argv++;
|
||||
}
|
||||
|
||||
if (argc < 2) {
|
||||
usage();
|
||||
}
|
||||
|
||||
/* Use ptty instead of socketpair so that STDOUT is not buffered */
|
||||
parent_ptty = open("/dev/ptmx", O_RDWR);
|
||||
if (parent_ptty < 0) {
|
||||
|
@ -163,7 +179,7 @@ int main(int argc, char* argv[]) {
|
|||
setgid(AID_LOG);
|
||||
setuid(AID_LOG);
|
||||
|
||||
parent(argv[1], parent_ptty);
|
||||
parent(argv[1], seg_fault_on_exit, parent_ptty);
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
|
Loading…
Reference in New Issue