void optFinalize(poffHandle_t poffHandle, poffProgHandle_t poffProgHandle) { /* Build label / line number reference table */ pass1(poffHandle, poffProgHandle); /* Reset for next pass */ insn_ResetOpCodeRead(poffHandle); insn_ResetTmpOpCodeWrite(poffProgHandle); /* Now process all of the symbols */ pass2(poffHandle, poffProgHandle); /* We do not use the debug function information so we do not bother * to fixup the label references. Just discard this information. */ poffDiscardDebugFuncInfo(poffHandle); /* Reset for next pass */ insn_ResetOpCodeRead(poffHandle); /* Generate relocation information and replace all label references * in the code with actual program section data offsets. */ pass3(poffHandle, poffProgHandle); /* Reset for next pass */ insn_ResetOpCodeRead(poffHandle); insn_ResetTmpOpCodeWrite(poffProgHandle); /* Finally, replace file header entry point with the I-space offset */ pass4(poffHandle); /* Clean up after ourselves */ poffReleaseLabelReferences(); }
int main(int argc, char *argv[]) { int fsck = 0; int opt; opterr = 0; while ((opt = getopt(argc, argv, "f:p:i:")) != -1) { switch (opt) { case 'f': fsck = 1; case 'p': theParNum = atoi(optarg); break; case 'i': diskFileName = optarg; break; default: break; } } if (diskFileName == 0) { printf("Argument error\n"); return 0; } // printf("%d %d %s\n", fsck, pNum, diskFileName); printPartitionInfo(fsck); if (fsck) { int i; // printf("%d\n", pNum); for (i = 1; i <= pNum; ++i) if (par[i].type == EXT2_TYPE && (theParNum == 0 || theParNum == i)) { init(i, par[i].start); pass1(); pass2(); pass3(); pass4(); cleanup(); } } // ext2fsutilTest(par[1].start, par[1].length); return 0; }
int main(int argc, char **argv) { char *buf; char *op; if(argc != 2){ fprintf(stderr, "syntax: fsck [devfile][:offset]\n"); return 1; } op = strchr(argv[1], ':'); if (op) { *op++ = 0; offset = atol(op); } if(fd_open(argv[1])){ printf("Cannot open file\n"); return -1; } buf = daread(1); bcopy(buf, (char *) &superblock, sizeof(struct filesys)); /* Verify the fsize and isize parameters */ if (superblock.s_mounted == SMOUNTED_WRONGENDIAN) { swizzling = 1; printf("Checking file system with reversed byte order.\n"); } if (swizzle16(superblock.s_mounted) != SMOUNTED) { printf("Device %d has invalid magic number %d. Fix? ", dev, superblock.s_mounted); if (!yes()) exit(-1); superblock.s_mounted = swizzle16(SMOUNTED); dwrite((blkno_t) 1, (char *) &superblock); } printf("Device %d has fsize = %d and isize = %d. Continue? ", dev, swizzle16(superblock.s_fsize), swizzle16(superblock.s_isize)); if (!yes()) exit(-1); bitmap = calloc(swizzle16(superblock.s_fsize), sizeof(char)); linkmap = (int16_t *) calloc(8 * swizzle16(superblock.s_isize), sizeof(int16_t)); if (!bitmap || !linkmap) { fprintf(stderr, "Not enough memory.\n"); exit(-1); } printf("Pass 1: Checking inodes...\n"); pass1(); printf("Pass 2: Rebuilding free list...\n"); pass2(); printf("Pass 3: Checking block allocation...\n"); pass3(); printf("Pass 4: Checking directory entries...\n"); pass4(); printf("Pass 5: Checking link counts...\n"); pass5(); printf("Done.\n"); exit(0); }
int main (int argc, char **argv) { int silent = 0, force = 0; char *device = 0; error_t parse_opt (int key, char *arg, struct argp_state *state) { switch (key) { case 'p': preen = 1; break; case 'y': noquery = 1; break; case 'n': nowrite = 1; break; case 'l': lfname = arg; break; case 'm': lfmode = strtol (arg, 0, 8); break; case 'f': force = 1; break; case 's': silent = 1; break; case ARGP_KEY_ARG: if (!device) { device = arg; break; } /* Fall through */ case ARGP_KEY_NO_ARGS: argp_usage (state); default: return ARGP_ERR_UNKNOWN; } return 0; } struct argp argp = {options, parse_opt, args_doc}; preen = nowrite = noquery = 0; argp_parse (&argp, argc, argv, 0, 0, 0); if (!setup (device)) exit (1); if (preen && sblock->fs_clean && !force) { if (! silent) warning (0, "FILESYSTEM CLEAN"); } else { if (!preen) printf ("** Phase 1 -- Check Blocks and Sizes\n"); pass1 (); if (duplist) { if (!preen) printf ("** Phase 1b -- Rescan for More Duplicates\n"); pass1b (); } if (!preen) printf ("** Phase 2 -- Check Pathnames\n"); pass2 (); if (!preen) printf ("** Phase 3 -- Check Connectivity\n"); pass3 (); if (!preen) printf ("** Phase 4 -- Check Reference Counts\n"); pass4 (); if (!preen) printf ("** Phase 5 -- Check Cyl Groups\n"); pass5 (); if (! silent) show_stats (sblock); } if (fsmodified && !preen) printf ("\n***** FILE SYSTEM WAS MODIFIED *****\n"); exit (fsmodified ? 2 : 0); }