commit - 08e793723cad1c7aed2e8cb16c8592aba5ad05e9
commit + c9ed52730b352448c7c644f6942d310dd3509bf6
blob - f62c45b7668abf0f7fd29b672dd9f5ac71e2f368 (mode 644)
blob + /dev/null
--- src/cmd/du.C
+++ /dev/null
-#include <u.h>
-#include <libc.h>
-
-extern vlong du(char*, Dir*);
-extern vlong k(vlong);
-extern void err(char*);
-extern int warn(char*);
-extern int seen(Dir*);
-
-int aflag;
-int fflag;
-int nflag;
-int sflag;
-int tflag;
-int uflag;
-int qflag;
-char *fmt = "%llud\t%s\n";
-vlong blocksize = 1024LL;
-
-void
-main(int argc, char *argv[])
-{
- int i;
- char *s, *ss;
-
- ARGBEGIN {
- case 'a': /* all files */
- aflag = 1;
- break;
- case 's': /* only top level */
- sflag = 1;
- break;
- case 'f': /* ignore errors */
- fflag = 1;
- break;
- case 'n': /* all files, number of bytes */
- aflag = 1;
- nflag = 1;
- break;
- case 't': /* return modified/accessed time */
- tflag = 1;
- break;
- case 'u': /* accessed time */
- uflag = 1;
- break;
- case 'q': /* qid */
- fmt = "%.16llux\t%s\n";
- qflag = 1;
- break;
- case 'b': /* block size */
- s = ARGF();
- if(s) {
- blocksize = strtoul(s, &ss, 0);
- if(s == ss)
- blocksize = 1;
- if(*ss == 'k')
- blocksize *= 1024;
- }
- break;
- } ARGEND
- if(argc==0)
- print(fmt, du(".", dirstat(".")), ".");
- else
- for(i=0; i<argc; i++)
- print(fmt, du(argv[i], dirstat(argv[i])), argv[i]);
- exits(0);
-}
-
-vlong
-du(char *name, Dir *dir)
-{
- int fd, i, n;
- Dir *buf, *d;
- char file[256];
- vlong nk, t;
-
- if(dir == nil)
- return warn(name);
-
- fd = open(name, OREAD);
- if(fd < 0)
- return warn(name);
-
- if((dir->qid.type&QTDIR) == 0)
- nk = k(dir->length);
- else{
- nk = 0;
- while((n=dirread(fd, &buf)) > 0) {
- d = buf;
- for(i=0; i<n; i++, d++) {
- if((d->qid.type&QTDIR) == 0) {
- t = k(d->length);
- nk += t;
- if(aflag) {
- sprint(file, "%s/%s", name, d->name);
- if(tflag) {
- t = d->mtime;
- if(uflag)
- t = d->atime;
- }
- if(qflag)
- t = d->qid.path;
- print(fmt, t, file);
- }
- continue;
- }
- if(strcmp(d->name, ".") == 0 ||
- strcmp(d->name, "..") == 0 ||
- seen(d))
- continue;
- sprint(file, "%s/%s", name, d->name);
- t = du(file, d);
- nk += t;
- if(tflag) {
- t = d->mtime;
- if(uflag)
- t = d->atime;
- }
- if(qflag)
- t = d->qid.path;
- if(!sflag)
- print(fmt, t, file);
- }
- free(buf);
- }
- if(n < 0)
- warn(name);
- }
- close(fd);
- if(tflag) {
- if(uflag)
- return dir->atime;
- return dir->mtime;
- }
- if(qflag)
- return dir->qid.path;
- return nk;
-}
-
-#define NCACHE 128 /* must be power of two */
-typedef struct Cache Cache;
-struct Cache
-{
- Dir* cache;
- int n;
- int max;
-} cache[NCACHE];
-
-int
-seen(Dir *dir)
-{
- Dir *dp;
- int i;
- Cache *c;
-
- c = &cache[dir->qid.path&(NCACHE-1)];
- dp = c->cache;
- for(i=0; i<c->n; i++, dp++)
- if(dir->qid.path == dp->qid.path &&
- dir->type == dp->type &&
- dir->dev == dp->dev)
- return 1;
- if(c->n == c->max){
- c->cache = realloc(c->cache, (c->max+=20)*sizeof(Dir));
- if(c->cache == 0)
- err("malloc failure");
- }
- c->cache[c->n++] = *dir;
- return 0;
-}
-
-void
-err(char *s)
-{
- fprint(2, "du: %s: %r\n", s);
- exits(s);
-}
-
-int
-warn(char *s)
-{
- if(fflag == 0)
- fprint(2, "du: %s: %r\n", s);
- return 0;
-}
-
-vlong
-k(vlong n)
-{
- if(nflag)
- return n;
- n = (n+blocksize-1)/blocksize;
- return n*blocksize/1024LL;
-}
blob - /dev/null
blob + f62c45b7668abf0f7fd29b672dd9f5ac71e2f368 (mode 644)
--- /dev/null
+++ src/cmd/du.c
+#include <u.h>
+#include <libc.h>
+
+extern vlong du(char*, Dir*);
+extern vlong k(vlong);
+extern void err(char*);
+extern int warn(char*);
+extern int seen(Dir*);
+
+int aflag;
+int fflag;
+int nflag;
+int sflag;
+int tflag;
+int uflag;
+int qflag;
+char *fmt = "%llud\t%s\n";
+vlong blocksize = 1024LL;
+
+void
+main(int argc, char *argv[])
+{
+ int i;
+ char *s, *ss;
+
+ ARGBEGIN {
+ case 'a': /* all files */
+ aflag = 1;
+ break;
+ case 's': /* only top level */
+ sflag = 1;
+ break;
+ case 'f': /* ignore errors */
+ fflag = 1;
+ break;
+ case 'n': /* all files, number of bytes */
+ aflag = 1;
+ nflag = 1;
+ break;
+ case 't': /* return modified/accessed time */
+ tflag = 1;
+ break;
+ case 'u': /* accessed time */
+ uflag = 1;
+ break;
+ case 'q': /* qid */
+ fmt = "%.16llux\t%s\n";
+ qflag = 1;
+ break;
+ case 'b': /* block size */
+ s = ARGF();
+ if(s) {
+ blocksize = strtoul(s, &ss, 0);
+ if(s == ss)
+ blocksize = 1;
+ if(*ss == 'k')
+ blocksize *= 1024;
+ }
+ break;
+ } ARGEND
+ if(argc==0)
+ print(fmt, du(".", dirstat(".")), ".");
+ else
+ for(i=0; i<argc; i++)
+ print(fmt, du(argv[i], dirstat(argv[i])), argv[i]);
+ exits(0);
+}
+
+vlong
+du(char *name, Dir *dir)
+{
+ int fd, i, n;
+ Dir *buf, *d;
+ char file[256];
+ vlong nk, t;
+
+ if(dir == nil)
+ return warn(name);
+
+ fd = open(name, OREAD);
+ if(fd < 0)
+ return warn(name);
+
+ if((dir->qid.type&QTDIR) == 0)
+ nk = k(dir->length);
+ else{
+ nk = 0;
+ while((n=dirread(fd, &buf)) > 0) {
+ d = buf;
+ for(i=0; i<n; i++, d++) {
+ if((d->qid.type&QTDIR) == 0) {
+ t = k(d->length);
+ nk += t;
+ if(aflag) {
+ sprint(file, "%s/%s", name, d->name);
+ if(tflag) {
+ t = d->mtime;
+ if(uflag)
+ t = d->atime;
+ }
+ if(qflag)
+ t = d->qid.path;
+ print(fmt, t, file);
+ }
+ continue;
+ }
+ if(strcmp(d->name, ".") == 0 ||
+ strcmp(d->name, "..") == 0 ||
+ seen(d))
+ continue;
+ sprint(file, "%s/%s", name, d->name);
+ t = du(file, d);
+ nk += t;
+ if(tflag) {
+ t = d->mtime;
+ if(uflag)
+ t = d->atime;
+ }
+ if(qflag)
+ t = d->qid.path;
+ if(!sflag)
+ print(fmt, t, file);
+ }
+ free(buf);
+ }
+ if(n < 0)
+ warn(name);
+ }
+ close(fd);
+ if(tflag) {
+ if(uflag)
+ return dir->atime;
+ return dir->mtime;
+ }
+ if(qflag)
+ return dir->qid.path;
+ return nk;
+}
+
+#define NCACHE 128 /* must be power of two */
+typedef struct Cache Cache;
+struct Cache
+{
+ Dir* cache;
+ int n;
+ int max;
+} cache[NCACHE];
+
+int
+seen(Dir *dir)
+{
+ Dir *dp;
+ int i;
+ Cache *c;
+
+ c = &cache[dir->qid.path&(NCACHE-1)];
+ dp = c->cache;
+ for(i=0; i<c->n; i++, dp++)
+ if(dir->qid.path == dp->qid.path &&
+ dir->type == dp->type &&
+ dir->dev == dp->dev)
+ return 1;
+ if(c->n == c->max){
+ c->cache = realloc(c->cache, (c->max+=20)*sizeof(Dir));
+ if(c->cache == 0)
+ err("malloc failure");
+ }
+ c->cache[c->n++] = *dir;
+ return 0;
+}
+
+void
+err(char *s)
+{
+ fprint(2, "du: %s: %r\n", s);
+ exits(s);
+}
+
+int
+warn(char *s)
+{
+ if(fflag == 0)
+ fprint(2, "du: %s: %r\n", s);
+ return 0;
+}
+
+vlong
+k(vlong n)
+{
+ if(nflag)
+ return n;
+ n = (n+blocksize-1)/blocksize;
+ return n*blocksize/1024LL;
+}
blob - 60615059bf495daa3f88cc58d7692ca7b9033c3b (mode 644)
blob + /dev/null
--- src/cmd/ls.C
+++ /dev/null
-#include <u.h>
-#include <libc.h>
-#include <bio.h>
-
-#define dirbuf p9dirbuf /* avoid conflict on sun */
-
-typedef struct NDir NDir;
-struct NDir
-{
- Dir *d;
- char *prefix;
-};
-
-int errs = 0;
-int dflag;
-int lflag;
-int mflag;
-int nflag;
-int pflag;
-int qflag;
-int Qflag;
-int rflag;
-int sflag;
-int tflag;
-int uflag;
-int Fflag;
-int ndirbuf;
-int ndir;
-NDir* dirbuf;
-int ls(char*, int);
-int compar(NDir*, NDir*);
-char* asciitime(long);
-char* darwx(long);
-void rwx(long, char*);
-void growto(long);
-void dowidths(Dir*);
-void format(Dir*, char*);
-void output(void);
-ulong clk;
-int swidth; /* max width of -s size */
-int qwidth; /* max width of -q version */
-int vwidth; /* max width of dev */
-int uwidth; /* max width of userid */
-int mwidth; /* max width of muid */
-int glwidth; /* max width of groupid and length */
-Biobuf bin;
-
-void
-main(int argc, char *argv[])
-{
- int i;
-
- Binit(&bin, 1, OWRITE);
- ARGBEGIN{
- case 'F': Fflag++; break;
- case 'd': dflag++; break;
- case 'l': lflag++; break;
- case 'm': mflag++; break;
- case 'n': nflag++; break;
- case 'p': pflag++; break;
- case 'q': qflag++; break;
- case 'Q': Qflag++; break;
- case 'r': rflag++; break;
- case 's': sflag++; break;
- case 't': tflag++; break;
- case 'u': uflag++; break;
- default: fprint(2, "usage: ls [-dlmnpqrstuFQ] [file ...]\n");
- exits("usage");
- }ARGEND
-
- doquote = needsrcquote;
- quotefmtinstall();
- fmtinstall('M', dirmodefmt);
-
- if(lflag)
- clk = time(0);
- if(argc == 0)
- errs = ls(".", 0);
- else for(i=0; i<argc; i++)
- errs |= ls(argv[i], 1);
- output();
- exits(errs? "errors" : 0);
-}
-
-int
-ls(char *s, int multi)
-{
- int fd;
- long i, n;
- char *p;
- Dir *db;
-
- for(;;) {
- p = utfrrune(s, '/');
- if(p == 0 || p[1] != 0 || p == s)
- break;
- *p = 0;
- }
- db = dirstat(s);
- if(db == nil){
- error:
- fprint(2, "ls: %s: %r\n", s);
- return 1;
- }
- if(db->qid.type&QTDIR && dflag==0){
- free(db);
- db = nil;
- output();
- fd = open(s, OREAD);
- if(fd == -1)
- goto error;
- n = dirreadall(fd, &db);
- if(n < 0)
- goto error;
- growto(ndir+n);
- for(i=0; i<n; i++){
- dirbuf[ndir+i].d = db+i;
- dirbuf[ndir+i].prefix = multi? s : 0;
- }
- ndir += n;
- close(fd);
- output();
- }else{
- growto(ndir+1);
- dirbuf[ndir].d = db;
- dirbuf[ndir].prefix = 0;
- p = utfrrune(s, '/');
- if(p){
- dirbuf[ndir].prefix = s;
- *p = 0;
- /* restore original name; don't use result of stat */
- dirbuf[ndir].d->name = strdup(p+1);
- }
- ndir++;
- }
- return 0;
-}
-
-void
-output(void)
-{
- int i;
- char buf[4096];
- char *s;
-
- if(!nflag)
- qsort(dirbuf, ndir, sizeof dirbuf[0], (int (*)(const void*, const void*))compar);
- for(i=0; i<ndir; i++)
- dowidths(dirbuf[i].d);
- for(i=0; i<ndir; i++) {
- if(!pflag && (s = dirbuf[i].prefix)) {
- if(strcmp(s, "/") ==0) /* / is a special case */
- s = "";
- sprint(buf, "%s/%s", s, dirbuf[i].d->name);
- format(dirbuf[i].d, buf);
- } else
- format(dirbuf[i].d, dirbuf[i].d->name);
- }
- ndir = 0;
- Bflush(&bin);
-}
-
-void
-dowidths(Dir *db)
-{
- char buf[256];
- int n;
-
- if(sflag) {
- n = sprint(buf, "%llud", (db->length+1023)/1024);
- if(n > swidth)
- swidth = n;
- }
- if(qflag) {
- n = sprint(buf, "%lud", db->qid.vers);
- if(n > qwidth)
- qwidth = n;
- }
- if(mflag) {
- n = snprint(buf, sizeof buf, "[%s]", db->muid);
- if(n > mwidth)
- mwidth = n;
- }
- if(lflag) {
- n = sprint(buf, "%ud", db->dev);
- if(n > vwidth)
- vwidth = n;
- n = strlen(db->uid);
- if(n > uwidth)
- uwidth = n;
- n = sprint(buf, "%llud", db->length);
- n += strlen(db->gid);
- if(n > glwidth)
- glwidth = n;
- }
-}
-
-char*
-fileflag(Dir *db)
-{
- if(Fflag == 0)
- return "";
- if(QTDIR & db->qid.type)
- return "/";
- if(0111 & db->mode)
- return "*";
- return "";
-}
-
-void
-format(Dir *db, char *name)
-{
- int i;
-
- if(sflag)
- Bprint(&bin, "%*llud ",
- swidth, (db->length+1023)/1024);
- if(mflag){
- Bprint(&bin, "[%s] ", db->muid);
- for(i=2+strlen(db->muid); i<mwidth; i++)
- Bprint(&bin, " ");
- }
- if(qflag)
- Bprint(&bin, "(%.16llux %*lud %.2ux) ",
- db->qid.path,
- qwidth, db->qid.vers,
- db->qid.type);
- if(lflag)
- Bprint(&bin,
- "%M %C %*ud %*s %s %*llud %s ",
- db->mode, db->type,
- vwidth, db->dev,
- -uwidth, db->uid,
- db->gid,
- (int)(glwidth-strlen(db->gid)), db->length,
- asciitime(uflag? db->atime : db->mtime));
- Bprint(&bin,
- Qflag? "%s%s\n" : "%q%s\n",
- name, fileflag(db));
-}
-
-void
-growto(long n)
-{
- if(n <= ndirbuf)
- return;
- ndirbuf = n;
- dirbuf=(NDir *)realloc(dirbuf, ndirbuf*sizeof(NDir));
- if(dirbuf == 0){
- fprint(2, "ls: malloc fail\n");
- exits("malloc fail");
- }
-}
-
-int
-compar(NDir *a, NDir *b)
-{
- long i;
- Dir *ad, *bd;
-
- ad = a->d;
- bd = b->d;
-
- if(tflag){
- if(uflag)
- i = bd->atime-ad->atime;
- else
- i = bd->mtime-ad->mtime;
- }else{
- if(a->prefix && b->prefix){
- i = strcmp(a->prefix, b->prefix);
- if(i == 0)
- i = strcmp(ad->name, bd->name);
- }else if(a->prefix){
- i = strcmp(a->prefix, bd->name);
- if(i == 0)
- i = 1; /* a is longer than b */
- }else if(b->prefix){
- i = strcmp(ad->name, b->prefix);
- if(i == 0)
- i = -1; /* b is longer than a */
- }else
- i = strcmp(ad->name, bd->name);
- }
- if(i == 0)
- i = (ad<bd? -1 : 1);
- if(rflag)
- i = -i;
- return i;
-}
-
-char*
-asciitime(long l)
-{
- static char buf[32];
- char *t;
-
- t = ctime(l);
- /* 6 months in the past or a day in the future */
- if(l<clk-180L*24*60*60 || clk+24L*60*60<l){
- memmove(buf, t+4, 7); /* month and day */
- memmove(buf+7, t+23, 5); /* year */
- }else
- memmove(buf, t+4, 12); /* skip day of week */
- buf[12] = 0;
- return buf;
-}
-
blob - /dev/null
blob + 60615059bf495daa3f88cc58d7692ca7b9033c3b (mode 644)
--- /dev/null
+++ src/cmd/ls.c
+#include <u.h>
+#include <libc.h>
+#include <bio.h>
+
+#define dirbuf p9dirbuf /* avoid conflict on sun */
+
+typedef struct NDir NDir;
+struct NDir
+{
+ Dir *d;
+ char *prefix;
+};
+
+int errs = 0;
+int dflag;
+int lflag;
+int mflag;
+int nflag;
+int pflag;
+int qflag;
+int Qflag;
+int rflag;
+int sflag;
+int tflag;
+int uflag;
+int Fflag;
+int ndirbuf;
+int ndir;
+NDir* dirbuf;
+int ls(char*, int);
+int compar(NDir*, NDir*);
+char* asciitime(long);
+char* darwx(long);
+void rwx(long, char*);
+void growto(long);
+void dowidths(Dir*);
+void format(Dir*, char*);
+void output(void);
+ulong clk;
+int swidth; /* max width of -s size */
+int qwidth; /* max width of -q version */
+int vwidth; /* max width of dev */
+int uwidth; /* max width of userid */
+int mwidth; /* max width of muid */
+int glwidth; /* max width of groupid and length */
+Biobuf bin;
+
+void
+main(int argc, char *argv[])
+{
+ int i;
+
+ Binit(&bin, 1, OWRITE);
+ ARGBEGIN{
+ case 'F': Fflag++; break;
+ case 'd': dflag++; break;
+ case 'l': lflag++; break;
+ case 'm': mflag++; break;
+ case 'n': nflag++; break;
+ case 'p': pflag++; break;
+ case 'q': qflag++; break;
+ case 'Q': Qflag++; break;
+ case 'r': rflag++; break;
+ case 's': sflag++; break;
+ case 't': tflag++; break;
+ case 'u': uflag++; break;
+ default: fprint(2, "usage: ls [-dlmnpqrstuFQ] [file ...]\n");
+ exits("usage");
+ }ARGEND
+
+ doquote = needsrcquote;
+ quotefmtinstall();
+ fmtinstall('M', dirmodefmt);
+
+ if(lflag)
+ clk = time(0);
+ if(argc == 0)
+ errs = ls(".", 0);
+ else for(i=0; i<argc; i++)
+ errs |= ls(argv[i], 1);
+ output();
+ exits(errs? "errors" : 0);
+}
+
+int
+ls(char *s, int multi)
+{
+ int fd;
+ long i, n;
+ char *p;
+ Dir *db;
+
+ for(;;) {
+ p = utfrrune(s, '/');
+ if(p == 0 || p[1] != 0 || p == s)
+ break;
+ *p = 0;
+ }
+ db = dirstat(s);
+ if(db == nil){
+ error:
+ fprint(2, "ls: %s: %r\n", s);
+ return 1;
+ }
+ if(db->qid.type&QTDIR && dflag==0){
+ free(db);
+ db = nil;
+ output();
+ fd = open(s, OREAD);
+ if(fd == -1)
+ goto error;
+ n = dirreadall(fd, &db);
+ if(n < 0)
+ goto error;
+ growto(ndir+n);
+ for(i=0; i<n; i++){
+ dirbuf[ndir+i].d = db+i;
+ dirbuf[ndir+i].prefix = multi? s : 0;
+ }
+ ndir += n;
+ close(fd);
+ output();
+ }else{
+ growto(ndir+1);
+ dirbuf[ndir].d = db;
+ dirbuf[ndir].prefix = 0;
+ p = utfrrune(s, '/');
+ if(p){
+ dirbuf[ndir].prefix = s;
+ *p = 0;
+ /* restore original name; don't use result of stat */
+ dirbuf[ndir].d->name = strdup(p+1);
+ }
+ ndir++;
+ }
+ return 0;
+}
+
+void
+output(void)
+{
+ int i;
+ char buf[4096];
+ char *s;
+
+ if(!nflag)
+ qsort(dirbuf, ndir, sizeof dirbuf[0], (int (*)(const void*, const void*))compar);
+ for(i=0; i<ndir; i++)
+ dowidths(dirbuf[i].d);
+ for(i=0; i<ndir; i++) {
+ if(!pflag && (s = dirbuf[i].prefix)) {
+ if(strcmp(s, "/") ==0) /* / is a special case */
+ s = "";
+ sprint(buf, "%s/%s", s, dirbuf[i].d->name);
+ format(dirbuf[i].d, buf);
+ } else
+ format(dirbuf[i].d, dirbuf[i].d->name);
+ }
+ ndir = 0;
+ Bflush(&bin);
+}
+
+void
+dowidths(Dir *db)
+{
+ char buf[256];
+ int n;
+
+ if(sflag) {
+ n = sprint(buf, "%llud", (db->length+1023)/1024);
+ if(n > swidth)
+ swidth = n;
+ }
+ if(qflag) {
+ n = sprint(buf, "%lud", db->qid.vers);
+ if(n > qwidth)
+ qwidth = n;
+ }
+ if(mflag) {
+ n = snprint(buf, sizeof buf, "[%s]", db->muid);
+ if(n > mwidth)
+ mwidth = n;
+ }
+ if(lflag) {
+ n = sprint(buf, "%ud", db->dev);
+ if(n > vwidth)
+ vwidth = n;
+ n = strlen(db->uid);
+ if(n > uwidth)
+ uwidth = n;
+ n = sprint(buf, "%llud", db->length);
+ n += strlen(db->gid);
+ if(n > glwidth)
+ glwidth = n;
+ }
+}
+
+char*
+fileflag(Dir *db)
+{
+ if(Fflag == 0)
+ return "";
+ if(QTDIR & db->qid.type)
+ return "/";
+ if(0111 & db->mode)
+ return "*";
+ return "";
+}
+
+void
+format(Dir *db, char *name)
+{
+ int i;
+
+ if(sflag)
+ Bprint(&bin, "%*llud ",
+ swidth, (db->length+1023)/1024);
+ if(mflag){
+ Bprint(&bin, "[%s] ", db->muid);
+ for(i=2+strlen(db->muid); i<mwidth; i++)
+ Bprint(&bin, " ");
+ }
+ if(qflag)
+ Bprint(&bin, "(%.16llux %*lud %.2ux) ",
+ db->qid.path,
+ qwidth, db->qid.vers,
+ db->qid.type);
+ if(lflag)
+ Bprint(&bin,
+ "%M %C %*ud %*s %s %*llud %s ",
+ db->mode, db->type,
+ vwidth, db->dev,
+ -uwidth, db->uid,
+ db->gid,
+ (int)(glwidth-strlen(db->gid)), db->length,
+ asciitime(uflag? db->atime : db->mtime));
+ Bprint(&bin,
+ Qflag? "%s%s\n" : "%q%s\n",
+ name, fileflag(db));
+}
+
+void
+growto(long n)
+{
+ if(n <= ndirbuf)
+ return;
+ ndirbuf = n;
+ dirbuf=(NDir *)realloc(dirbuf, ndirbuf*sizeof(NDir));
+ if(dirbuf == 0){
+ fprint(2, "ls: malloc fail\n");
+ exits("malloc fail");
+ }
+}
+
+int
+compar(NDir *a, NDir *b)
+{
+ long i;
+ Dir *ad, *bd;
+
+ ad = a->d;
+ bd = b->d;
+
+ if(tflag){
+ if(uflag)
+ i = bd->atime-ad->atime;
+ else
+ i = bd->mtime-ad->mtime;
+ }else{
+ if(a->prefix && b->prefix){
+ i = strcmp(a->prefix, b->prefix);
+ if(i == 0)
+ i = strcmp(ad->name, bd->name);
+ }else if(a->prefix){
+ i = strcmp(a->prefix, bd->name);
+ if(i == 0)
+ i = 1; /* a is longer than b */
+ }else if(b->prefix){
+ i = strcmp(ad->name, b->prefix);
+ if(i == 0)
+ i = -1; /* b is longer than a */
+ }else
+ i = strcmp(ad->name, bd->name);
+ }
+ if(i == 0)
+ i = (ad<bd? -1 : 1);
+ if(rflag)
+ i = -i;
+ return i;
+}
+
+char*
+asciitime(long l)
+{
+ static char buf[32];
+ char *t;
+
+ t = ctime(l);
+ /* 6 months in the past or a day in the future */
+ if(l<clk-180L*24*60*60 || clk+24L*60*60<l){
+ memmove(buf, t+4, 7); /* month and day */
+ memmove(buf+7, t+23, 5); /* year */
+ }else
+ memmove(buf, t+4, 12); /* skip day of week */
+ buf[12] = 0;
+ return buf;
+}
+
blob - 8eabbf62f0c6bc31f74c6f35aee59f79f6ffc058 (mode 644)
blob + /dev/null
--- src/cmd/md5sum.C
+++ /dev/null
-#include <u.h>
-#include <libc.h>
-#include <bio.h>
-#include <libsec.h>
-
-static int
-digestfmt(Fmt *fmt)
-{
- char buf[MD5dlen*2+1];
- uchar *p;
- int i;
-
- p = va_arg(fmt->args, uchar*);
- for(i=0; i<MD5dlen; i++)
- sprint(buf+2*i, "%.2ux", p[i]);
- return fmtstrcpy(fmt, buf);
-}
-
-static void
-sum(int fd, char *name)
-{
- int n;
- uchar buf[8192], digest[MD5dlen];
- DigestState *s;
-
- s = md5(nil, 0, nil, nil);
- while((n = read(fd, buf, sizeof buf)) > 0)
- md5(buf, n, nil, s);
- md5(nil, 0, digest, s);
- if(name == nil)
- print("%M\n", digest);
- else
- print("%M\t%s\n", digest, name);
-}
-
-void
-main(int argc, char *argv[])
-{
- int i, fd;
-
- ARGBEGIN{
- default:
- fprint(2, "usage: md5sum [file...]\n");
- exits("usage");
- }ARGEND
-
- fmtinstall('M', digestfmt);
-
- if(argc == 0)
- sum(0, nil);
- else for(i = 0; i < argc; i++){
- fd = open(argv[i], OREAD);
- if(fd < 0){
- fprint(2, "md5sum: can't open %s: %r\n", argv[i]);
- continue;
- }
- sum(fd, argv[i]);
- close(fd);
- }
- exits(nil);
-}
blob - /dev/null
blob + 8eabbf62f0c6bc31f74c6f35aee59f79f6ffc058 (mode 644)
--- /dev/null
+++ src/cmd/md5sum.c
+#include <u.h>
+#include <libc.h>
+#include <bio.h>
+#include <libsec.h>
+
+static int
+digestfmt(Fmt *fmt)
+{
+ char buf[MD5dlen*2+1];
+ uchar *p;
+ int i;
+
+ p = va_arg(fmt->args, uchar*);
+ for(i=0; i<MD5dlen; i++)
+ sprint(buf+2*i, "%.2ux", p[i]);
+ return fmtstrcpy(fmt, buf);
+}
+
+static void
+sum(int fd, char *name)
+{
+ int n;
+ uchar buf[8192], digest[MD5dlen];
+ DigestState *s;
+
+ s = md5(nil, 0, nil, nil);
+ while((n = read(fd, buf, sizeof buf)) > 0)
+ md5(buf, n, nil, s);
+ md5(nil, 0, digest, s);
+ if(name == nil)
+ print("%M\n", digest);
+ else
+ print("%M\t%s\n", digest, name);
+}
+
+void
+main(int argc, char *argv[])
+{
+ int i, fd;
+
+ ARGBEGIN{
+ default:
+ fprint(2, "usage: md5sum [file...]\n");
+ exits("usage");
+ }ARGEND
+
+ fmtinstall('M', digestfmt);
+
+ if(argc == 0)
+ sum(0, nil);
+ else for(i = 0; i < argc; i++){
+ fd = open(argv[i], OREAD);
+ if(fd < 0){
+ fprint(2, "md5sum: can't open %s: %r\n", argv[i]);
+ continue;
+ }
+ sum(fd, argv[i]);
+ close(fd);
+ }
+ exits(nil);
+}
blob - 1c16565d5be8c3c819bc941c34129b1e29929784 (mode 644)
blob + /dev/null
--- src/cmd/mkdir.C
+++ /dev/null
-#include <u.h>
-#include <libc.h>
-
-char *e;
-ulong mode = 0777L;
-
-void
-usage(void)
-{
- fprint(2, "usage: mkdir [-p] [-m mode] dir...\n");
- exits("usage");
-}
-
-int
-makedir(char *s)
-{
- int f;
-
- if(access(s, AEXIST) == 0){
- fprint(2, "mkdir: %s already exists\n", s);
- e = "error";
- return -1;
- }
- f = create(s, OREAD, DMDIR | mode);
- if(f < 0){
- fprint(2, "mkdir: can't create %s: %r\n", s);
- e = "error";
- return -1;
- }
- close(f);
- return 0;
-}
-
-void
-mkdirp(char *s)
-{
- char *p;
-
- for(p=strchr(s+1, '/'); p; p=strchr(p+1, '/')){
- *p = 0;
- if(access(s, AEXIST) != 0 && makedir(s) < 0)
- return;
- *p = '/';
- }
- if(access(s, AEXIST) != 0)
- makedir(s);
-}
-
-
-void
-main(int argc, char *argv[])
-{
- int i, pflag;
- char *m;
-
- pflag = 0;
- ARGBEGIN{
- default:
- usage();
- case 'm':
- m = ARGF();
- if(m == nil)
- usage();
- mode = strtoul(m, &m, 8);
- if(mode > 0777)
- usage();
- break;
- case 'p':
- pflag = 1;
- break;
- }ARGEND
-
- for(i=0; i<argc; i++){
- if(pflag)
- mkdirp(argv[i]);
- else
- makedir(argv[i]);
- }
- exits(e);
-}
blob - /dev/null
blob + 1c16565d5be8c3c819bc941c34129b1e29929784 (mode 644)
--- /dev/null
+++ src/cmd/mkdir.c
+#include <u.h>
+#include <libc.h>
+
+char *e;
+ulong mode = 0777L;
+
+void
+usage(void)
+{
+ fprint(2, "usage: mkdir [-p] [-m mode] dir...\n");
+ exits("usage");
+}
+
+int
+makedir(char *s)
+{
+ int f;
+
+ if(access(s, AEXIST) == 0){
+ fprint(2, "mkdir: %s already exists\n", s);
+ e = "error";
+ return -1;
+ }
+ f = create(s, OREAD, DMDIR | mode);
+ if(f < 0){
+ fprint(2, "mkdir: can't create %s: %r\n", s);
+ e = "error";
+ return -1;
+ }
+ close(f);
+ return 0;
+}
+
+void
+mkdirp(char *s)
+{
+ char *p;
+
+ for(p=strchr(s+1, '/'); p; p=strchr(p+1, '/')){
+ *p = 0;
+ if(access(s, AEXIST) != 0 && makedir(s) < 0)
+ return;
+ *p = '/';
+ }
+ if(access(s, AEXIST) != 0)
+ makedir(s);
+}
+
+
+void
+main(int argc, char *argv[])
+{
+ int i, pflag;
+ char *m;
+
+ pflag = 0;
+ ARGBEGIN{
+ default:
+ usage();
+ case 'm':
+ m = ARGF();
+ if(m == nil)
+ usage();
+ mode = strtoul(m, &m, 8);
+ if(mode > 0777)
+ usage();
+ break;
+ case 'p':
+ pflag = 1;
+ break;
+ }ARGEND
+
+ for(i=0; i<argc; i++){
+ if(pflag)
+ mkdirp(argv[i]);
+ else
+ makedir(argv[i]);
+ }
+ exits(e);
+}