void add_package(package_t* package) { variable_t* evar; variable_t* vvar; list_node* enode; list_node* vnode; list_node* rnode; group_t* group; char* name; int got_one; char* text; if (package->requires) { DEBUG(stderr, "(pre-using required packages list)\n"); for (rnode=list_tail(package->requires) ; rnode ; rnode=previous(rnode)) { name = (char*) get_value(rnode); if (group = get_group(name)) use_group(group); else use_package(name); } } for (vnode = head(package->variables) ; vnode ; vnode = next(vnode)) { vvar = get_value(vnode); got_one = 0; for (enode = head(the_environment) ; enode ; enode = next(enode)) { evar = get_value(enode); if (!strcmp(vvar->name, evar->name)) { remove_node(the_environment, enode, 0); add_to_tail(the_environment, update_var(evar, vvar)); got_one = 1; break; } } if (!got_one) { enode = get_into_env(vvar); evar = get_value(enode); set_value(enode, update_var(evar, vvar)); } } for (vnode = head(package->scripts) ; vnode ; vnode = next(vnode)) { text = ((script_t*) get_value(vnode))->text; add_to_tail(the_scripts, (void*) text); } }
int main() { LinkNode *head = NULL; add_to_tail(&head, 3); add_to_tail(&head, 5); add_to_tail(&head, -2); add_to_tail(&head, 10); print_link(head); reverse_print_linklist(head); LinkNode *null = NULL; reverse_print_linklist(null); print_reverse_recursively(head); printf("\n"); return 0; }
linked_list* make_pathlist(char* path_string) { linked_list* list; int start,i,end; char* path; list = new_list(); if (!path_string) return(list); start = 0; i = 0; end = strlen(path_string); /* if (!end) return(list); */ while (i <= end) { if ((path_string[i] == ':') || (path_string[i] == '\0')) { path = (char*) malloc((i - start) + 1); strncpy(path, path_string + start, i - start); path[i - start] = '\0'; add_to_tail(list, path); start = i + 1; } i++; } return(list); }
list_node* get_into_env(variable_t* var) { variable_t* env_var; env_var = new(variable_t); env_var->name = var->name; env_var->type = var->type; switch(var->type) { case VAR_LIT_SET: env_var->literal = NULL; break; case VAR_PATH_SET: env_var->pathlist = NULL; break; case VAR_PATH_ADD: env_var->pathlist = make_pathlist(getenv(var->name)); break; default: break; } return(add_to_tail(the_environment, env_var)); }
linked_list* merge_paths_appended(linked_list* elist, linked_list* vlist) { list_node* enode; list_node* vnode; char* vpath; if (elist && vlist) { for (vnode = head(vlist) ; vnode ; vnode = next(vnode)) { vpath = (char*) get_value(vnode); for (enode = head(elist) ; enode ; enode = next(enode)) { if (!strcmp(vpath, (char*) get_value(enode))) { remove_node(elist, enode, 0); break; } } add_to_tail(elist, get_value(vnode)); } } else if (vlist && head(vlist)) { return(vlist); } return(elist); }
/* Add the specified page to the end of the linked list. This is a wrapper * for the add_to_tail() function. */ void add_page(pagelist_t *list, page_t page) { pageinfo_t *pginfo; assert(list != NULL); assert(find_page(list, page, NULL) == NULL); /* Always add the page to the back of the queue. */ pginfo = malloc(sizeof(pageinfo_t)); pginfo->page = page; pginfo->next = NULL; add_to_tail(list, pginfo); }