Ejemplo n.º 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;
}
Ejemplo n.º 2
0
XDIR *x_opendir(const char *path, int *error)
{
#if _MINT_
	if (mint)			/* HR 151102 */
	{
		XDIR *dir;

		if ((dir = malloc(sizeof(XDIR))) == NULL)
			*error = ENSMEM;
		else
		{
			dir->path = (char *) path;
			dir->type = x_inq_xfs(path, nil) ? 0 : 1;	/* HR 151102 */

			if (dir->type)
			{
				/*
				 * Dos file system.
				 */

				dir->data.gdata.first = 1;
#if USE_gemdos
				dir->data.gdata.old_dta = (DTA *) gemdos(47);
				gemdos(26, &dir->data.gdata.dta);
#else
				dir->data.gdata.old_dta = Fgetdta();
				Fsetdta(&dir->data.gdata.dta);
#endif
				*error = 0;
			}
			else
			{
				/*
				 * File system with long filenames.
				 */
	
#if USE_gemdos
				if (((dir->data.handle = gemdos(0x128, path, 0)) & 0xFF000000L) == 0xFF000000L)
#else
				if (((dir->data.handle = Dopendir(path, 0)) & 0xFF000000L) == 0xFF000000L)
#endif
				{
					*error = xerror((int) dir->data.handle);
					free(dir);
					dir = NULL;
				}
			}
		}
		return dir;	
	}
	else
#endif
	{
		XDIR *dir;
	
		if ((dir = malloc(sizeof(XDIR))) == NULL)
			*error = ENSMEM;
		else
		{
			dir->path = (char *) path;
			dir->data.gdata.first = 1;
#if USE_gemdos
			dir->data.gdata.old_dta = (DTA *) gemdos(47);
			gemdos(26, &dir->data.gdata.dta);
#else
			dir->data.gdata.old_dta = Fgetdta();
			Fsetdta(&dir->data.gdata.dta);
#endif
			*error = 0;
		}
		return dir;
	}
}