ref: 520d698c3e9ec8f76923965481aa15862f9f3c81
dir: /sys/src/cmd/cleanname.c/
#include <u.h> #include <libc.h> void main(int argc, char **argv) { char *dir; char *name; int i; dir = nil; ARGBEGIN{ case 'd': if((dir=ARGF()) == nil) goto Usage; break; default: goto Usage; }ARGEND; if(argc < 1) { Usage: fprint(2, "usage: cleanname [-d pwd] name...\n"); exits("usage"); } for(i=0; i<argc; i++) { if(dir == nil || argv[i][0] == '/') { cleanname(argv[i]); print("%s\n", argv[i]); } else { name = malloc(strlen(argv[i])+1+strlen(dir)+1); if(name == nil) { fprint(2, "cleanname: out of memory\n"); exits("out of memory"); } sprint(name, "%s/%s", dir, argv[i]); cleanname(name); print("%s\n", name); free(name); } } exits(0); }