int main() { int len_str, size_dict; char *word; Index idx_dict; char buf[BUF_SIZE + 1]; size_dict = 0; idx_dict.dict_head = NULL; idx_dict.dict_tail = NULL; while (true) { memset(buf, 0, sizeof(char) * (BUF_SIZE + 1)); if (fgets(buf, (BUF_SIZE + 1), stdin) == NULL) { break; } len_str = strlen(buf); buf[--len_str] = 0; /* Check for the process termination. */ if (strcmp(buf, "#") == 0) { break; } /* Split the input line into several words for processing. */ word = strtok(buf, " "); while (word != NULL) { check_ananagram(&idx_dict, &size_dict, word); word = strtok(NULL, " "); } } /* Sort and output the answer words. */ generate_answer(&idx_dict); /* Release the allocated resource. */ delete_dictionary(&idx_dict); return 0; }
int main() { unsigned char *remotehost, *remoteip, *remoteport, *localip, *localport; unsigned char query[256] = {0}; uint32 uid = 0xffffffff; // that's our default for "not found" int query_len = 0; int pos = 0; char *problem = "ok"; stralloc answer = {0}; char strnum[FMT_ULONG]; int proto = 0; char *x; char lip[16] = {0}; char rip[16] = {0}; uint16 lport = 0; uint16 rport = 0; didentd_init(); x = env_get("PROTO"); if(x) { if(str_equal(x, "TCP")) proto = 4; if(str_equal(x, "TCP6")) proto = 6; } if(proto == 0) { buffer_puts(buffer_2, "warning: can't determine $PROTO\n"); buffer_flush(buffer_2); } srandom(((long long) getpid () * (long long) time(0) * (long long) getppid() * (long long) random() * (long long) clock()) % 0xffffffff); /* since we run under tcpserver, we can get all info about the remote side from the enviroment */ remotehost = env_get("TCPREMOTEHOST"); if (!remotehost) remotehost = "unknown"; remoteport = env_get("TCPREMOTEPORT"); if (remoteport) scan_ushort(remoteport, &rport); else remoteport = "0"; localport = env_get("TCPLOCALPORT"); if (localport) scan_ushort(localport, &lport); else localport = "0"; remoteip = env_get("TCPREMOTEIP"); if (!remoteip) remoteip = "0.0.0.0"; localip = env_get("TCPLOCALIP"); if (!localip) localip = "0.0.0.0"; if(proto == 4) { if(remoteip) ip4_scan(remoteip, rip); if(localip) ip4_scan(localip, lip); /* seed some entropy into the by IPv4 unsused bytes */ rip[5] = (char) random() & 0xff; rip[6] = (char) random() & 0xff; } if(proto == 6) { if (remoteip) ip6_scan(remoteip, rip); if (localip) ip6_scan(localip, lip); } /* Read the request from the client and \0-terminate it */ /* timeout after 60 seconds */ query_len = timeoutread(60, stdin, query, sizeof(query) - 1); query[query_len] = '\0'; /* If there was any data we can go on */ problem = "empty query"; if (query_len > 0) { problem = "illegal query"; pos = scan_ushort(query, &lport); if(query[pos++] == ' ') if(query[pos++] == ',') if(query[pos++] == ' ') { pos = scan_ushort(&query[pos], &rport); problem = "ok"; if(proto == 4) uid = get_connection_info4(lip, lport, rip, rport); if(proto == 6) uid = get_connection_info6(lip, lport, rip, rport); stralloc_copyb(&answer, strnum, fmt_ulong(strnum, lport)); stralloc_cats(&answer, " , "); stralloc_catb(&answer, strnum, fmt_ulong(strnum, rport)); if(uid != 0xffffffff) problem = generate_answer(&answer, uid, lip, lport, rip, rport); else generate_answer(&answer, uid, lip, lport, rip, rport); buffer_puts(buffer_1, answer.s); buffer_flush(buffer_1); } } /* Do logging */ buffer_puts(buffer_2, localip); buffer_puts(buffer_2, ":"); buffer_put(buffer_2, strnum, fmt_ulong(strnum, lport)); buffer_puts(buffer_2, " -> "); buffer_puts(buffer_2, remoteip); buffer_puts(buffer_2, ":"); buffer_put(buffer_2, strnum, fmt_ulong(strnum, rport)); buffer_puts(buffer_2, " ["); buffer_puts(buffer_2, problem); buffer_puts(buffer_2, "] "); if(uid < 0xffffffff) buffer_put(buffer_2, strnum, fmt_ulong(strnum,uid)); else buffer_puts(buffer_2, "unknown"); buffer_puts(buffer_2, "\n"); buffer_flush(buffer_2); return 0; }
int do_caddy(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) { unsigned long base_addr; uint32_t ptr; struct caddy_cmd *caddy_cmd; uint32_t result[5]; uint16_t data16; uint8_t data8; uint32_t status; pci_dev_t dev; void *pci_ptr; if (argc < 2) { puts("Missing parameter\n"); return 1; } base_addr = simple_strtoul(argv[1], NULL, 16); caddy_interface = (struct caddy_interface *) base_addr; memset((void *)caddy_interface, 0, sizeof(struct caddy_interface)); memcpy((void *)&caddy_interface->magic[0], &CADDY_MAGIC, 16); while (ctrlc() == 0) { if (caddy_interface->cmd_in != caddy_interface->cmd_out) { memset(result, 0, 5 * sizeof(result[0])); status = 0; caddy_cmd = &caddy_interface->cmd[caddy_interface->cmd_out]; pci_ptr = (void *)CONFIG_SYS_PCI1_IO_PHYS + (caddy_cmd->addr & 0x001fffff); switch (caddy_cmd->cmd) { case CADDY_CMD_IO_READ_8: result[0] = in_8(pci_ptr); break; case CADDY_CMD_IO_READ_16: result[0] = in_be16(pci_ptr); break; case CADDY_CMD_IO_READ_32: result[0] = in_be32(pci_ptr); break; case CADDY_CMD_IO_WRITE_8: data8 = caddy_cmd->par[0] & 0x000000ff; out_8(pci_ptr, data8); break; case CADDY_CMD_IO_WRITE_16: data16 = caddy_cmd->par[0] & 0x0000ffff; out_be16(pci_ptr, data16); break; case CADDY_CMD_IO_WRITE_32: out_be32(pci_ptr, caddy_cmd->par[0]); break; case CADDY_CMD_CONFIG_READ_8: dev = PCI_BDF(caddy_cmd->par[0], caddy_cmd->par[1], caddy_cmd->par[2]); status = pci_read_config_byte(dev, caddy_cmd->addr, &data8); result[0] = data8; break; case CADDY_CMD_CONFIG_READ_16: dev = PCI_BDF(caddy_cmd->par[0], caddy_cmd->par[1], caddy_cmd->par[2]); status = pci_read_config_word(dev, caddy_cmd->addr, &data16); result[0] = data16; break; case CADDY_CMD_CONFIG_READ_32: dev = PCI_BDF(caddy_cmd->par[0], caddy_cmd->par[1], caddy_cmd->par[2]); status = pci_read_config_dword(dev, caddy_cmd->addr, &result[0]); break; case CADDY_CMD_CONFIG_WRITE_8: dev = PCI_BDF(caddy_cmd->par[0], caddy_cmd->par[1], caddy_cmd->par[2]); data8 = caddy_cmd->par[3] & 0x000000ff; status = pci_write_config_byte(dev, caddy_cmd->addr, data8); break; case CADDY_CMD_CONFIG_WRITE_16: dev = PCI_BDF(caddy_cmd->par[0], caddy_cmd->par[1], caddy_cmd->par[2]); data16 = caddy_cmd->par[3] & 0x0000ffff; status = pci_write_config_word(dev, caddy_cmd->addr, data16); break; case CADDY_CMD_CONFIG_WRITE_32: dev = PCI_BDF(caddy_cmd->par[0], caddy_cmd->par[1], caddy_cmd->par[2]); status = pci_write_config_dword(dev, caddy_cmd->addr, caddy_cmd->par[3]); break; default: status = 0xffffffff; break; } generate_answer(caddy_cmd, status, &result[0]); ptr = caddy_interface->cmd_out + 1; ptr = ptr & (CMD_SIZE - 1); caddy_interface->cmd_out = ptr; } caddy_interface->heartbeat++; } return 0; }