⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 subdir.c

📁 MTOOLS version 2.0 Mtools is a public domain collection of programs to allow Unix systems t
💻 C
字号:
#include <stdio.h>#include "msdos.h"extern int dir_entries;static int descend();/* * Descends the directory tree.  Returns 1 on error.  Attempts to optimize by * remembering the last path it parsed */intsubdir(drive, pathname)char drive;char *pathname;{	char *s, *tmp, tbuf[MAX_PATH], *path, *strcpy();	static char last_drive, lastpath[MAX_PATH];	int code;	void reset_chain();	strcpy(tbuf, pathname);					/* if paths are same, do nothing */	if (!strcmp(tbuf, lastpath) && last_drive == drive)		return(0);					/* start at root */	reset_chain(OLD);	strcpy(lastpath, tbuf);	last_drive = drive;					/* separate the parts */	tmp = &tbuf[1];	for (s = tmp; *s; ++s) {		if (*s == '/') {			path = tmp;			*s = '\0';			if (descend(path))				return(1);			tmp = s + 1;		}	}	code = descend(tmp);	return(code);}/* * Find the directory and load a new dir_chain[].  A null directory * is ok.  Returns a 1 on error. */static intdescend(path)char *path;{	int entry;	unsigned int start;	char *newname, *unix_name();	struct directory *dir, *dir_read();	void reset_chain();					/* nothing required */	if (*path == '\0')		return(0);	for (entry = 0; entry < dir_entries; entry++) {		dir = dir_read(entry);					/* if empty */		if (dir->name[0] == 0x0)			break;					/* if erased */		if (dir->name[0] == 0xe5)			continue;					/* skip if not a directory */		if (!(dir->attr & 0x10))			continue;		newname = unix_name(dir->name, dir->ext);		/*		 * Be careful not to match '.' and '..' with wildcards		 */		if (*newname == '.' && *path != '.')			continue;		if (match(newname, path)) {			start = dir->start[1] * 0x100 + dir->start[0];					/* if '..' points to root */			if (!start && !strcmp(path, "..")) {				reset_chain(OLD);				return(0);			}					/* fill in the directory chain */			if (fill_chain(start))				return(1);			return(0);		}	}	/*	 * If path is '.' or '..', but they weren't found, then you must be	 * at root.	 */	if (!strcmp(path, ".") || !strcmp(path, "..")) {		reset_chain(OLD);		return(0);	}	fprintf(stderr, "Path component \"%s\" is not a directory\n", path);	return(1);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -