11 typedef struct Name Name;
13 char shortname[ENCLEN + 1];
19 void rename(char*, char*, char*);
20 void renamedir(char*);
21 void readnames(char*);
24 main(int argc, char **argv)
31 snprint(lnfile, sizeof(lnfile), "%s/.longnames", d);
48 while((n = dirread(fd, &dir)) > 0){
49 for(i = 0; i < n; i++){
50 if(dir[i].mode & DMDIR){
51 sub = malloc(strlen(d) + 1 + strlen(dir[i].name) + 1);
52 sprint(sub, "%s/%s", d, dir[i].name);
56 if(strlen(dir[i].name) != ENCLEN)
58 for (na = names; na != nil; na = na->next){
59 if (strcmp(na->shortname, dir[i].name) == 0){
60 rename(d, dir[i].name, na->longname);
71 rename(char *d, char *old, char *new)
75 p = malloc(strlen(d) + 1 + strlen(old) + 1);
76 sprint(p, "%s/%s", d, old);
79 if(dirwstat(p, &dir) == -1)
80 fprint(2, "unlnfs: cannot rename %s to %s: %r\n", p, new);
85 long2short(char shortname[ENCLEN+1], char *longname)
87 uchar digest[MD5dlen];
88 md5((uchar*)longname, strlen(longname), digest, nil);
89 enc32(shortname, ENCLEN+1, digest, MD5dlen);
93 readnames(char *lnfile)
99 bio = Bopen(lnfile, OREAD);
101 fprint(2, "unlnfs: cannot open %s: %r\n", lnfile);
104 while((f = Brdstr(bio, '\n', 1)) != nil){
105 n = malloc(sizeof(Name));
107 long2short(n->shortname, f);