struct command *conn_get_cmd(struct connection *client) { struct command *cmd; int reuse = 0; if (!STAILQ_EMPTY(&client->info->cmd_queue)) { cmd = STAILQ_LAST(&client->info->cmd_queue, command, cmd_next); if (!cmd->parse_done) { reuse = 1; } } if (!reuse) { cmd = cmd_create(client->ctx); STAILQ_INSERT_TAIL(&client->info->cmd_queue, cmd, cmd_next); } return cmd; }
int main(int argc, const char *argv[]) { const char *command; if (argc < 3) { fprintf(stderr, "Error: invalid number of arguments\n"); usage(); return -1; } command = argv[2]; /* branch by command name */ if (!strncmp(command, "create", sizeof("create"))) { if (cmd_create(argv[1], argc - 3, &argv[3])) return -1; } else { fprintf(stderr, "Error: invalid command: %s\n", command); return -1; } return 0; }
static void _cdecl tar_cmd_main_thread(LPVOID param) { CTar32CmdInfo *pCmdInfo = (CTar32CmdInfo*)param; CTar32CmdInfo &cmdinfo = *pCmdInfo; CTar32StatusDialog dlg; try{ if(cmdinfo.b_display_dialog){ cmdinfo.hTar32StatusDialog = dlg.Create(cmdinfo.hParentWnd); } switch(cmdinfo.command){ case 'x': cmd_extract(cmdinfo); break; case 'c': cmd_create(cmdinfo); break; case 'l': cmd_list(cmdinfo); break; default: throw CTar32Exception("Command not specified.", ERROR_COMMAND_NAME); } // メッセージループの終了前にダイアログを閉じる! 2000/03/03 by tsuneo dlg.Destroy(); if(pCmdInfo->wm_main_thread_end)PostThreadMessage(pCmdInfo->idMessageThread, pCmdInfo->wm_main_thread_end, 0, 0); }catch(CTar32Exception &e){ dlg.Destroy(); if(pCmdInfo->wm_main_thread_end)PostThreadMessage(pCmdInfo->idMessageThread, pCmdInfo->wm_main_thread_end, 0, 0); cmdinfo.exception = e; // throw e; }catch(...){ dlg.Destroy(); } //return 0; }
int cmd_init() { struct cmd *newcmd; /* TRANSPORT PROTOCOL SENDING */ if(!(newcmd = cmd_create(EOF_CMD_TPS_DEFAULT, cmd_20xx))) return 0; cmd_cat_init(EOF_CAT_TPS, newcmd); if(!(newcmd = cmd_create(EOF_CMD_TPS_SENT, cmd_2000))) return 0; if(!cmd_cat_add(EOF_CAT_TPL, newcmd)) return 0; if(!(newcmd = cmd_create(EOF_CMD_TPL_RECV, cmd_2002))) return 0; if(!cmd_cat_add(EOF_CAT_TPL, newcmd)) return 0; if(!(newcmd = cmd_create(EOF_CMD_TPL_LISTENING, cmd_2003))) return 0; if(!cmd_cat_add(EOF_CAT_TPL, newcmd)) return 0; /* USER INTERFACE */ if(!(newcmd = cmd_create(EOF_CMD_UI_DEFAULT, cmd_21xx))) return 0; cmd_cat_init(EOF_CAT_UI, newcmd); if(!(newcmd = cmd_create(EOF_CMD_UI_REGISTER, cmd_2100))) return 0; if(!cmd_cat_add(EOF_CAT_UI, newcmd)) return 0; if(!(newcmd = cmd_create(EOF_CMD_UI_DEREGISTER, cmd_2101))) return 0; if(!cmd_cat_add(EOF_CAT_UI, newcmd)) return 0; if(!(newcmd = cmd_create(EOF_CMD_UI_PEER_ADD, cmd_2102))) return 0; if(!cmd_cat_add(EOF_CAT_UI, newcmd)) return 0; if(!(newcmd = cmd_create(EOF_CMD_UI_PEER_SEND, cmd_2103))) return 0; if(!cmd_cat_add(EOF_CAT_UI, newcmd)) return 0; if(!(newcmd = cmd_create(EOF_CMD_UI_PEER_RENAME, cmd_2104))) return 0; if(!cmd_cat_add(EOF_CAT_UI, newcmd)) return 0; if(!(newcmd = cmd_create(EOF_CMD_UI_PEER_SHOW, cmd_2105))) return 0; if(!cmd_cat_add(EOF_CAT_UI, newcmd)) return 0; if(!(newcmd = cmd_create(EOF_CMD_UI_PEER_LIST, cmd_2106))) return 0; if(!cmd_cat_add(EOF_CAT_UI, newcmd)) return 0; if(!(newcmd = cmd_create(EOF_CMD_UI_QUIT, cmd_2199))) return 0; if(!cmd_cat_add(EOF_CAT_UI, newcmd)) return 0; // if(!(newcmd = cmd_create(EOF_CMD_EXT_MESSAGE, cmd_3000))) return 0; // if(!cmd_cat_add(EXR, newcmd)) return 0; return 1; }
int main(int argc, UCHAR **argv) { UCHAR *script0 = malloc(SIZ_SCRIPT); // fat_flags = malloc(65536); fat = malloc(65536 * 2); filebuf0 = malloc(SIZ_FILEBUF); imgbuf0 = malloc(SIZ_IMGBUF); UCHAR *p, *q, *r, *script1; int i; FILE *fp; if (imgbuf0 == NULL) errend(1); /* out of memory */ /* スクリプト準備 */ q = script0; while ((p = *++argv) != NULL) { if (*p != '@') { r = ++q; while ((*q++ = *p++) != '\0') { if (q - script0 >= SIZ_SCRIPT - 4) errend(2); /* script too long */ } if (q - r > 255 + 1) errend(3); /* script too long */ *(r - 1) = (q - r) - 1; continue; } p++; fp = fopen(p, "rb"); if (fp == NULL) errend(4); /* script file open error */ i = fread(filebuf0, 1, SIZ_FILEBUF, fp); if (i >= SIZ_FILEBUF) errend(5); /* script file open error */ script1 = filebuf0 + i; p = filebuf0; for (;;) { while (p < script1 && *p <= ' ') p++; if (p >= script1) break; r = ++q; while (p < script1 && *p > ' ') { if (q - script0 >= SIZ_SCRIPT - 4) errend(6); /* script too long */ *q++ = *p++; } if (q - r > 255) errend(7); /* script too long */ *(r - 1) = q - r; *q++ = '\0'; } } *q++ = '\0'; script1 = q; /* スクリプト解釈 */ p = script0; for (;;) { if (*p == '\0') break; if (cmdmatch(p, "copy")) { p = (UCHAR *) cmd_copy(p); continue; } if (cmdmatch(p, "ovrcopy")) { p = (UCHAR *) cmd_ovrcopy(p); continue; } if (cmdmatch(p, "create")) { p = (UCHAR *) cmd_create(p); continue; } if (cmdmatch(p, "ovrcreate")) { p = (UCHAR *) cmd_ovrcreate(p); continue; } if (cmdmatch(p, "delete")) { p = (UCHAR *) cmd_delete(p); continue; } if (cmdmatch(p, "setattr")) { p = (UCHAR *) cmd_setattr(p); continue; } if (cmdmatch(p, "wbinimg")) { p = (UCHAR *) cmd_wbinimg(p); continue; } if (cmdmatch(p, "release")) { p = (UCHAR *) cmd_release(p); continue; } if (cmdmatch(p, "writedata")) { p = (UCHAR *) cmd_writedata(p); continue; } if (cmdmatch(p, "list")) { p = (UCHAR *) cmd_list(p); continue; } if (cmdmatch(p, "copyall")) { p = (UCHAR *) cmd_copyall(p); continue; } if (cmdmatch(p, "exe2bin")) { p = (UCHAR *) cmd_exe2bin(p); continue; } if (cmdmatch(p, "opt")) { p += *p + 2; continue; } if (optmatch(p, "imgin")) { p = (UCHAR *) opt_imgin(p); continue; } if (optmatch(p, "vsiz")) { p = (UCHAR *) opt_vsiz(p); continue; } if (optmatch(p, "imgout")) { p = (UCHAR *) opt_imgout(p); continue; } if (optmatch(p, "binin")) { p = (UCHAR *) opt_binin(p); continue; } if (optmatch(p, "binout")) { p = (UCHAR *) opt_binout(p); continue; } if (optmatch(p, "_path")) { p = (UCHAR *) opt_bpath(p); continue; } if (optmatch(p, "bias")) { p = (UCHAR *) opt_bias(p); continue; } if (cmdmatch(p, "/*")) { i = 1; do { p += *p + 2; if (*p == '\0') errend(9); /* comment nesting error */ if (cmdmatch(p, "/*")) i++; if (cmdmatch(p, "*/")) i--; } while (i > 0); p += *p + 2; continue; } fputs("script syntax error. : ", stderr); fputs(p + 1, stderr); errend(8); /* script syntax error */ } return 0; }
static void run() { cmd_t* cmd = cmd_create(".history", "~>"); cmd_register(cmd, "base conhash", test_base_conhash); cmd_register(cmd, "base bitset", test_base_bitset); cmd_register(cmd, "base heap", test_base_heap); cmd_register(cmd, "base rbtree", test_base_rbtree); cmd_register(cmd, "base rbuffer", test_base_rbuffer); cmd_register(cmd, "base slist", test_base_slist); cmd_register(cmd, "base skiplist", test_base_skiplist); cmd_register(cmd, "base skiplist find", test_base_skiplist_find); cmd_register(cmd, "base skiplist duplicate", test_base_skiplist_duplicate); cmd_register(cmd, "base timer", test_base_timer); cmd_register(cmd, "core atomic", test_core_atomic); #ifdef OS_LINUX // seems some memory error ... // cmd_register(cmd, "core coroutine", test_core_coroutine); #endif cmd_register(cmd, "core fsm", test_core_fsm); cmd_register(cmd, "core lock", test_core_lock); cmd_register(cmd, "core spin", test_core_spin); cmd_register(cmd, "core thread", test_core_thread); cmd_register(cmd, "logic dirty", test_logic_dirty); cmd_register(cmd, "logic task", test_logic_task); cmd_register(cmd, "mm slab", test_mm_slab); cmd_register(cmd, "mm shm", test_mm_shm); cmd_register(cmd, "net curl", test_net_curl); cmd_register(cmd, "net echo", test_net_echo); cmd_register(cmd, "util base64", test_util_base64); cmd_register(cmd, "util cjson text", test_util_cjson_text); cmd_register(cmd, "util cjson file", test_util_cjson_file); cmd_register(cmd, "util cjson create", test_util_cjson_create); cmd_register(cmd, "util dh", test_util_dh); cmd_register(cmd, "util dh perf", test_util_dh_perf); cmd_register(cmd, "util random", test_util_random); cmd_register(cmd, "util shuffle", test_util_shuffle); cmd_register(cmd, "util unicode", test_util_unicode); cmd_register(cmd, "util wscode", test_util_wscode); // unit test mode if (mode_all) { int res = cmd_traverse(cmd, NULL, traverse_callback); if (res < 0) { fprintf(stderr, "\033[%dm--> [RUN ALL TEST CASES FAILURE] <--\033[0m\n\n", COLOR_RED); cmd_release(cmd); exit(res); } } // interact mode if (mode_interact) { while (1) { char* line = cmd_readline(cmd); if (!line) { break; } int ret = cmd_handle(cmd, line); traverse_callback(line, ret); free(line); if (cmd_eof(cmd)) { if (cmd_closed(cmd)) { break; } } } } cmd_release(cmd); }
int main( void ) #endif { iu8 i, len, b; /* TODO: On error? */ hal_init(); /* Send ATR */ /* TODO: Possible from EEPROM? */ hal_io_sendByteT0( 0x3B ); #if CONF_WITH_LOGGING==1 log_init(); #endif resplen = 0; #if CONF_WITH_TRANSACTIONS==1 /* Commit transactions not yet done. */ /* TODO: On error? */ ta_commit(); #endif /* CONF_WITH_TRANSACTIONS */ /* Initialize FS state in RAM. */ /* TODO: On error? */ fs_init(); #if CONF_WITH_PINAUTH==1 /* Initialize authentication state. */ /* TODO: On error? */ auth_init(); #endif /* CONF_WITH_PINAUTH==1 */ if( !(hal_eeprom_read( &len, ATR_LEN_ADDR, 1 ) && (len<=ATR_MAXLEN)) ) for(;;) {} /* XXX good loop mechanism? what is it anyway */ for( i=1; i<len; i++ ) { if( !hal_eeprom_read( &b, ATR_ADDR+i, 1 ) ) for(;;) {} hal_io_sendByteT0( b ); } /* Command loop */ for(;;) { for( i=0; i<5; i++ ) { header[i] = hal_io_recByteT0(); } #if CONF_WITH_KEYAUTH==1 if( challvalidity ) challvalidity--; #endif /* CONF_WITH_KEYAUTH==1 */ #if CONF_WITH_TRNG==1 hal_rnd_addEntropy(); #endif /* CONF_WITH_TRNG==1 */ if( (header[0]&0xFC)==CLA_PROP ) { switch( header[1]&0xFE ) { #if CONF_WITH_TESTCMDS==1 case INS_WRITE: cmd_write(); break; case INS_READ: cmd_read(); break; #endif /* CONF_WITH_TESTCMDS==1 */ #if CONF_WITH_FUNNY==1 case INS_LED: cmd_led(); break; #endif /* CONF_WITH_FUNNY==1 */ #if CONF_WITH_PINCMDS==1 case INS_CHANGE_PIN: cmd_changeUnblockPIN(); break; #endif /* CONF_WITH_PINCMDS==1 */ #if CONF_WITH_CREATECMD==1 case INS_CREATE: cmd_create(); break; #endif /* CONF_WITH_CREATECMD==1 */ #if CONF_WITH_DELETECMD==1 case INS_DELETE: cmd_delete(); break; #endif /* CONF_WITH_DELETECMD==1 */ #if CONF_WITH_KEYCMDS==1 case INS_EXTERNAL_AUTH: cmd_extAuth(); break; #endif /* CONF_WITH_KEYCMDS==1 */ #if CONF_WITH_KEYCMDS==1 case INS_GET_CHALLENGE: cmd_getChallenge(); break; #endif /* CONF_WITH_KEYCMDS==1 */ case INS_GET_RESPONSE: cmd_getResponse(); break; #if CONF_WITH_KEYCMDS==1 case INS_INTERNAL_AUTH: cmd_intAuth(); break; #endif /* CONF_WITH_KEYCMDS==1 */ case INS_READ_BINARY: cmd_readBinary(); break; case INS_SELECT: cmd_select(); break; #if CONF_WITH_PINCMDS==1 case INS_UNBLOCK_PIN: cmd_changeUnblockPIN(); break; #endif /* CONF_WITH_PINCMDS==1 */ case INS_UPDATE_BINARY: cmd_updateBinary(); break; #if CONF_WITH_KEYCMDS==1 case INS_VERIFY_KEY: cmd_verifyKeyPIN(); break; #endif /* CONF_WITH_KEYCMDS==1 */ #if CONF_WITH_PINCMDS==1 case INS_VERIFY_PIN: cmd_verifyKeyPIN(); break; #endif /* CONF_WITH_PINCMDS==1 */ default: t0_sendWord( SW_WRONG_INS ); } } else { t0_sendWord( SW_WRONG_CLA ); } #if CONF_WITH_TRNG==1 hal_rnd_addEntropy(); #endif /* Return the SW in sw */ t0_sendSw(); } }