void add_first_call(arguments *arg, global_info *global) { /* Copy the main url */ size_t root_url_len = strnlen(arg->url, MAX_URL_LEN + 10); if (root_url_len > MAX_URL_LEN) { orcerror("%s : url is larger than defacto limit %d\n", arg->url); exit(EXIT_FAILURE); } char *root_url = calloc(root_url_len + 1, sizeof(char)); if (0 == root_url) { orcerror("%s (%d)\n", strerror(errno), errno); exit(EXIT_FAILURE); } /* Create a info value for the main url */ url_info *info = calloc(1, sizeof(*info)); if (0 == info) { orcerror("%s (%d)\n", strerror(errno), errno); exit(EXIT_FAILURE); } strncpy(root_url, arg->url, root_url_len); root_url[root_url_len] = '\0'; /* Add a connection to the url where we will start the spider */ new_conn(root_url, global); /* root_url and info are freed in bintree_free */ bintree_add(&(global->url_tree), root_url, info); }
static void read_new_pages(global_info *global) { int max_count = global->job_max; char* url = 0; while (global->job_count <= max_count && 0 != (url = url_get(global))) { url_info *info = 0; if (0 != (info = (url_info *)bintree_find(&(global->url_tree), url))) { info->found_count++; orcstatus(orcm_debug, orc_cyan, "counted", "%s\n", url); free(url); } else { info = calloc(1, sizeof(*info)); info->found_count++; bintree_add(&(global->url_tree), url, info); new_conn(url, global); } } }
int main(int argc, char** argv) { printf("testing bintree\n"); node na,nb,nc,nd; init_node(&na,"Anchor"); init_node(&nb,"Bunk"); init_node(&nc,"Corgi"); init_node(&nd,"Dapper"); node_add_child(&nb,&nd,comp_string); node_add_child(&nb,&nc,comp_string); node_add_child(&nb,&na,comp_string); printf("heythere\n"); printf("%x: %x, %x\n",nb.data,nb.left,nb.right); printf("%s: %s, %s\n",nb.data,((bintree_node*)nb.left)->data,((bintree_node*)nb.right)->data); printf("%s: %s, %s\n",nd.data,((bintree_node*)nd.left)->data,(nd.right ? ((bintree_node*)nd.right)->data : 0)); bintree_node* ns[] = {&na,&nb,&nc,&nd}; int i; for (i=0; i<4; ++i) { #define ndata(a,b) ((bintree_node*)a->b)->data printf("<%s: (%s) %s, %s, %i>\n", (ns[i]->data ? ns[i]->data : 0), (ns[i]->parent ? ndata(ns[i],parent) : 0), (ns[i]->left ? ndata(ns[i],left) : 0), (ns[i]->right ? ndata(ns[i],right) : 0), ns[i]->weight); } bintree_node* n = &na; printf("testing node_next\n"); do { printf("- %s\n",n->data); } while ((n = node_next(n))); n = &nd; printf("testing node_prev\n"); do { printf("- %s\n",n->data); } while ((n = node_prev(n))); #undef ndata #ifdef mtrace_active mtrace(); #endif bintree* b = new_bintree(comp_string); del_bintree(b,DEL_STRUCT); b = new_bintree(comp_string); bintree_add(b,"Brawn"); bintree_add(b,"Dour"); bintree_add(b,"Court"); bintree_add(b,"Acclamate"); char* s; void* h = iter_bintree(b); while (s = iter_bintree_next(&h)) printf("%s\n",s); h = iter_bintree(b); while (s = iter_bintree_next(&h)) printf("%s\n",bintree_contains(b,s)); del_bintree(b,DEL_STRUCT); #ifdef mtrace_active muntrace(); #endif return 0; }