diff options
author | kent@mysql.com <> | 2005-09-13 02:31:47 +0200 |
---|---|---|
committer | kent@mysql.com <> | 2005-09-13 02:31:47 +0200 |
commit | 1313a30c8308e981126c59fbd302ddd7642b80d1 (patch) | |
tree | f1176db25eac3d712dbb370ce09b281776c58d0a /extra | |
parent | b5dbd1c7a1807f6d0c98c131f933385d4f305b02 (diff) | |
download | mariadb-git-1313a30c8308e981126c59fbd302ddd7642b80d1.tar.gz |
innochecksum.c:
Changed from C++ comments to C comments
Did some adaption to MySQL Coding Style
Diffstat (limited to 'extra')
-rw-r--r-- | extra/innochecksum.c | 378 |
1 files changed, 200 insertions, 178 deletions
diff --git a/extra/innochecksum.c b/extra/innochecksum.c index bbeb96224c9..739953298af 100644 --- a/extra/innochecksum.c +++ b/extra/innochecksum.c @@ -24,7 +24,7 @@ Published with a permission. */ -// needed to have access to 64 bit file functions +/* needed to have access to 64 bit file functions */ #define _LARGEFILE_SOURCE #define _LARGEFILE64_SOURCE @@ -35,7 +35,7 @@ #include <sys/stat.h> #include <unistd.h> -// all of these ripped from InnoDB code from MySQL 4.0.22 +/* all of these ripped from InnoDB code from MySQL 4.0.22 */ #define UT_HASH_RANDOM_MASK 1463735687 #define UT_HASH_RANDOM_MASK2 1653893711 #define FIL_PAGE_LSN 16 @@ -46,18 +46,19 @@ #define FIL_PAGE_SPACE_OR_CHKSUM 0 #define UNIV_PAGE_SIZE (2 * 8192) -// command line argument to do page checks (that's it) -// another argument to specify page ranges... seek to right spot and go from there +/* command line argument to do page checks (that's it) */ +/* another argument to specify page ranges... seek to right spot and go from there */ typedef unsigned long int ulint; typedef unsigned char byte; /* innodb function in name; modified slightly to not have the ASM version (lots of #ifs that didn't apply) */ -ulint mach_read_from_4(byte *b) { - return( ((ulint)(b[0]) << 24) - + ((ulint)(b[1]) << 16) - + ((ulint)(b[2]) << 8) - + (ulint)(b[3]) +ulint mach_read_from_4(byte *b) +{ + return( ((ulint)(b[0]) << 24) + + ((ulint)(b[1]) << 16) + + ((ulint)(b[2]) << 8) + + (ulint)(b[3]) ); } @@ -80,12 +81,13 @@ ut_fold_binary( ulint len) /* in: length */ { ulint i; - ulint fold = 0; + ulint fold= 0; - for (i = 0; i < len; i++) { - fold = ut_fold_ulint_pair(fold, (ulint)(*str)); + for (i= 0; i < len; i++) + { + fold= ut_fold_ulint_pair(fold, (ulint)(*str)); - str++; + str++; } return(fold); @@ -106,12 +108,12 @@ buf_calc_page_new_checksum( checksum is stored, and also the last 8 bytes of page because there we store the old formula checksum. */ - checksum = ut_fold_binary(page + FIL_PAGE_OFFSET, - FIL_PAGE_FILE_FLUSH_LSN - FIL_PAGE_OFFSET) - + ut_fold_binary(page + FIL_PAGE_DATA, - UNIV_PAGE_SIZE - FIL_PAGE_DATA - - FIL_PAGE_END_LSN_OLD_CHKSUM); - checksum = checksum & 0xFFFFFFFF; + checksum= ut_fold_binary(page + FIL_PAGE_OFFSET, + FIL_PAGE_FILE_FLUSH_LSN - FIL_PAGE_OFFSET) + + ut_fold_binary(page + FIL_PAGE_DATA, + UNIV_PAGE_SIZE - FIL_PAGE_DATA + - FIL_PAGE_END_LSN_OLD_CHKSUM); + checksum= checksum & 0xFFFFFFFF; return(checksum); } @@ -124,183 +126,203 @@ buf_calc_page_old_checksum( { ulint checksum; - checksum = ut_fold_binary(page, FIL_PAGE_FILE_FLUSH_LSN); + checksum= ut_fold_binary(page, FIL_PAGE_FILE_FLUSH_LSN); - checksum = checksum & 0xFFFFFFFF; + checksum= checksum & 0xFFFFFFFF; return(checksum); } -int main(int argc, char **argv) { - FILE *f; // our input file - byte *p; // storage of pages read - int bytes; // bytes read count - ulint ct; // current page number (0 based) - int now; // current time - int lastt; // last time - ulint oldcsum, oldcsumfield, csum, csumfield, logseq, logseqfield; // ulints for checksum storage - struct stat st; // for stat, if you couldn't guess - unsigned long long int size; // size of file (has to be 64 bits) - ulint pages; // number of pages in file - ulint start_page = 0, end_page = 0, use_end_page = 0; // for starting and ending at certain pages - off_t offset = 0; - int just_count = 0; // if true, just print page count - int verbose = 0; - int debug = 0; - int c; - int fd; - - // remove arguments - while ((c = getopt(argc, argv, "cvds:e:p:")) != -1) { - switch (c) { - case 'v': - verbose = 1; - break; - case 'c': - just_count = 1; - break; - case 's': - start_page = atoi(optarg); - break; - case 'e': - end_page = atoi(optarg); - use_end_page = 1; - break; - case 'p': - start_page = atoi(optarg); - end_page = atoi(optarg); - use_end_page = 1; - break; - case 'd': - debug = 1; - break; - case ':': - fprintf(stderr, "option -%c requires an argument\n", optopt); - return 1; - break; - case '?': - fprintf(stderr, "unrecognized option: -%c\n", optopt); - return 1; - break; - } +int main(int argc, char **argv) +{ + FILE *f; /* our input file */ + byte *p; /* storage of pages read */ + int bytes; /* bytes read count */ + ulint ct; /* current page number (0 based) */ + int now; /* current time */ + int lastt; /* last time */ + ulint oldcsum, oldcsumfield, csum, csumfield, logseq, logseqfield; /* ulints for checksum storage */ + struct stat st; /* for stat, if you couldn't guess */ + unsigned long long int size; /* size of file (has to be 64 bits) */ + ulint pages; /* number of pages in file */ + ulint start_page= 0, end_page= 0, use_end_page= 0; /* for starting and ending at certain pages */ + off_t offset= 0; + int just_count= 0; /* if true, just print page count */ + int verbose= 0; + int debug= 0; + int c; + int fd; + + /* remove arguments */ + while ((c= getopt(argc, argv, "cvds:e:p:")) != -1) + { + switch (c) + { + case 'v': + verbose= 1; + break; + case 'c': + just_count= 1; + break; + case 's': + start_page= atoi(optarg); + break; + case 'e': + end_page= atoi(optarg); + use_end_page= 1; + break; + case 'p': + start_page= atoi(optarg); + end_page= atoi(optarg); + use_end_page= 1; + break; + case 'd': + debug= 1; + break; + case ':': + fprintf(stderr, "option -%c requires an argument\n", optopt); + return 1; + break; + case '?': + fprintf(stderr, "unrecognized option: -%c\n", optopt); + return 1; + break; } - - // debug implies verbose... - if (debug) verbose = 1; - - // make sure we have the right arguments - if (optind >= argc) { - printf("InnoDB offline file checksum utility.\n"); - printf("usage: %s [-c] [-s <start page>] [-e <end page>] [-p <page>] [-v] [-d] <filename>\n", argv[0]); - printf("\t-c\tprint the count of pages in the file\n"); - printf("\t-s n\tstart on this page number (0 based)\n"); - printf("\t-e n\tend at this page number (0 based)\n"); - printf("\t-p n\tcheck only this page (0 based)\n"); - printf("\t-v\tverbose (prints progress every 5 seconds)\n"); - printf("\t-d\tdebug mode (prints checksums for each page)\n"); - return 1; + } + + /* debug implies verbose... */ + if (debug) verbose= 1; + + /* make sure we have the right arguments */ + if (optind >= argc) + { + printf("InnoDB offline file checksum utility.\n"); + printf("usage: %s [-c] [-s <start page>] [-e <end page>] [-p <page>] [-v] [-d] <filename>\n", argv[0]); + printf("\t-c\tprint the count of pages in the file\n"); + printf("\t-s n\tstart on this page number (0 based)\n"); + printf("\t-e n\tend at this page number (0 based)\n"); + printf("\t-p n\tcheck only this page (0 based)\n"); + printf("\t-v\tverbose (prints progress every 5 seconds)\n"); + printf("\t-d\tdebug mode (prints checksums for each page)\n"); + return 1; + } + + /* stat the file to get size and page count */ + if (stat(argv[optind], &st)) + { + perror("error statting file"); + return 1; + } + size= st.st_size; + pages= size / UNIV_PAGE_SIZE; + if (just_count) + { + printf("%lu\n", pages); + return 0; + } + else if (verbose) + { + printf("file %s= %llu bytes (%lu pages)...\n", argv[1], size, pages); + printf("checking pages in range %lu to %lu\n", start_page, use_end_page ? end_page : (pages - 1)); + } + + /* open the file for reading */ + f= fopen(argv[optind], "r"); + if (!f) + { + perror("error opening file"); + return 1; + } + + /* seek to the necessary position */ + if (start_page) + { + fd= fileno(f); + if (!fd) + { + perror("unable to obtain file descriptor number"); + return 1; } - // stat the file to get size and page count - if (stat(argv[optind], &st)) { - perror("error statting file"); - return 1; + offset= (off_t)start_page * (off_t)UNIV_PAGE_SIZE; + + if (lseek(fd, offset, SEEK_SET) != offset) + { + perror("unable to seek to necessary offset"); + return 1; } - size = st.st_size; - pages = size / UNIV_PAGE_SIZE; - if (just_count) { - printf("%lu\n", pages); - return 0; - } else if (verbose) { - printf("file %s = %llu bytes (%lu pages)...\n", argv[1], size, pages); - printf("checking pages in range %lu to %lu\n", start_page, use_end_page ? end_page : (pages - 1)); + } + + /* allocate buffer for reading (so we don't realloc every time) */ + p= (byte *)malloc(UNIV_PAGE_SIZE); + + /* main checksumming loop */ + ct= start_page; + lastt= 0; + while (!feof(f)) + { + bytes= fread(p, 1, UNIV_PAGE_SIZE, f); + if (!bytes && feof(f)) return 0; + if (bytes != UNIV_PAGE_SIZE) + { + fprintf(stderr, "bytes read (%d) doesn't match universal page size (%d)\n", bytes, UNIV_PAGE_SIZE); + return 1; } - // open the file for reading - f = fopen(argv[optind], "r"); - if (!f) { - perror("error opening file"); - return 1; + /* check the "stored log sequence numbers" */ + logseq= mach_read_from_4(p + FIL_PAGE_LSN + 4); + logseqfield= mach_read_from_4(p + UNIV_PAGE_SIZE - FIL_PAGE_END_LSN_OLD_CHKSUM + 4); + if (debug) + printf("page %lu: log sequence number: first = %lu; second = %lu\n", ct, logseq, logseqfield); + if (logseq != logseqfield) + { + fprintf(stderr, "page %lu invalid (fails log sequence number check)\n", ct); + return 1; } - // seek to the necessary position - if (start_page) { - fd = fileno(f); - if (!fd) { - perror("unable to obtain file descriptor number"); - return 1; - } - - offset = (off_t)start_page * (off_t)UNIV_PAGE_SIZE; - - if (lseek(fd, offset, SEEK_SET) != offset) { - perror("unable to seek to necessary offset"); - return 1; - } + /* check old method of checksumming */ + oldcsum= buf_calc_page_old_checksum(p); + oldcsumfield= mach_read_from_4(p + UNIV_PAGE_SIZE - FIL_PAGE_END_LSN_OLD_CHKSUM); + if (debug) + printf("page %lu: old style: calculated = %lu; recorded = %lu\n", ct, oldcsum, oldcsumfield); + if (oldcsumfield != mach_read_from_4(p + FIL_PAGE_LSN) && oldcsumfield != oldcsum) + { + fprintf(stderr, "page %lu invalid (fails old style checksum)\n", ct); + return 1; } - // allocate buffer for reading (so we don't realloc every time) - p = (byte *)malloc(UNIV_PAGE_SIZE); - - // main checksumming loop - ct = start_page; - lastt = 0; - while (!feof(f)) { - bytes = fread(p, 1, UNIV_PAGE_SIZE, f); - if (!bytes && feof(f)) return 0; - if (bytes != UNIV_PAGE_SIZE) { - fprintf(stderr, "bytes read (%d) doesn't match universal page size (%d)\n", bytes, UNIV_PAGE_SIZE); - return 1; - } - - // check the "stored log sequence numbers" - logseq = mach_read_from_4(p + FIL_PAGE_LSN + 4); - logseqfield = mach_read_from_4(p + UNIV_PAGE_SIZE - FIL_PAGE_END_LSN_OLD_CHKSUM + 4); - if (debug) - printf("page %lu: log sequence number: first = %lu; second = %lu\n", ct, logseq, logseqfield); - if (logseq != logseqfield) { - fprintf(stderr, "page %lu invalid (fails log sequence number check)\n", ct); - return 1; - } - - // check old method of checksumming - oldcsum = buf_calc_page_old_checksum(p); - oldcsumfield = mach_read_from_4(p + UNIV_PAGE_SIZE - FIL_PAGE_END_LSN_OLD_CHKSUM); - if (debug) - printf("page %lu: old style: calculated = %lu; recorded = %lu\n", ct, oldcsum, oldcsumfield); - if (oldcsumfield != mach_read_from_4(p + FIL_PAGE_LSN) && oldcsumfield != oldcsum) { - fprintf(stderr, "page %lu invalid (fails old style checksum)\n", ct); - return 1; - } - - // now check the new method - csum = buf_calc_page_new_checksum(p); - csumfield = mach_read_from_4(p + FIL_PAGE_SPACE_OR_CHKSUM); - if (debug) - printf("page %lu: new style: calculated = %lu; recorded = %lu\n", ct, csum, csumfield); - if (csumfield != 0 && csum != csumfield) { - fprintf(stderr, "page %lu invalid (fails new style checksum)\n", ct); - return 1; - } + /* now check the new method */ + csum= buf_calc_page_new_checksum(p); + csumfield= mach_read_from_4(p + FIL_PAGE_SPACE_OR_CHKSUM); + if (debug) + printf("page %lu: new style: calculated = %lu; recorded = %lu\n", ct, csum, csumfield); + if (csumfield != 0 && csum != csumfield) + { + fprintf(stderr, "page %lu invalid (fails new style checksum)\n", ct); + return 1; + } - // end if this was the last page we were supposed to check - if (use_end_page && (ct >= end_page)) - return 0; - - // do counter increase and progress printing - ct++; - if (verbose) { - if (ct % 64 == 0) { - now = time(0); - if (!lastt) lastt = now; - if (now - lastt >= 1) { - printf("page %lu okay: %.3f%% done\n", (ct - 1), (float) ct / pages * 100); - lastt = now; - } - } + /* end if this was the last page we were supposed to check */ + if (use_end_page && (ct >= end_page)) + return 0; + + /* do counter increase and progress printing */ + ct++; + if (verbose) + { + if (ct % 64 == 0) + { + now= time(0); + if (!lastt) lastt= now; + if (now - lastt >= 1) + { + printf("page %lu okay: %.3f%% done\n", (ct - 1), (float) ct / pages * 100); + lastt= now; } + } } - return 0; + } + return 0; } |