static int kor2chn_translator_analyze(index_word_extractor_t *extractor, index_word_t *index_word, int max) { kor2chn_translator_handle_t *handle=NULL; token_t *token_array = NULL; int32_t index_word_idx = 0; int32_t num_of_tokens = 0; int i=0; if (extractor->id != 2) return MINUS_DECLINE; handle = extractor->handle; if (handle->done) return 0; memset(&(index_word[0]), 0x00, sizeof(index_word_t)); token_array = handle->token_array; handle->token_array = sb_realloc(token_array, max * sizeof(token_t)); token_array = handle->token_array; num_of_tokens = sb_run_get_tokens(handle->tokenizer, token_array, max); for(i=0; i < num_of_tokens && token_array[i].type != TOKEN_END_OF_DOCUMENT ; i++) { switch(token_array[i].type) { case TOKEN_CHINESE: /* TODO should be replaced by common/hanja.c:sb_hanja2hangul() */ CDconvChn2Kor(token_array[i].string , token_array[i].string); // falls through case TOKEN_ALPHABET: strntoupper(token_array[i].string, MAX_WORD_LEN); // falls through case TOKEN_NUMBER: case TOKEN_JAPANESE: case TOKEN_KOREAN: append_index_word( &(index_word[index_word_idx]), &(token_array[i]), 1); if (index_word[index_word_idx].len >= MAX_WORD_LEN-1) goto FINISH; break; } // switch } // loop FINISH: index_word_idx++; handle->done = 1; return index_word_idx; }
/* process command-line arguments */ int process_arguments (int argc, char **argv) { int c; char *warning = NULL; char *critical = NULL; int opt_index = 0; static struct option long_opts[] = { {"help", no_argument, 0, 'h'}, {"version", no_argument, 0, 'V'}, {"verbose", no_argument, 0, 'v'}, {"timeout", required_argument, 0, 't'}, {"hostname", required_argument, 0, 'H'}, {"server", required_argument, 0, 's'}, {"reverse-server", required_argument, 0, 'r'}, {"querytype", required_argument, 0, 'q'}, {"expected-address", required_argument, 0, 'a'}, {"expect-authority", no_argument, 0, 'A'}, {"accept-cname", no_argument, 0, 'n'}, {"warning", required_argument, 0, 'w'}, {"critical", required_argument, 0, 'c'}, {0, 0, 0, 0} }; if (argc < 2) return ERROR; for (c = 1; c < argc; c++) if (strcmp ("-to", argv[c]) == 0) strcpy (argv[c], "-t"); while (1) { c = getopt_long (argc, argv, "hVvAnt:H:s:r:a:q:w:c:", long_opts, &opt_index); if (c == -1 || c == EOF) break; switch (c) { case 'h': /* help */ print_help (); exit (STATE_OK); case 'V': /* version */ print_revision (progname, NP_VERSION); exit (STATE_OK); case 'v': /* version */ verbose = TRUE; break; case 't': /* timeout period */ timeout_interval = atoi (optarg); break; case 'H': /* hostname */ if (strlen (optarg) >= ADDRESS_LENGTH) die (STATE_UNKNOWN, _("Input buffer overflow\n")); strcpy (query_address, optarg); break; case 's': /* server name */ /* TODO: this host_or_die check is probably unnecessary. * Better to confirm nslookup response matches */ host_or_die(optarg); if (strlen (optarg) >= ADDRESS_LENGTH) die (STATE_UNKNOWN, _("Input buffer overflow\n")); strcpy (dns_server, optarg); break; case 'r': /* reverse server name */ /* TODO: Is this host_or_die necessary? */ host_or_die(optarg); if (strlen (optarg) >= ADDRESS_LENGTH) die (STATE_UNKNOWN, _("Input buffer overflow\n")); strcpy (ptr_server, optarg); break; case 'a': /* expected address */ if (strlen (optarg) >= ADDRESS_LENGTH) die (STATE_UNKNOWN, _("Input buffer overflow\n")); expected_address = (char **)realloc(expected_address, (expected_address_cnt+1) * sizeof(char**)); expected_address[expected_address_cnt] = strdup(optarg); expected_address_cnt++; break; case 'q': /* querytype -- A or AAAA or ANY or SRV or TXT, etc. */ if (strlen (optarg) < 1 || strlen (optarg) > 5) die (STATE_UNKNOWN, _("Missing valid querytype parameter. Try using 'A' or 'AAAA' or 'SRV'\n")); strntoupper(optarg, sizeof(optarg)); strcpy(query_type, "-querytype="); strcat(query_type, optarg); break; case 'A': /* expect authority */ expect_authority = TRUE; break; case 'n': /* accept cname responses as a result */ accept_cname = TRUE; break; case 'w': warning = optarg; break; case 'c': critical = optarg; break; default: /* args not parsable */ usage5(); } } c = optind; if (strlen(query_address)==0 && c<argc) { if (strlen(argv[c])>=ADDRESS_LENGTH) die (STATE_UNKNOWN, _("Input buffer overflow\n")); strcpy (query_address, argv[c++]); } if (strlen(dns_server)==0 && c<argc) { /* TODO: See -s option */ host_or_die(argv[c]); if (strlen(argv[c]) >= ADDRESS_LENGTH) die (STATE_UNKNOWN, _("Input buffer overflow\n")); strcpy (dns_server, argv[c++]); } set_thresholds(&time_thresholds, warning, critical); return validate_arguments (); }