X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=fsck.cpm.c;h=380df469f757b50874bc382d86a032b6796a1a2f;hb=cae09055d3bb048ba4c8cfe75950d47aab6ff031;hp=c1458037fcb1b2660c621f68258e05861c48729e;hpb=edf600144998d1a1e09898548938cc11b95c10bc;p=debian%2Fcpmtools diff --git a/fsck.cpm.c b/fsck.cpm.c index c145803..380df46 100644 --- a/fsck.cpm.c +++ b/fsck.cpm.c @@ -11,10 +11,6 @@ #include "getopt_.h" #include "cpmdir.h" #include "cpmfs.h" - -#ifdef USE_DMALLOC -#include -#endif /*}}}*/ /* #defines */ /*{{{*/ /* your favourite password *:-) */ @@ -240,16 +236,16 @@ static int fsck(struct cpmInode *root, const char *image) { int block,min,max,i; - min=(sb->maxdir*32+sb->blksiz-1)/sb->blksiz; + min=sb->dirblks; max=sb->size; for (i=0; i<16; ++i) { block=dir->pointers[i]&0xff; - if (sb->size>=256) block+=(dir->pointers[++i]&0xff)<<8; + if (sb->size>256) block+=(dir->pointers[++i]&0xff)<<8; if (block>0) { ++usedBlocks; - if (blockmax) + if (block=max) { printf("Error: Bad block number (extent=%d, name=\"%s\", block=%d)\n",extent,prfile(sb,extent),block); if (ask("Remove file")) @@ -278,8 +274,8 @@ static int fsck(struct cpmInode *root, const char *image) { /* [JCE] Rewritten because the previous implementation didn't work * properly with Visual C++ */ - if (dir->pointers[i] || (sb->size>=256 && dir->pointers[i+1])) ++used; - if (sb->size >= 256) ++i; + if (dir->pointers[i] || (sb->size>256 && dir->pointers[i+1])) ++used; + if (sb->size>256) ++i; } recordsInBlocks=(((unsigned char)dir->blkcnt)*128+sb->blksiz-1)/sb->blksiz; if (recordsInBlocks!=used) @@ -492,13 +488,13 @@ static int fsck(struct cpmInode *root, const char *image) for (i=0; i<16; ++i) { block=dir->pointers[i]&0xff; - if (sb->size>=256) block+=(dir->pointers[++i]&0xff)<<8; + if (sb->size>256) block+=(dir->pointers[++i]&0xff)<<8; for (extent2=0; extent2maxdir; ++extent2) if ((dir2=sb->dir+extent2)->status>=0 && dir2->status<=(sb->type==CPMFS_P2DOS ? 31 : 15)) { for (j=0; j<16; ++j) { block2=dir2->pointers[j]&0xff; - if (sb->size>=256) block2+=(dir2->pointers[++j]&0xff)<<8; + if (sb->size>256) block2+=(dir2->pointers[++j]&0xff)<<8; if (block!=0 && block2!=0 && block==block2 && !(extent==extent2 && i==j)) { printf("Error: Multiple allocated block (extent=%d,%d, name=\"%s\"",extent,extent2,prfile(sb,extent)); @@ -547,7 +543,7 @@ static int fsck(struct cpmInode *root, const char *image) for (i=0; i<16; ++i) { block=dir->pointers[i]&0xff; - if (sb->size>=256) block+=(dir->pointers[++i]&0xff)<<8; + if (sb->size>256) block+=(dir->pointers[++i]&0xff)<<8; if (previous!=-1) { if (block!=0 && block!=(previous+1)) ++fragmented; @@ -573,17 +569,19 @@ int main(int argc, char *argv[]) const char *image; const char *format; const char *devopts=NULL; + int uppercase=0; int c,usage=0; struct cpmSuperBlock sb; struct cpmInode root; enum Result ret; if (!(format=getenv("CPMTOOLSFMT"))) format=FORMAT; - while ((c=getopt(argc,argv,"T:f:nh?"))!=EOF) switch(c) + while ((c=getopt(argc,argv,"T:f:nuh?"))!=EOF) switch(c) { case 'f': format=optarg; break; case 'T': devopts=optarg; break; case 'n': norepair=1; break; + case 'u': uppercase=1; break; case 'h': case '?': usage=1; break; } @@ -600,15 +598,19 @@ int main(int argc, char *argv[]) { if ((err=Device_open(&sb.dev, image,O_RDONLY, devopts))) { - fprintf(stderr,"%s: can not open %s: %s\n",cmd,image,err); + fprintf(stderr,"%s: cannot open %s: %s\n",cmd,image,err); exit(1); } else { - fprintf(stderr,"%s: can not open %s for writing, no repair possible\n",cmd,image); + fprintf(stderr,"%s: cannot open %s for writing, no repair possible\n",cmd,image); } } - cpmReadSuper(&sb,&root,format); + if (cpmReadSuper(&sb,&root,format,uppercase)==-1) + { + fprintf(stderr,"%s: cannot read superblock (%s)\n",cmd,boo); + exit(1); + } ret=fsck(&root,image); if (ret&MODIFIED) {