else cp++;
static char *fullpath __P((struct dosDirEntry *));static u_char calcShortSum __P((u_char *));static int delete __P((int, struct bootblock *, struct fatEntry *, cl_t, int,    cl_t, int, int));static int removede __P((int, struct bootblock *, struct fatEntry *, u_char *,    u_char *, cl_t, cl_t, cl_t, char *, int));static int checksize __P((struct bootblock *, struct fatEntry *, u_char *,    struct dosDirEntry *));static int readDosDirSection __P((int, struct bootblock *, struct fatEntry *,    struct dosDirEntry *));/* * Manage free dosDirEntry structures. */static struct dosDirEntry *freede;static struct dosDirEntry *newDosDirEntry(){	struct dosDirEntry *de;		if (!(de = freede)) {		if (!(de = (struct dosDirEntry *)malloc(sizeof *de)))			return (0);	} else		freede = de->next;	return (de);}static voidfreeDosDirEntry(de)	struct dosDirEntry *de;{	de->next = freede;	freede = de;}/* * The same for dirTodoNode structures. */static struct dirTodoNode *freedt;static struct dirTodoNode *newDirTodo(){	struct dirTodoNode *dt;		if (!(dt = freedt)) {		if (!(dt = (struct dirTodoNode *)malloc(sizeof *dt)))			return (0);	} else		freedt = dt->next;	return (dt);}static voidfreeDirTodo(dt)	struct dirTodoNode *dt;{	dt->next = freedt;	freedt = dt;}/* * The stack of unread directories */struct dirTodoNode *pendingDirectories = NULL;/* * Return the full pathname for a directory entry. */static char *fullpath(dir)	struct dosDirEntry *dir;{	static char namebuf[MAXPATHLEN + 1];	char *cp, *np;	int nl;		cp = namebuf + sizeof namebuf - 1;	*cp = '\0';	do {		np = dir->lname[0] ? dir->lname : dir->name;		nl = strlen(np);		if ((cp -= nl) <= namebuf + 1)			break;		(void)memcpy(cp, np, nl);		*--cp = '/';	} while ((dir = dir->parent) != NULL);	if (dir != NULL && dir->parent != NULL)		*--cp = '?';	return (cp);}