static int process_command(int serial, int cid, char *cmd) { /*char *opt, *opt2; */ char *p, *opt; int ret; if ((p = strchr(cmd, '\n'))) *p = '\0'; else return -1; if ((opt = strchr(cmd, ' '))) { *opt = '\0'; opt ++; } else { opt = NULL; } debug_printf(DEBUG_NOTE, "cmd: %s\n", cmd); if (strcmp(cmd, "RELEASE") == 0) ret = cmd_release(cid); else if (strcmp(cmd, "UNFOCUSED") == 0) ret = cmd_unfocused(cid); else if (strcmp(cmd, "FOCUSED") == 0) ret = cmd_focused(cid); else if (strcmp(cmd, "HIDE") == 0) ret = cmd_hide(cid); else if (strcmp(cmd, "SHOW") == 0) ret = cmd_show(cid); else if (strcmp(cmd, "NEW") == 0) ret = cmd_new(cid, opt); else if (strcmp(cmd, "RESET") == 0) ret = cmd_reset(cid); else if (strcmp(cmd, "CHANGE") == 0) ret = cmd_change(cid, opt); else if (strcmp(cmd, "PROP") == 0) ret = cmd_prop(cid, opt); else if (strcmp(cmd, "LABEL") == 0) ret = cmd_label(cid); else if (strcmp(cmd, "HELPER") == 0) ret = cmd_helper(cid, opt); else if (strcmp(cmd, "NOP") == 0) ret = cmd_nop(cid); else if (strcmp(cmd, "LIST") == 0) ret = cmd_list(); else if (strcmp(cmd, "SETENC") == 0) ret = cmd_setenc(opt); else if (strcmp(cmd, "GETENC") == 0) ret = cmd_getenc(opt); /* for debug */ else ret = cmd_error(); return ret; }
int main(int argc, char* argv[]) { int i, j, b; lock_init(); if (argc < 2) { help(); exit(EXIT_SUCCESS); } if (strcmp(argv[1], "generate") == 0) { int disk, file, size; if (argc != 6) { /* LCOV_EXCL_START */ help(); exit(EXIT_FAILURE); /* LCOV_EXCL_STOP */ } seed = atoi(argv[2]); disk = atoi(argv[3]); file = atoi(argv[4]); size = atoi(argv[5]); for (i = 0; i < disk; ++i) { for (j = 0; j < file; ++j) { if (j == 0) /* create at least a big one */ cmd_generate(i + 1, size); else if (j == 1) /* create at least an empty one */ cmd_generate(i + 1, 0); else cmd_generate(i + 1, rnd(size)); } } } else if (strcmp(argv[1], "write") == 0) { int fail, size; if (argc < 6) { /* LCOV_EXCL_START */ help(); exit(EXIT_FAILURE); /* LCOV_EXCL_STOP */ } seed = atoi(argv[2]); fail = atoi(argv[3]); size = atoi(argv[4]); b = 5; /* sort the file names */ qsort(&argv[b], argc - b, sizeof(argv[b]), file_cmp); for (i = b; i < argc; ++i) for (j = 0; j < fail; ++j) cmd_write(argv[i], rndnz(size)); } else if (strcmp(argv[1], "damage") == 0) { int fail, size; if (argc < 6) { /* LCOV_EXCL_START */ help(); exit(EXIT_FAILURE); /* LCOV_EXCL_STOP */ } seed = atoi(argv[2]); fail = atoi(argv[3]); size = atoi(argv[4]); b = 5; /* sort the file names */ qsort(&argv[b], argc - b, sizeof(argv[b]), file_cmp); for (i = b; i < argc; ++i) for (j = 0; j < fail; ++j) cmd_damage(argv[i], rndnz(size)); /* at least one byte */ } else if (strcmp(argv[1], "append") == 0) { int size; if (argc < 5) { /* LCOV_EXCL_START */ help(); exit(EXIT_FAILURE); /* LCOV_EXCL_STOP */ } seed = atoi(argv[2]); size = atoi(argv[3]); b = 4; /* sort the file names */ qsort(&argv[b], argc - b, sizeof(argv[b]), file_cmp); for (i = b; i < argc; ++i) cmd_append(argv[i], rndnz(size)); /* at least one byte */ } else if (strcmp(argv[1], "truncate") == 0) { int size; if (argc < 5) { /* LCOV_EXCL_START */ help(); exit(EXIT_FAILURE); /* LCOV_EXCL_STOP */ } seed = atoi(argv[2]); size = atoi(argv[3]); b = 4; /* sort the file names */ qsort(&argv[b], argc - b, sizeof(argv[b]), file_cmp); for (i = b; i < argc; ++i) cmd_truncate(argv[i], rnd(size)); } else if (strcmp(argv[1], "change") == 0) { int size; if (argc < 5) { /* LCOV_EXCL_START */ help(); exit(EXIT_FAILURE); /* LCOV_EXCL_STOP */ } seed = atoi(argv[2]); size = atoi(argv[3]); b = 4; /* sort the file names */ qsort(&argv[b], argc - b, sizeof(argv[b]), file_cmp); for (i = b; i < argc; ++i) cmd_change(argv[i], rnd(size)); } else { /* LCOV_EXCL_START */ help(); exit(EXIT_FAILURE); /* LCOV_EXCL_STOP */ } lock_done(); return 0; }