44 lines · 927 B · C
RawDownload
#include <u.h>#include <libc.h> /* * I don't want too many of these, * but the ones we have are just too useful.  */static struct {	char *old;	char *new;} replace[] = {	"#9", nil,	/* must be first */	"#d", "/dev/fd",}; char*unsharp(char *old){	char *new;	int i, olen, nlen, len; 	if(replace[0].new == nil)		replace[0].new = get9root(); 	for(i=0; i<nelem(replace); i++){		if(!replace[i].new)			continue;		olen = strlen(replace[i].old);		if(strncmp(old, replace[i].old, olen) != 0		|| (old[olen] != '\0' && old[olen] != '/'))			continue;		nlen = strlen(replace[i].new);		len = strlen(old)+nlen-olen;		new = malloc(len+1);		if(new == nil)			/* Most callers won't check the return value... */			sysfatal("out of memory translating %s to %s%s", old, replace[i].new, old+olen);		strcpy(new, replace[i].new);		strcpy(new+nlen, old+olen);		assert(strlen(new) == len);		return new;	}	return old;}