int vstafs_dir (char *dirname) { char *fn, ch; struct dir_entry *d; f_sector = ROOT_SECTOR; do { if (! (d = vstafs_readdir (f_sector))) { return 0; } while (*dirname == '/') dirname++; fn = dirname; while ((ch = *fn) && ch != '/' && ! isspace (ch)) fn++; *fn = 0; do { if (d->name[0] == 0 || d->name[0] & 0x80) continue; #ifndef STAGE1_5 if (print_possibilities && ch != '/' && (! *dirname || strcmp (dirname, d->name) <= 0)) { if (print_possibilities > 0) print_possibilities = -print_possibilities; printf (" %s", d->name); } #endif if (! grub_strcmp (dirname, d->name)) { f_sector = d->start; get_file_info (f_sector); filemax = FILE_INFO->len; break; } } while ((d =vstafs_nextdir ())); *(dirname = fn) = ch; if (! d) { if (print_possibilities < 0) { putchar ('\n'); return 1; } errnum = ERR_FILE_NOT_FOUND; return 0; } } while (*dirname && ! isspace (ch)); return 1; }
int vstafs_dir (char *dirname) { char *fn, ch; struct dir_entry *d; /* int l, i, s; */ /* * Read in the entries of the current directory. */ f_sector = ROOT_SECTOR; do { if (! (d = vstafs_readdir (f_sector))) { return 0; } /* * Find the file in the path */ while (*dirname == '/') dirname++; fn = dirname; while ((ch = *fn) && ch != '/' && ! (*pgrub_isspace) (ch)) fn++; *fn = 0; do { if (d->name[0] == 0 || d->name[0] & 0x80) continue; #ifndef STAGE1_5 if (*pprint_possibilities && ch != '/' && (! *dirname || (*pgrub_strcmp) (dirname, d->name) <= 0)) { if (*pprint_possibilities > 0) *pprint_possibilities = - *pprint_possibilities; (*pprintf) (" %s", d->name); } #endif if (! (*pgrub_strcmp) (dirname, d->name)) { f_sector = d->start; get_file_info (f_sector); *pfilemax = FILE_INFO->len; break; } } while ((d =vstafs_nextdir ())); *(dirname = fn) = ch; if (! d) { //if (*pprint_possibilities < 0) // { // putchar ('\n'); // return 1; // } *perrnum = ERR_FILE_NOT_FOUND; return 0; } } while (*dirname && ! (*pgrub_isspace) (ch)); return 1; }
int vstafs_dir (char *dirname) { char *fn, ch; struct dir_entry *d; /* int l, i, s; */ /* * Read in the entries of the current directory. */ f_sector = ROOT_SECTOR; do { if (! (d = vstafs_readdir (f_sector))) { return 0; } /* * Find the file in the path */ while (*dirname == '/') dirname++; //fn = dirname; //while ((ch = *fn) && ch != '/' && ! isspace (ch)) fn++; for (fn = dirname; (ch = *fn) && ch != '/' && !isspace (ch); fn++) { if (ch == '\\') { fn++; if (! (ch = *fn)) break; } } *fn = 0; do { int j, k; char ch1; #ifdef GRUB_UTIL char tmp_name[512]; #else char *tmp_name = NAME_BUF; /* MAXNAMLEN is 255, so 512 byte buffer is needed. */ #endif if (d->name[0] == 0/* || d->name[0] & 0x80*/) continue; /* copy d->name to tmp_name, and quote the spaces with a '\\' */ for (j = 0, k = 0; j < 28/*d->namlen*/; j++) { if (! (ch1 = d->name[j])) break; if (ch1 == ' ') tmp_name[k++] = '\\'; tmp_name[k++] = ch1; } tmp_name[k] = 0; #ifndef STAGE1_5 if (print_possibilities && ch != '/' && (! *dirname || strcmp (dirname, tmp_name) <= 0)) { if (print_possibilities > 0) print_possibilities = -print_possibilities; //printf (" %s", d->name); print_a_completion (tmp_name); } #endif if (! grub_strcmp (dirname, tmp_name)) { f_sector = d->start; get_file_info (f_sector); filemax = FILE_INFO->len; break; } } while ((d =vstafs_nextdir ())); *(dirname = fn) = ch; if (! d) { if (print_possibilities < 0) { putchar ('\n'); return 1; } errnum = ERR_FILE_NOT_FOUND; return 0; } } while (*dirname && ! isspace (ch)); return 1; }