| unsharp.c - 9base - revived minimalist port of Plan 9 userland to Unix | |
| git clone git://git.suckless.org/9base | |
| Log | |
| Files | |
| Refs | |
| README | |
| LICENSE | |
| --- | |
| unsharp.c (927B) | |
| --- | |
| 1 #include <u.h> | |
| 2 #include <libc.h> | |
| 3 | |
| 4 /* | |
| 5 * I don't want too many of these, | |
| 6 * but the ones we have are just too useful. | |
| 7 */ | |
| 8 static struct { | |
| 9 char *old; | |
| 10 char *new; | |
| 11 } replace[] = { | |
| 12 "#9", nil, /* must be first */ | |
| 13 "#d", "/dev/fd", | |
| 14 }; | |
| 15 | |
| 16 char* | |
| 17 unsharp(char *old) | |
| 18 { | |
| 19 char *new; | |
| 20 int i, olen, nlen, len; | |
| 21 | |
| 22 if(replace[0].new == nil) | |
| 23 replace[0].new = get9root(); | |
| 24 | |
| 25 for(i=0; i<nelem(replace); i++){ | |
| 26 if(!replace[i].new) | |
| 27 continue; | |
| 28 olen = strlen(replace[i].old); | |
| 29 if(strncmp(old, replace[i].old, olen) != 0 | |
| 30 || (old[olen] != '\0' && old[olen] != '/')) | |
| 31 continue; | |
| 32 nlen = strlen(replace[i].new); | |
| 33 len = strlen(old)+nlen-olen; | |
| 34 new = malloc(len+1); | |
| 35 if(new == nil) | |
| 36 /* Most callers won't check the return value... … | |
| 37 sysfatal("out of memory translating %s to %s%s",… | |
| 38 strcpy(new, replace[i].new); | |
| 39 strcpy(new+nlen, old+olen); | |
| 40 assert(strlen(new) == len); | |
| 41 return new; | |
| 42 } | |
| 43 return old; | |
| 44 } |