void do_cksum(int argc, char *argv[]) { struct option_info opts[2]; unsigned long base, len, crc; bool base_set, len_set; init_opts(&opts[0], 'b', true, OPTION_ARG_TYPE_NUM, (void *)&base, (bool *)&base_set, "base address"); init_opts(&opts[1], 'l', true, OPTION_ARG_TYPE_NUM, (void *)&len, (bool *)&len_set, "length"); if (!scan_opts(argc, argv, 1, opts, 2, 0, 0, "")) { return; } if (!base_set || !len_set) { if (load_address >= (CYG_ADDRESS)ram_start && load_address_end < (CYG_ADDRESS)ram_end && load_address < load_address_end) { base = load_address; len = load_address_end - load_address; diag_printf("Computing cksum for area %lx-%lx\n", base, load_address_end); } else { diag_printf("usage: cksum -b <addr> -l <length>\n"); return; } } crc = cyg_posix_crc32((unsigned char *)base, len); diag_printf("POSIX cksum = %lu %lu (0x%08lx 0x%08lx)\n", crc, len, crc, len); }
static void create_file(int i) { cyg_int32 buffer[1020]; char name[16]; cyg_uint32 j; int fd, err; sprintf(name,"test%07d",i); fd = creat(name, S_IRWXU); if (fd == -1) SHOW_RESULT( creat, fd ); for (j=1; j < NELEM(buffer); j++) { buffer[j] = rand(); } buffer[0] = 0; buffer[0] = cyg_posix_crc32((unsigned char *)buffer, sizeof(buffer)); err = write(fd, buffer, sizeof(buffer)); if (err == -1) SHOW_RESULT( write, err ); err = close(fd); if (err == -1) SHOW_RESULT( close, err ); }
externC void cyg_start( void ) { CYG_TEST_INIT(); CYG_TEST_INFO("Calculating CRCs"); if (1500790746l != cyg_posix_crc32(license_txt,sizeof(license_txt)-1)) { CYG_TEST_FAIL("Wrong POSIX CRC32 calculation"); } else { CYG_TEST_PASS("POSIX CRC32 calculation"); } if (1247800780 != cyg_crc32(license_txt,sizeof(license_txt)-1)) { CYG_TEST_FAIL("Wrong Gary S. Browns' crc32 calculation"); } else { CYG_TEST_PASS("Gary S. Browns' crc32 calculation"); } if (32256 != cyg_crc16(license_txt,sizeof(license_txt)-1)) { CYG_TEST_FAIL_FINISH("Wrong 16bit CRC calculation"); } else { CYG_TEST_PASS_FINISH("16bit CRC calculation"); } }
static void check_file(int i) { char name[16]; int err, fd; cyg_int32 buffer[1020]; cyg_uint32 crc; sprintf(name,"test%07d",i); fd = open(name, O_RDONLY); if (fd == -1) SHOW_RESULT( open, fd ); err = read(fd, buffer, sizeof(buffer)); if (err == -1) SHOW_RESULT( read, fd ); crc = buffer[0]; buffer[0] = 0; if (crc != cyg_posix_crc32((unsigned char *)buffer, sizeof(buffer))) { CYG_TEST_FAIL("File corrupt"); } err = close(fd); if (err == -1) SHOW_RESULT( read, fd ); }