tallow - plan9port - [fork] Plan 9 from user space (HTM) git clone git://src.adamsgaard.dk/plan9port (DIR) Log (DIR) Files (DIR) Refs (DIR) README (DIR) LICENSE --- (DIR) commit 8538a66037f31e4c685a76244e3693bc85832805 (DIR) parent f1bfc54e12efe488e355debf696dbd999c62fe07 (HTM) Author: rsc <devnull@localhost> Date: Fri, 14 May 2004 18:25:49 +0000 allow sam -r machine filelist... from presotto Diffstat: M src/cmd/sam/io.c | 27 +++++++++++++++++++++++---- M src/cmd/sam/sam.c | 2 +- M src/cmd/sam/sam.h | 2 +- 3 files changed, 25 insertions(+), 6 deletions(-) --- (DIR) diff --git a/src/cmd/sam/io.c b/src/cmd/sam/io.c t@@ -219,10 +219,28 @@ bootterm(char *machine, char **argv, char **end) } void -connectto(char *machine) +connectto(char *machine, char **argv) { int p1[2], p2[2]; + char **av; + int ac; + // count args + for(av = argv; *av; av++) + ; + av = malloc(sizeof(char*)*((av-argv) + 5)); + if(av == nil){ + dprint("out of memory\n"); + exits("fork/exec"); + } + ac = 0; + av[ac++] = RX; + av[ac++] = machine; + av[ac++] = rsamname; + av[ac++] = "-R"; + while(*argv) + av[ac++] = *argv++; + av[ac] = 0; if(pipe(p1)<0 || pipe(p2)<0){ dprint("can't pipe\n"); exits("pipe"); t@@ -237,7 +255,7 @@ connectto(char *machine) close(p1[1]); close(p2[0]); close(p2[1]); - execlp(RXPATH, RX, machine, rsamname, "-R", (char*)0); + execvp(RXPATH, av); dprint("can't exec %s\n", RXPATH); exits("exec"); t@@ -245,15 +263,16 @@ connectto(char *machine) dprint("can't fork\n"); exits("fork"); } + free(av); close(p1[1]); close(p2[0]); } void -startup(char *machine, int Rflag, char **argv, char **end) +startup(char *machine, int Rflag, char **argv, char **end, char **files) { if(machine) - connectto(machine); + connectto(machine, files); if(!Rflag) bootterm(machine, argv, end); downloaded = 1; (DIR) diff --git a/src/cmd/sam/sam.c b/src/cmd/sam/sam.c t@@ -107,7 +107,7 @@ main(int argc, char *argv[]) if(home == 0) home = "/"; if(!dflag) - startup(machine, Rflag, arg, argv); + startup(machine, Rflag, arg, ap, argv); notify(notifyf); getcurwd(); if(argc>1){ (DIR) diff --git a/src/cmd/sam/sam.h b/src/cmd/sam/sam.h t@@ -292,7 +292,7 @@ void settempfile(void); int skipbl(void); void snarf(File*, Posn, Posn, Buffer*, int); void sortname(File*); -void startup(char*, int, char**, char**); +void startup(char*, int, char**, char**, char**); void state(File*, int); int statfd(int, ulong*, uvlong*, long*, long*, long*); int statfile(char*, ulong*, uvlong*, long*, long*, long*);