#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;
}
