示例#1
0
static int
find_ino (char *dir, struct stat *sb, char *name)
{
	char _name[PATH_MAX];
	char *where = _name;
	long drv;
	struct stat testsb;
	struct dbuf {
		long ino;
		char name[NAME_MAX + 1];
	} dbuf;

	drv = Dopendir (dir, 0);
	if ((drv & 0xff000000L) == 0xff000000L) return 0;

	while (*dir)
		*where++ = *dir++;

	while (Dreaddir (sizeof (dbuf), drv, &dbuf) == 0) {
		strcpy (where, dbuf.name);
		if (__sys_stat (_name, &testsb, 0, 0))
			continue;
		if (testsb.st_dev == sb->st_dev &&
		    testsb.st_ino == sb->st_ino) {
			Dclosedir (drv);
			_dos2unx (_name, name, L_ctermid);
			return 1;
		}
	}
	Dclosedir (drv);
	return 0;
}
示例#2
0
long x_closedir(XDIR *dir)
{
#if _MINT_
	if (mint)			/* HR 151102 */
	{
		if (dir->type)
		{
			/*
			 * DOS file system.
			 */
	
#if USE_gemdos
			gemdos(26, dir->data.gdata.old_dta);
#else
			Fsetdta(dir->data.gdata.old_dta);
#endif
			free(dir);
			return 0L;
		}
		else
		{
			/*
			 * File system with long filenames.
			 */
	
			long error;
	
#if USE_gemdos
			error = xerror(gemdos(0x12B, dir->data.handle));
#else
			error = xerror(Dclosedir(dir->data.handle));
#endif
			free(dir);
			return error;
		}
	}
	else
#endif
	{
#if USE_gemdos
		gemdos(26, dir->data.gdata.old_dta);
#else
		Fsetdta(dir->data.gdata.old_dta);
#endif
		free(dir);
		return 0L;
	}
}