Esempio n. 1
0
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);
}
Esempio n. 2
0
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);
        }
    }
}
Esempio n. 3
0
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;
}