Save and restore label and wdir on startup and exit. I tend to hop on and off remote machines quite a bit. Reference: /n/sources/patch/applied/conswdir-restore-dirs Date: Thu Jun 8 13:53:32 CES 2006 Signed-off-by: steve@quintile.net --- /sys/src/cmd/aux/conswdir.c Thu Jun 8 13:49:19 2006 +++ /sys/src/cmd/aux/conswdir.c Thu Jun 8 13:49:17 2006 @@ -11,6 +11,14 @@ #include #include +struct { + char *file; + char name[512]; +} keep[] = { + { "/dev/label" }, + { "/dev/wdir" } +}; + char *prog = "/bin/rwd"; void @@ -21,6 +29,31 @@ } void +save(void) +{ + int i, fd; + for(i = 0; i < nelem(keep); i++){ + *keep[i].name = 0; + if((fd = open(keep[i].file, OREAD)) != -1){ + read(fd, keep[i].name, sizeof(keep[i].name)); + close(fd); + } + } +} + +void +rest(void) +{ + int i, fd; + for(i = 0; i < nelem(keep); i++) + if((fd = open(keep[i].file, OWRITE)) != -1){ + fprint(fd, "%s", keep[i].name); + close(fd); + } + +} + +void setpath(char *s) { switch(rfork(RFPROC|RFFDG|RFNOWAIT)){ @@ -125,6 +158,7 @@ if(argc == 1) prog = argv[0]; + save(); n = 0; for(;;){ m = read(0, buf+n, sizeof buf-n); @@ -132,7 +166,7 @@ rerrstr(buf, sizeof buf); if(strstr(buf, "interrupt")) continue; - exits(nil); + break; } n += m; m = process(buf, n, &n); @@ -142,4 +176,6 @@ n -= m; } } + rest(); + exits(nil); }