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; }
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; } }