unsharp.c - 9base - revived minimalist port of Plan 9 userland to Unix
(HTM) git clone git://git.suckless.org/9base
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) README
(DIR) 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", old, replace[i].new, old+olen);
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 }