commit 8538a66037f31e4c685a76244e3693bc85832805 from: rsc date: Fri May 14 18:25:49 2004 UTC allow sam -r machine filelist... from presotto commit - f1bfc54e12efe488e355debf696dbd999c62fe07 commit + 8538a66037f31e4c685a76244e3693bc85832805 blob - b7317a9bcce2f4051a20016ece06680f355e11dc blob + cdea842c9b1203e2f8a8671c3155e6cdb896835f --- src/cmd/sam/io.c +++ src/cmd/sam/io.c @@ -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"); @@ -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"); @@ -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; blob - 5a009bb0c13a5450cd858c5e0a32e0acecf0c484 blob + 803b84e6298fc3e720ec76f327bfd38e14244beb --- src/cmd/sam/sam.c +++ src/cmd/sam/sam.c @@ -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){ blob - 1e92c73ecf5a30b347393048d084b7ef4461fe7f blob + 1ab2b49539307b9712968577a67529429daf439d --- src/cmd/sam/sam.h +++ src/cmd/sam/sam.h @@ -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*);