rem: dp = (struct directory *)calloc(sizeof (struct directory), 1);
add: dp = (struct directory *)xcalloc(sizeof (struct directory), 1);
context: dopushd(tchar **v){	struct directory *dp;#ifdef TRACE	tprintf("TRACE- dopushd()\n");#endif	printd = 1;	if (*++v == NOSTR) {		if ((dp = dcwd->di_prev) == &dhead)			dp = dhead.di_prev;		if (dp == dcwd)			bferr("No other directory");		if (chdir_(dp->di_name) < 0)			Perror(dp->di_name);		dp->di_prev->di_next = dp->di_next;		dp->di_next->di_prev = dp->di_prev;		dp->di_next = dcwd->di_next;		dp->di_prev = dcwd;		dcwd->di_next->di_prev = dp;		dcwd->di_next = dp;	} else if (dp = dfind(*v)) {		if (chdir_(dp->di_name) < 0)			Perror(dp->di_name);	} else {		tchar *cp;		cp = dfollow(*v);		dp = (struct directory *)calloc(sizeof (struct directory), 1);		dp->di_name = cp;		dp->di_count = 0;		dp->di_prev = dcwd;		dp->di_next = dcwd->di_next;		dcwd->di_next = dp;		dp->di_next->di_prev = dp;	}	dnewcwd(dp);}