int main(int argc, char **argv) { GDBM_FILE dbf; datum key, next, value; int i; while ((i = getopt(argc, argv, "py")) != -1) { switch (i) { case 'p': pflag = 1; break; case 'y': yflag = 1; break; default: fprintf(stderr, "Usage: %s [-p] [-y] file [...]\n", strchr(argv[0], '/') ? strrchr(argv[0], '/') + 1 : argv[0]); return 1; break; } } for (i = optind; i < argc; i++) { dbf = gdbm_open(argv[i], 0, GDBM_READER, 0600, NULL); if (dbf == NULL) { fprintf(stderr, "Error opening `%s': %s\n", argv[i], gdbm_errno ? gdbm_strerror(gdbm_errno) : strerror(errno)); return 1; } dump_start(argc - optind, argv[i]); key = gdbm_firstkey(dbf); while (key.dptr != NULL) { value = gdbm_fetch(dbf, key); if (value.dptr != NULL) { dump_entry(key, value); free(value.dptr); } next = gdbm_nextkey(dbf, key); free(key.dptr); key = next; } dump_end(); gdbm_close(dbf); } return 0; }
static bool maybe_handle_command(uint8 command, uint32 option, voot_packet *packet) { switch(command) { case VOOT_COMMAND_TYPE_DEBUG: { static char key[] = "vrcust.bin"; voot_debug("Module: '%s'", (const char *) VOOT_MODULE_NAME); grep_memory(key, sizeof(key)); break; } case VOOT_COMMAND_TYPE_TIME: voot_debug("%u", time()); break; case VOOT_COMMAND_TYPE_VERSION: { uint32 freesize, max_freesize; malloc_stat(&freesize, &max_freesize); voot_debug("Netplay VOOT Extensions, BETA [%u/%u]", freesize, max_freesize); break; } case VOOT_COMMAND_TYPE_DUMPON: { dump_start(option); voot_debug("Processed DUMPON command. (%x)", option); break; } case VOOT_COMMAND_TYPE_DUMPOFF: { uint32 bytes; bytes = dump_stop(); voot_debug("Processed DUMPOFF command. (%u)", bytes); break; } /* TODO: After taking a certain number of screenshots, it appears to crash the system. Maybe the dump_framebuffer() call should be moved into the heartbeat logic and some simple IPC be implemented? */ case VOOT_COMMAND_TYPE_SCREEN: dump_framebuffer(); break; case VOOT_COMMAND_TYPE_DUMPMEM: voot_dump_buffer((const uint8 *) SYS_MEM_START, SYS_MEM_END - SYS_MEM_START); break; case VOOT_COMMAND_TYPE_DUMPGAME: voot_dump_buffer((const uint8 *) VOOT_MEM_START, VOOT_MEM_END - VOOT_MEM_START); break; case VOOT_COMMAND_TYPE_DUMPSELECT: voot_dump_buffer((const uint8 *) option, 1024); break; default: break; } return FALSE; }