aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/sam
diff options
context:
space:
mode:
authorrsc <devnull@localhost>2004-05-14 18:25:49 +0000
committerrsc <devnull@localhost>2004-05-14 18:25:49 +0000
commit8538a66037f31e4c685a76244e3693bc85832805 (patch)
tree8c46494cb0523fcdf944fc465179474f81fac16b /src/cmd/sam
parentf1bfc54e12efe488e355debf696dbd999c62fe07 (diff)
downloadplan9port-8538a66037f31e4c685a76244e3693bc85832805.tar.gz
plan9port-8538a66037f31e4c685a76244e3693bc85832805.tar.bz2
plan9port-8538a66037f31e4c685a76244e3693bc85832805.zip
allow
sam -r machine filelist... from presotto
Diffstat (limited to 'src/cmd/sam')
-rw-r--r--src/cmd/sam/io.c27
-rw-r--r--src/cmd/sam/sam.c2
-rw-r--r--src/cmd/sam/sam.h2
3 files changed, 25 insertions, 6 deletions
diff --git a/src/cmd/sam/io.c b/src/cmd/sam/io.c
index b7317a9b..cdea842c 100644
--- a/src/cmd/sam/io.c
+++ b/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;
diff --git a/src/cmd/sam/sam.c b/src/cmd/sam/sam.c
index 5a009bb0..803b84e6 100644
--- a/src/cmd/sam/sam.c
+++ b/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){
diff --git a/src/cmd/sam/sam.h b/src/cmd/sam/sam.h
index 1e92c73e..1ab2b495 100644
--- a/src/cmd/sam/sam.h
+++ b/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*);