]> git.ipfire.org Git - people/teissler/ipfire-2.x.git/blob - src/patches/SuSE10.2/stage2-dir-callback.diff
Hinzugefuegt:
[people/teissler/ipfire-2.x.git] / src / patches / SuSE10.2 / stage2-dir-callback.diff
1 Index: grub-0.95/stage2/fsys_jfs.c
2 ===================================================================
3 --- grub-0.95.orig/stage2/fsys_jfs.c
4 +++ grub-0.95/stage2/fsys_jfs.c
5 @@ -270,7 +270,7 @@ jfs_read (char *buf, int len)
6 }
7
8 int
9 -jfs_dir (char *dirname)
10 +jfs_dir (char *dirname, void (*handle)(char *))
11 {
12 char *ptr, *rest, ch;
13 ldtentry_t *de;
14 @@ -357,12 +357,9 @@ jfs_dir (char *dirname)
15
16 cmp = (!*dirname) ? -1 : substring (dirname, namebuf);
17 #ifndef STAGE1_5
18 - if (print_possibilities && ch != '/'
19 - && cmp <= 0) {
20 - if (print_possibilities > 0)
21 - print_possibilities = -print_possibilities;
22 - print_a_completion (namebuf);
23 - } else
24 + if (handle && ch != '/' && cmp <= 0)
25 + handle (namebuf);
26 + else
27 #endif
28 if (cmp == 0) {
29 parent_inum = inum;
30 @@ -372,9 +369,6 @@ jfs_dir (char *dirname)
31 }
32 de = next_dentry ();
33 if (de == NULL) {
34 - if (print_possibilities < 0)
35 - return 1;
36 -
37 errnum = ERR_FILE_NOT_FOUND;
38 *rest = ch;
39 return 0;
40 Index: grub-0.95/stage2/fsys_minix.c
41 ===================================================================
42 --- grub-0.95.orig/stage2/fsys_minix.c
43 +++ grub-0.95/stage2/fsys_minix.c
44 @@ -294,7 +294,7 @@ minix_read (char *buf, int len)
45 inode of the file we were trying to look up
46 side effects: none yet */
47 int
48 -minix_dir (char *dirname)
49 +minix_dir (char *dirname, void (*handle)(char *))
50 {
51 int current_ino = MINIX_ROOT_INO; /* start at the root */
52 int updir_ino = current_ino; /* the parent of the current directory */
53 @@ -457,18 +457,9 @@ minix_dir (char *dirname)
54 give up */
55 if (loc >= INODE->i_size)
56 {
57 - if (print_possibilities < 0)
58 - {
59 -#if 0
60 - putchar ('\n');
61 -#endif
62 - }
63 - else
64 - {
65 - errnum = ERR_FILE_NOT_FOUND;
66 - *rest = ch;
67 - }
68 - return (print_possibilities < 0);
69 + errnum = ERR_FILE_NOT_FOUND;
70 + *rest = ch;
71 + return 0;
72 }
73
74 /* else, find the (logical) block component of our location */
75 @@ -510,20 +501,15 @@ minix_dir (char *dirname)
76 str_chk = substring (dirname, dp->name);
77
78 # ifndef STAGE1_5
79 - if (print_possibilities && ch != '/'
80 - && (!*dirname || str_chk <= 0))
81 - {
82 - if (print_possibilities > 0)
83 - print_possibilities = -print_possibilities;
84 - print_a_completion (dp->name);
85 - }
86 + if (handle && ch != '/' && (!*dirname || str_chk <= 0))
87 + handle (dp->name);
88 # endif
89
90 dp->name[namelen] = saved_c;
91 }
92
93 }
94 - while (!dp->inode || (str_chk || (print_possibilities && ch != '/')));
95 + while (!dp->inode || (str_chk || (handle && ch != '/')));
96
97 current_ino = dp->inode;
98 *(dirname = rest) = ch;
99 Index: grub-0.95/stage2/fsys_reiserfs.c
100 ===================================================================
101 --- grub-0.95.orig/stage2/fsys_reiserfs.c
102 +++ grub-0.95/stage2/fsys_reiserfs.c
103 @@ -991,7 +991,7 @@ reiserfs_read (char *buf, int len)
104 * the size of the file.
105 */
106 int
107 -reiserfs_dir (char *dirname)
108 +reiserfs_dir (char *dirname, void (*handle)(char *))
109 {
110 struct reiserfs_de_head *de_head;
111 char *rest, ch;
112 @@ -1123,7 +1123,7 @@ reiserfs_dir (char *dirname)
113 *rest = 0;
114
115 # ifndef STAGE1_5
116 - if (print_possibilities && ch != '/')
117 + if (handle && ch != '/')
118 do_possibilities = 1;
119 # endif /* ! STAGE1_5 */
120
121 @@ -1170,10 +1170,8 @@ reiserfs_dir (char *dirname)
122 {
123 if (cmp <= 0)
124 {
125 - if (print_possibilities > 0)
126 - print_possibilities = -print_possibilities;
127 *name_end = 0;
128 - print_a_completion (filename);
129 + handle (filename);
130 *name_end = tmp;
131 }
132 }
133 @@ -1189,12 +1187,6 @@ reiserfs_dir (char *dirname)
134 num_entries--;
135 }
136 }
137 -
138 -# ifndef STAGE1_5
139 - if (print_possibilities < 0)
140 - return 1;
141 -# endif /* ! STAGE1_5 */
142 -
143 errnum = ERR_FILE_NOT_FOUND;
144 *rest = ch;
145 return 0;
146 Index: grub-0.95/stage2/fsys_iso9660.c
147 ===================================================================
148 --- grub-0.95.orig/stage2/fsys_iso9660.c
149 +++ grub-0.95/stage2/fsys_iso9660.c
150 @@ -133,7 +133,7 @@ iso9660_mount (void)
151 }
152
153 int
154 -iso9660_dir (char *dirname)
155 +iso9660_dir (char *dirname, void (*handle)(char *))
156 {
157 struct iso_directory_record *idr;
158 RR_ptr_t rr_ptr;
159 @@ -346,7 +346,7 @@ iso9660_dir (char *dirname)
160 if (name_len >= pathlen
161 && !memcmp(name, dirname, pathlen))
162 {
163 - if (dirname[pathlen] == '/' || !print_possibilities)
164 + if (dirname[pathlen] == '/' || !handle)
165 {
166 /*
167 * DIRNAME is directory component of pathname,
168 @@ -377,11 +377,9 @@ iso9660_dir (char *dirname)
169 else /* Completion */
170 {
171 #ifndef STAGE1_5
172 - if (print_possibilities > 0)
173 - print_possibilities = -print_possibilities;
174 memcpy(NAME_BUF, name, name_len);
175 NAME_BUF[name_len] = '\0';
176 - print_a_completion (NAME_BUF);
177 + handle (NAME_BUF);
178 #endif
179 }
180 }
181 @@ -390,7 +388,7 @@ iso9660_dir (char *dirname)
182 size -= ISO_SECTOR_SIZE;
183 } /* size>0 */
184
185 - if (dirname[pathlen] == '/' || print_possibilities >= 0)
186 + if (dirname[pathlen] == '/' || handle)
187 {
188 errnum = ERR_FILE_NOT_FOUND;
189 return 0;
190 Index: grub-0.95/stage2/fsys_fat.c
191 ===================================================================
192 --- grub-0.95.orig/stage2/fsys_fat.c
193 +++ grub-0.95/stage2/fsys_fat.c
194 @@ -286,7 +286,7 @@ fat_read (char *buf, int len)
195 }
196
197 int
198 -fat_dir (char *dirname)
199 +fat_dir (char *dirname, void (*handle)(char *))
200 {
201 char *rest, ch, dir_buf[FAT_DIRENTRY_LENGTH];
202 char *filename = (char *) NAME_BUF;
203 @@ -342,7 +342,7 @@ fat_dir (char *dirname)
204 *rest = 0;
205
206 # ifndef STAGE1_5
207 - if (print_possibilities && ch != '/')
208 + if (handle && ch != '/')
209 do_possibilities = 1;
210 # endif
211
212 @@ -353,16 +353,6 @@ fat_dir (char *dirname)
213 {
214 if (!errnum)
215 {
216 -# ifndef STAGE1_5
217 - if (print_possibilities < 0)
218 - {
219 -#if 0
220 - putchar ('\n');
221 -#endif
222 - return 1;
223 - }
224 -# endif /* STAGE1_5 */
225 -
226 errnum = ERR_FILE_NOT_FOUND;
227 *rest = ch;
228 }
229 @@ -457,11 +447,7 @@ fat_dir (char *dirname)
230 {
231 print_filename:
232 if (substring (dirname, filename) <= 0)
233 - {
234 - if (print_possibilities > 0)
235 - print_possibilities = -print_possibilities;
236 - print_a_completion (filename);
237 - }
238 + handle (filename);
239 continue;
240 }
241 # endif /* STAGE1_5 */
242 Index: grub-0.95/stage2/filesys.h
243 ===================================================================
244 --- grub-0.95.orig/stage2/filesys.h
245 +++ grub-0.95/stage2/filesys.h
246 @@ -24,7 +24,7 @@
247 #define FSYS_FFS_NUM 1
248 int ffs_mount (void);
249 int ffs_read (char *buf, int len);
250 -int ffs_dir (char *dirname);
251 +int ffs_dir (char *dirname, void (*handle)(char *));
252 int ffs_embed (int *start_sector, int needed_sectors);
253 #else
254 #define FSYS_FFS_NUM 0
255 @@ -34,7 +34,7 @@ int ffs_embed (int *start_sector, int ne
256 #define FSYS_UFS2_NUM 1
257 int ufs2_mount (void);
258 int ufs2_read (char *buf, int len);
259 -int ufs2_dir (char *dirname);
260 +int ufs2_dir (char *dirname, void (*handle)(char *));
261 int ufs2_embed (int *start_sector, int needed_sectors);
262 #else
263 #define FSYS_UFS2_NUM 0
264 @@ -44,7 +44,7 @@ int ufs2_embed (int *start_sector, int n
265 #define FSYS_FAT_NUM 1
266 int fat_mount (void);
267 int fat_read (char *buf, int len);
268 -int fat_dir (char *dirname);
269 +int fat_dir (char *dirname, void (*handle)(char *));
270 #else
271 #define FSYS_FAT_NUM 0
272 #endif
273 @@ -53,7 +53,7 @@ int fat_dir (char *dirname);
274 #define FSYS_EXT2FS_NUM 1
275 int ext2fs_mount (void);
276 int ext2fs_read (char *buf, int len);
277 -int ext2fs_dir (char *dirname);
278 +int ext2fs_dir (char *dirname, void (*handle)(char *));
279 #else
280 #define FSYS_EXT2FS_NUM 0
281 #endif
282 @@ -62,7 +62,7 @@ int ext2fs_dir (char *dirname);
283 #define FSYS_MINIX_NUM 1
284 int minix_mount (void);
285 int minix_read (char *buf, int len);
286 -int minix_dir (char *dirname);
287 +int minix_dir (char *dirname, void (*handle)(char *));
288 #else
289 #define FSYS_MINIX_NUM 0
290 #endif
291 @@ -71,7 +71,7 @@ int minix_dir (char *dirname);
292 #define FSYS_REISERFS_NUM 1
293 int reiserfs_mount (void);
294 int reiserfs_read (char *buf, int len);
295 -int reiserfs_dir (char *dirname);
296 +int reiserfs_dir (char *dirname, void (*handle)(char *));
297 int reiserfs_embed (int *start_sector, int needed_sectors);
298 #else
299 #define FSYS_REISERFS_NUM 0
300 @@ -81,7 +81,7 @@ int reiserfs_embed (int *start_sector, i
301 #define FSYS_VSTAFS_NUM 1
302 int vstafs_mount (void);
303 int vstafs_read (char *buf, int len);
304 -int vstafs_dir (char *dirname);
305 +int vstafs_dir (char *dirname, void (*handle)(char *));
306 #else
307 #define FSYS_VSTAFS_NUM 0
308 #endif
309 @@ -90,7 +90,7 @@ int vstafs_dir (char *dirname);
310 #define FSYS_JFS_NUM 1
311 int jfs_mount (void);
312 int jfs_read (char *buf, int len);
313 -int jfs_dir (char *dirname);
314 +int jfs_dir (char *dirname, void (*handle)(char *));
315 int jfs_embed (int *start_sector, int needed_sectors);
316 #else
317 #define FSYS_JFS_NUM 0
318 @@ -100,7 +100,7 @@ int jfs_embed (int *start_sector, int ne
319 #define FSYS_XFS_NUM 1
320 int xfs_mount (void);
321 int xfs_read (char *buf, int len);
322 -int xfs_dir (char *dirname);
323 +int xfs_dir (char *dirname, void (*handle)(char *));
324 #else
325 #define FSYS_XFS_NUM 0
326 #endif
327 @@ -109,7 +109,7 @@ int xfs_dir (char *dirname);
328 #define FSYS_TFTP_NUM 1
329 int tftp_mount (void);
330 int tftp_read (char *buf, int len);
331 -int tftp_dir (char *dirname);
332 +int tftp_dir (char *dirname, void (*handle)(char *));
333 void tftp_close (void);
334 #else
335 #define FSYS_TFTP_NUM 0
336 @@ -119,7 +119,7 @@ void tftp_close (void);
337 #define FSYS_ISO9660_NUM 1
338 int iso9660_mount (void);
339 int iso9660_read (char *buf, int len);
340 -int iso9660_dir (char *dirname);
341 +int iso9660_dir (char *dirname, void (*handle)(char *));
342 #else
343 #define FSYS_ISO9660_NUM 0
344 #endif
345 @@ -150,16 +150,10 @@ struct fsys_entry
346 char *name;
347 int (*mount_func) (void);
348 int (*read_func) (char *buf, int len);
349 - int (*dir_func) (char *dirname);
350 + int (*dir_func) (char *dirname, void (*print_one)(char *));
351 void (*close_func) (void);
352 int (*embed_func) (int *start_sector, int needed_sectors);
353 };
354
355 -#ifdef STAGE1_5
356 -# define print_possibilities 0
357 -#else
358 -extern int print_possibilities;
359 -#endif
360 -
361 extern int fsmax;
362 extern struct fsys_entry fsys_table[NUM_FSYS + 1];
363 Index: grub-0.95/stage2/fsys_ext2fs.c
364 ===================================================================
365 --- grub-0.95.orig/stage2/fsys_ext2fs.c
366 +++ grub-0.95/stage2/fsys_ext2fs.c
367 @@ -491,7 +491,7 @@ int ext2_is_fast_symlink (void)
368 * side effects: messes up GROUP_DESC buffer area
369 */
370 int
371 -ext2fs_dir (char *dirname)
372 +ext2fs_dir (char *dirname, void (*handle)(char *))
373 {
374 int current_ino = EXT2_ROOT_INO; /* start at the root */
375 int updir_ino = current_ino; /* the parent of the current directory */
376 @@ -517,7 +517,6 @@ ext2fs_dir (char *dirname)
377 #ifdef E2DEBUG
378 unsigned char *i;
379 #endif /* E2DEBUG */
380 -
381 /* loop invariants:
382 current_ino = inode to lookup
383 dirname = pointer to filename component we are cur looking up within
384 @@ -709,18 +708,9 @@ ext2fs_dir (char *dirname)
385 give up */
386 if (loc >= INODE->i_size)
387 {
388 - if (print_possibilities < 0)
389 - {
390 -# if 0
391 - putchar ('\n');
392 -# endif
393 - }
394 - else
395 - {
396 - errnum = ERR_FILE_NOT_FOUND;
397 - *rest = ch;
398 - }
399 - return (print_possibilities < 0);
400 + errnum = ERR_FILE_NOT_FOUND;
401 + *rest = ch;
402 + return 0;
403 }
404
405 /* else, find the (logical) block component of our location */
406 @@ -761,20 +751,15 @@ ext2fs_dir (char *dirname)
407 str_chk = substring (dirname, dp->name);
408
409 # ifndef STAGE1_5
410 - if (print_possibilities && ch != '/'
411 - && (!*dirname || str_chk <= 0))
412 - {
413 - if (print_possibilities > 0)
414 - print_possibilities = -print_possibilities;
415 - print_a_completion (dp->name);
416 - }
417 + if (handle && ch != '/' && (!*dirname || str_chk <= 0))
418 + handle (dp->name);
419 # endif
420
421 dp->name[dp->name_len] = saved_c;
422 }
423
424 }
425 - while (!dp->inode || (str_chk || (print_possibilities && ch != '/')));
426 + while (!dp->inode || (str_chk || (handle && ch != '/')));
427
428 current_ino = dp->inode;
429 *(dirname = rest) = ch;
430 Index: grub-0.95/stage2/fsys_ffs.c
431 ===================================================================
432 --- grub-0.95.orig/stage2/fsys_ffs.c
433 +++ grub-0.95/stage2/fsys_ffs.c
434 @@ -180,7 +180,7 @@ ffs_read (char *buf, int len)
435
436
437 int
438 -ffs_dir (char *dirname)
439 +ffs_dir (char *dirname, void (*handle)(char *))
440 {
441 char *rest, ch;
442 int block, off, loc, map, ino = ROOTINO;
443 @@ -236,13 +236,6 @@ loop:
444 {
445 if (loc >= INODE->i_size)
446 {
447 -#if 0
448 - putchar ('\n');
449 -#endif
450 -
451 - if (print_possibilities < 0)
452 - return 1;
453 -
454 errnum = ERR_FILE_NOT_FOUND;
455 *rest = ch;
456 return 0;
457 @@ -267,18 +260,13 @@ loop:
458 loc += dp->d_reclen;
459
460 #ifndef STAGE1_5
461 - if (dp->d_ino && print_possibilities && ch != '/'
462 + if (dp->d_ino && handle && ch != '/'
463 && (!*dirname || substring (dirname, dp->d_name) <= 0))
464 - {
465 - if (print_possibilities > 0)
466 - print_possibilities = -print_possibilities;
467 -
468 - print_a_completion (dp->d_name);
469 - }
470 + handle (dp->d_name);
471 #endif /* STAGE1_5 */
472 }
473 while (!dp->d_ino || (substring (dirname, dp->d_name) != 0
474 - || (print_possibilities && ch != '/')));
475 + || (handle && ch != '/')));
476
477 /* only get here if we have a matching directory entry */
478
479 Index: grub-0.95/stage2/fsys_vstafs.c
480 ===================================================================
481 --- grub-0.95.orig/stage2/fsys_vstafs.c
482 +++ grub-0.95/stage2/fsys_vstafs.c
483 @@ -115,7 +115,7 @@ vstafs_nextdir (void)
484 }
485
486 int
487 -vstafs_dir (char *dirname)
488 +vstafs_dir (char *dirname, void (*handle)(char *))
489 {
490 char *fn, ch;
491 struct dir_entry *d;
492 @@ -146,14 +146,9 @@ vstafs_dir (char *dirname)
493 continue;
494
495 #ifndef STAGE1_5
496 - if (print_possibilities && ch != '/'
497 + if (handle && ch != '/'
498 && (! *dirname || strcmp (dirname, d->name) <= 0))
499 - {
500 - if (print_possibilities > 0)
501 - print_possibilities = -print_possibilities;
502 -
503 - printf (" %s", d->name);
504 - }
505 + handle(d->name);
506 #endif
507 if (! grub_strcmp (dirname, d->name))
508 {
509 @@ -168,12 +163,6 @@ vstafs_dir (char *dirname)
510 *(dirname = fn) = ch;
511 if (! d)
512 {
513 - if (print_possibilities < 0)
514 - {
515 - putchar ('\n');
516 - return 1;
517 - }
518 -
519 errnum = ERR_FILE_NOT_FOUND;
520 return 0;
521 }
522 Index: grub-0.95/stage2/fsys_ufs2.c
523 ===================================================================
524 --- grub-0.95.orig/stage2/fsys_ufs2.c
525 +++ grub-0.95/stage2/fsys_ufs2.c
526 @@ -204,7 +204,7 @@ ufs2_read (char *buf, int len)
527 }
528
529 int
530 -ufs2_dir (char *dirname)
531 +ufs2_dir (char *dirname, void (*handle)(char *))
532 {
533 char *rest, ch;
534 int block, off, loc, ino = ROOTINO;
535 @@ -261,9 +261,6 @@ loop:
536 {
537 if (loc >= INODE_UFS2->di_size)
538 {
539 - if (print_possibilities < 0)
540 - return 1;
541 -
542 errnum = ERR_FILE_NOT_FOUND;
543 *rest = ch;
544 return 0;
545 @@ -288,18 +285,13 @@ loop:
546 loc += dp->d_reclen;
547
548 #ifndef STAGE1_5
549 - if (dp->d_ino && print_possibilities && ch != '/'
550 + if (dp->d_ino && handle && ch != '/'
551 && (!*dirname || substring (dirname, dp->d_name) <= 0))
552 - {
553 - if (print_possibilities > 0)
554 - print_possibilities = -print_possibilities;
555 -
556 - print_a_completion (dp->d_name);
557 - }
558 + handle (dp->d_name);
559 #endif /* STAGE1_5 */
560 }
561 while (!dp->d_ino || (substring (dirname, dp->d_name) != 0
562 - || (print_possibilities && ch != '/')));
563 + || (handle && ch != '/')));
564
565 /* only get here if we have a matching directory entry */
566
567 Index: grub-0.95/stage2/disk_io.c
568 ===================================================================
569 --- grub-0.95.orig/stage2/disk_io.c
570 +++ grub-0.95/stage2/disk_io.c
571 @@ -36,7 +36,6 @@ void (*disk_read_hook) (int, int, int) =
572 void (*disk_read_func) (int, int, int) = NULL;
573
574 #ifndef STAGE1_5
575 -int print_possibilities;
576
577 static int do_completion;
578 static int unique;
579 @@ -1479,7 +1478,7 @@ print_completions (int is_filename, int
580 if (! is_completion)
581 grub_printf (" Possible files are:");
582
583 - dir (buf);
584 + dir (buf, print_a_completion);
585
586 if (is_completion && *unique_string)
587 {
588 @@ -1498,7 +1497,7 @@ print_completions (int is_filename, int
589 *ptr = '/';
590 *(ptr + 1) = 0;
591
592 - dir (buf);
593 + dir (buf, print_a_completion);
594
595 /* Restore the original unique value. */
596 unique = 1;
597 @@ -1626,12 +1625,7 @@ grub_open (char *filename)
598 if (!errnum && fsys_type == NUM_FSYS)
599 errnum = ERR_FSYS_MOUNT;
600
601 -# ifndef STAGE1_5
602 - /* set "dir" function to open a file */
603 - print_possibilities = 0;
604 -# endif
605 -
606 - if (!errnum && (*(fsys_table[fsys_type].dir_func)) (filename))
607 + if (!errnum && (*(fsys_table[fsys_type].dir_func)) (filename, NULL))
608 {
609 #ifndef NO_DECOMPRESSION
610 return gunzip_test_header ();
611 @@ -1752,7 +1746,7 @@ grub_seek (int offset)
612 }
613
614 int
615 -dir (char *dirname)
616 +dir (char *dirname, void (*handle)(char *))
617 {
618 #ifndef NO_DECOMPRESSION
619 compressed_file = 0;
620 @@ -1761,19 +1755,18 @@ dir (char *dirname)
621 if (!(dirname = setup_part (dirname)))
622 return 0;
623
624 + errnum = 0;
625 if (*dirname != '/')
626 errnum = ERR_BAD_FILENAME;
627 -
628 - if (fsys_type == NUM_FSYS)
629 + else if (fsys_type == NUM_FSYS)
630 errnum = ERR_FSYS_MOUNT;
631 -
632 - if (errnum)
633 - return 0;
634 -
635 - /* set "dir" function to list completions */
636 - print_possibilities = 1;
637 -
638 - return (*(fsys_table[fsys_type].dir_func)) (dirname);
639 + else
640 + {
641 + fsys_table[fsys_type].dir_func (dirname, handle);
642 + if (errnum == ERR_FILE_NOT_FOUND)
643 + errnum = 0;
644 + }
645 + return errnum == 0;
646 }
647 #endif /* STAGE1_5 */
648
649 Index: grub-0.95/stage2/fsys_xfs.c
650 ===================================================================
651 --- grub-0.95.orig/stage2/fsys_xfs.c
652 +++ grub-0.95/stage2/fsys_xfs.c
653 @@ -534,7 +534,7 @@ xfs_read (char *buf, int len)
654 }
655
656 int
657 -xfs_dir (char *dirname)
658 +xfs_dir (char *dirname, void (*handle)(char *))
659 {
660 xfs_ino_t ino, parent_ino, new_ino;
661 xfs_fsize_t di_size;
662 @@ -595,11 +595,9 @@ xfs_dir (char *dirname)
663 for (;;) {
664 cmp = (!*dirname) ? -1 : substring (dirname, name);
665 #ifndef STAGE1_5
666 - if (print_possibilities && ch != '/' && cmp <= 0) {
667 - if (print_possibilities > 0)
668 - print_possibilities = -print_possibilities;
669 - print_a_completion (name);
670 - } else
671 + if (handle && ch != '/' && cmp <= 0)
672 + handle (name);
673 + else
674 #endif
675 if (cmp == 0) {
676 parent_ino = ino;
677 @@ -610,9 +608,6 @@ xfs_dir (char *dirname)
678 }
679 name = next_dentry (&new_ino);
680 if (name == NULL) {
681 - if (print_possibilities < 0)
682 - return 1;
683 -
684 errnum = ERR_FILE_NOT_FOUND;
685 *rest = ch;
686 return 0;
687 Index: grub-0.95/netboot/fsys_tftp.c
688 ===================================================================
689 --- grub-0.95.orig/netboot/fsys_tftp.c
690 +++ grub-0.95/netboot/fsys_tftp.c
691 @@ -409,7 +409,7 @@ tftp_read (char *addr, int size)
692 /* Check if the file DIRNAME really exists. Get the size and save it in
693 FILEMAX. */
694 int
695 -tftp_dir (char *dirname)
696 +tftp_dir (char *dirname, void (*handle)(char *))
697 {
698 int ch;
699
700 @@ -418,7 +418,7 @@ tftp_dir (char *dirname)
701 #endif
702
703 /* In TFTP, there is no way to know what files exist. */
704 - if (print_possibilities)
705 + if (handle)
706 return 1;
707
708 /* Don't know the size yet. */