linux-l: defrag.c
Ralf Baerwaldt
rade at rade2.bancos.com
Fr Mai 22 11:16:51 CEST 1998
>
> > Ich will zum ersten Mal unter Linux ein Programm
> > uebersetzen und habe auch wenig Erfahrung mit C.
> > Nun komme ich an einer Fehlermeldung nicht weiter:
> > --------------------------
> > /tmp/defrag/defrag-0.6 > make
> > gcc -Wall -O2 -fomit-frame-pointer -DEXT2FS -c -o defrag.ext2.o defrag.c
> > defrag.c: In function `walk_inode':
> > defrag.c:396: warning: passing arg 1 of `walk_zone' from incompatible pointer type
> > defrag.c:397: warning: passing arg 1 of `walk_zone_ind' from incompatible pointer type
> > defrag.c:398: warning: passing arg 1 of `walk_zone_dind' from incompatible pointer type
> > defrag.c:400: warning: passing arg 1 of `walk_zone_tind' from incompatible pointer type
>
> Die Warnings machen keine Probleme, es sind ja nur Warnings.
> Überprüfe aber dennoch mal Deine Pointer; Du übergibst wohl Argumente,
> deren Pointer-Typ nicht dem der aufgerufenen Funktion entsprechen.
es sind nicht "meine" Pointer. <defrag> ist ein Programm, das ich
auf meiner Unix-Distribution gefunden habe, aber leider nur als
c-Sourcen und nicht als lauffaehige Version.
> Mich wundert übrigens, daß Du sagst, daß Du keine große Ahnung von C hast,
> ackerst aber gleich zu Anfang schon auf Inodes rum :-)
> Filesystem-Spezie?
Nee, nur notgedrungen. Bei mir stuerzte ein "man <irgendwas>" immer
mit "Segmentation fault" ab. Ich habe dann die man-pages mit
tar gesichert und nach "man.segmentation_fault" gemoved. Danach
aus tar ein neues man-Verzeichnis kreiert. Und siehe da,
"man <irgendwas>" ging wieder !
Auf der Suche nach einem Disctester, der im lebenden System
nur begrenzte Blocks checkt habe ich dann defrag gefunden.
Mich wuerde mal interessieren, in wie weit die Platte inzwischen
defragmentiert ist.
> > defrag.c: In function `read_fixed_zones':
> > defrag.c:422: `EXT2_FIRST_INO' undeclared (first use this function)
> [...]
>
> Dein EXT2_FIRST_INO ist unbekannt. Du solltest dafür sorgen,
> daß Du vorher definierst, was Du hinterher nutzt. :-)
>
> [...]
> > #define EXT2_FIRST_INO(s) ((s)->u.ext2_sb.s_first_ino)
> [...]
>
> Dies ist ein Makro. Es erwartet Argumente.
>
> Vielleicht ist das das Problem?
Wahrscheinlich hast du recht, aber welche ??
> Tschüß,
> Oliver
>
>
>
>
> From: Mathias Born <mborn at faphida.in-berlin.de>
> >
> > defrag.c: In function `read_fixed_zones':
> > defrag.c:422: `EXT2_FIRST_INO' undeclared (first use this function)
> > defrag.c:422: (Each undeclared identifier is reported only once
> > defrag.c:422: for each function it appears in.)
>
> Hi!
> Du hast uns ja jede Menge Infos gegeben, aber um die
> eigentlich wichtige Stelle, defrag.c:422, hast Du Dich
> erfolgreich gedrückt! Wie sieht denn die aus?
Hallo Mathias,
hier kommt, was du brauchst:
415 #ifdef EXT2FS
416 {
417 /* Reserved blocks don't count as bad blocks */
418 int tmp = badblocks;
419
420 int i;
421 for (i=1; i < EXT2_FIRST_INO; i++) {
422 if ((i == EXT2_ROOT_INO) || /* Allow optimization of root inode
*/
423 (i == bad_block_inode)) /* Done with them already */
424 continue;
425 if (!inode_in_use (i))
426 die ("Reserved inode is on the free list.");
427 if (get_inode(i))
428 die ("Can't read reserved inode.");
429
430 walk_inode(&inode_buffer, WZ_FIXED_BLOCKS);
431 }
432 badblocks = tmp;
433 }
434 #endif
rade
(e-mail: rade at bancos.com)
Mehr Informationen über die Mailingliste linux-l