#include #include #include "snap.h" static char *user = "gre"; static char *sys = "gnot"; static char *arch = "unknown"; static char *term = "unknown"; #ifdef LINUX #include extern char* getenv(char*); void vars(void) { struct utsname u; char *s, buf[64]; if(s = getenv("USER")) user = s; uname(&u); snprint(buf, sizeof buf, "%s:%s", u.sysname, u.release); sys = estrdup(buf); if(u.machine) arch =estrdup(u.machine); if(s = getenv("TERM")) term = s; } #else void vars(void) { extern char *getuser(void); extern char *sysname(void); extern char *getenv(char*); if((user = getuser()) == nil) user = "gre"; if((sys = sysname()) == nil) sys = "gnot"; if((arch = getenv("cputype")) == nil) arch = "unknown"; if((term = getenv("terminal")) == nil) term = "unknown terminal type"; } #endif void usage(void) { fprint(2, "usage: aoesnap [-o snapfile] shelf\n"); exits("usage"); } char *ofile; void main(int argc, char **argv) { Biobuf *b, b0; ofile = 0; ARGBEGIN{ case 'o': ofile = EARGF(usage()); break; default: usage(); }ARGEND; if(argc != 1) usage(); if(ofile == 0){ b = &b0; if(Binit(&b0, 1, OWRITE) == Beof) b = 0; }else b = Bopen(ofile, OWRITE); if(b == 0) sysfatal("Bopen: %r"); vars(); Bprint(&b->h, "process snapshot %ld %s@%s %s %ld \"%s\"\n", time(0), user, sys, arch, 0L, term); snapw(b, atoi(*argv)); exits(""); }