Small adjustments

This commit is contained in:
topjohnwu 2018-11-26 03:26:45 -05:00
parent 731455f164
commit 29457a1d28
2 changed files with 10 additions and 8 deletions

View File

@ -20,6 +20,9 @@
int file_to_vector(const char *filename, Vector<CharArray> &arr);
char *strdup2(const char *s, size_t *size = nullptr);
int exec_array(bool err, int *fd, void (*pre_exec)(void), const char **argv);
int exec_command(bool err, int *fd, void (*cb)(void), const char *argv0, ...);
extern "C" {
#endif
@ -91,8 +94,6 @@ unsigned get_system_uid();
unsigned get_radio_uid();
ssize_t fdgets(char *buf, size_t size, int fd);
int is_num(const char *s);
int exec_array(bool err, int *fd, void (*cb)(void), const char **argv);
int exec_command(bool err, int *fd, void (*cb)(void), const char *argv0, ...);
int exec_command_sync(const char *argv0, ...);
int fork_dont_care();
void gen_rand_str(char *buf, int len);

View File

@ -184,9 +184,9 @@ int __fsetxattr(int fd, const char *name, const void *value, size_t size, int fl
fd == nullptr -> Ignore output
*fd < 0 -> Open pipe and set *fd to the read end
*fd >= 0 -> STDOUT (or STDERR) will be redirected to *fd
*cb -> A callback function which calls after forking
*pre_exec -> A callback function called after forking, before execvp
*/
int exec_array(bool err, int *fd, void (*cb)(void), const char **argv) {
int exec_array(bool err, int *fd, void (*pre_exec)(void), const char **argv) {
int pipefd[2], outfd = -1;
if (fd) {
@ -209,15 +209,16 @@ int exec_array(bool err, int *fd, void (*cb)(void), const char **argv) {
return pid;
}
if (fd) {
if (outfd >= 0) {
xdup2(outfd, STDOUT_FILENO);
if (err)
xdup2(outfd, STDERR_FILENO);
close(outfd);
}
// Setup environment
if (cb)
cb();
// Call the pre-exec callback
if (pre_exec)
pre_exec();
execvp(argv[0], (char **) argv);
PLOGE("execvp %s", argv[0]);