From 165eee102a5159eecfc11687bd1a7623beaaac29 Mon Sep 17 00:00:00 2001 From: topjohnwu Date: Wed, 1 Feb 2017 05:59:48 +0800 Subject: [PATCH] Restore working directory --- activity.c | 1 + daemon.c | 13 ++++++++++++- su.c | 1 + su.h | 2 +- 4 files changed, 15 insertions(+), 2 deletions(-) diff --git a/activity.c b/activity.c index 766fe42f1..3f463869d 100644 --- a/activity.c +++ b/activity.c @@ -1,4 +1,5 @@ /* +** Copyright 2017, John Wu (@topjohnwu) ** Copyright 2010, Adam Shanks (@ChainsDD) ** Copyright 2008, Zinx Verituse (@zinxv) ** diff --git a/daemon.c b/daemon.c index a4e7dd596..ad1130de6 100644 --- a/daemon.c +++ b/daemon.c @@ -1,4 +1,5 @@ /* +** Copyright 2017, John Wu (@topjohnwu) ** Copyright 2010, Adam Shanks (@ChainsDD) ** Copyright 2008, Zinx Verituse (@zinxv) ** @@ -287,6 +288,9 @@ static int daemon_accept(int fd) { LOGD("remote uid: %d", daemon_from_uid); daemon_from_pid = read_int(fd); LOGD("remote req pid: %d", daemon_from_pid); + int mount_storage = read_int(fd); + char *cwd = read_string(fd); + LOGD("remote cwd: %s", cwd); struct ucred credentials; socklen_t ucred_length = sizeof(struct ucred); @@ -303,7 +307,6 @@ static int daemon_accept(int fd) { daemon_from_pid = credentials.pid; } - int mount_storage = read_int(fd); // The the FDs for each of the streams int infd = recv_fd(fd); int outfd = recv_fd(fd); @@ -441,6 +444,10 @@ static int daemon_accept(int fd) { } #endif + // Change directory to cwd + chdir(cwd); + free(cwd); + return run_daemon_child(infd, outfd, errfd, argc, argv); } @@ -575,6 +582,8 @@ int connect_daemon(int argc, char *argv[], int ppid) { int uid = getuid(); int ptmx = -1; char pts_slave[PATH_MAX]; + char cwd[PATH_MAX]; + getcwd(cwd, sizeof(cwd)); struct sockaddr_un sun; @@ -634,6 +643,8 @@ int connect_daemon(int argc, char *argv[], int ppid) { // Parent PID write_int(socketfd, ppid); write_int(socketfd, mount_storage); + // CWD + write_string(socketfd, cwd); // Send stdin if (atty & ATTY_IN) { diff --git a/su.c b/su.c index 1b963dc89..d79299e9a 100644 --- a/su.c +++ b/su.c @@ -1,5 +1,6 @@ // vim: set ts=4 expandtab sw=4 : /* +** Copyright 2017, John Wu (@topjohnwu) ** Copyright 2015, Pierre-Hugues Husson ** Copyright 2010, Adam Shanks (@ChainsDD) ** Copyright 2008, Zinx Verituse (@zinxv) diff --git a/su.h b/su.h index bdbd423bb..9f8598d1a 100644 --- a/su.h +++ b/su.h @@ -78,7 +78,7 @@ #ifndef VERSION_CODE #define VERSION_CODE 6 #endif -#define VERSION "MAGISKSU:" xstr(VERSION_CODE) " (topjohnwu)" +#define VERSION xstr(VERSION_CODE) ":MAGISKSU (topjohnwu)" #define PROTO_VERSION 1