void generate_random_page(char *page) { unsigned int i; switch (rand() % 6) { /* return a page of complete trash */ case 0: /* bytes */ for (i = 0; i < page_size; ) page[i++] = (unsigned char)rand(); return; case 1: /* words */ for (i = 0; i < (page_size / 2); ) { page[i++] = 0; page[i++] = (unsigned char)rand(); } return; case 2: /* ints */ for (i = 0; i < (page_size / 4); ) { page[i++] = 0; page[i++] = 0; page[i++] = 0; page[i++] = (unsigned char)rand(); } return; /* return a page that looks kinda like a struct */ case 3: fabricate_onepage_struct(page); return; /* return a page of unicode nonsense. */ case 4: gen_unicode_page(page); return; /* page of 0's and 1's. */ case 5: for (i = 0; i < page_size; ) page[i++] = (unsigned char)rand() % 2; return; default: BUG("unreachable!\n"); return; } }
static void generate_random_page(char *page) { unsigned int i; unsigned int p = 0; switch (rand() % 8) { case 0: memset(page, 0, page_size); return; case 1: memset(page, 0xff, page_size); return; case 2: memset(page, rand() % 0xff, page_size); return; case 3: for (i = 0; i < page_size; ) page[i++] = (unsigned char)rand(); return; case 4: for (i = 0; i < page_size; ) page[i++] = (unsigned char)rand_bool(); return; /* return a page that looks kinda like a struct */ case 5: fabricate_onepage_struct(page); return; /* page full of format strings. */ case 6: for (i = 0; i < page_size; i += 2) { page[i] = '%'; switch (rand_bool()) { case 0: page[i + 1] = 'd'; break; case 1: page[i + 1] = 's'; break; } } page_size = getpagesize(); // Hack for clang 3.3 false positive. page[rand() % page_size] = 0; return; /* ascii representation of a random number */ case 7: switch (rand() % 3) { case 0: switch (rand() % 3) { case 0: p = sprintf(page, "%lu", (unsigned long) rand64()); break; case 1: p = sprintf(page, "%ld", (unsigned long) rand64()); break; case 2: p = sprintf(page, "%lx", (unsigned long) rand64()); break; } break; case 1: switch (rand() % 3) { case 0: p = sprintf(page, "%u", (unsigned int) rand32()); break; case 1: p = sprintf(page, "%d", (int) rand32()); break; case 2: p = sprintf(page, "%x", (int) rand32()); break; } break; case 2: switch (rand() % 3) { case 0: p = sprintf(page, "%u", (unsigned char) rand()); break; case 1: p = sprintf(page, "%d", (char) rand()); break; case 2: p = sprintf(page, "%x", (char) rand()); break; } break; } page[p] = 0; break; } }