/** * Creates an empty tree folder for a cookie domain, and links it into the tree. * * All information is copied from the cookie_data, and as such can * be edited and should be freed. * * \param folder updated to the new folder * \param data the cookie data to use * \return NSERROR_OK on success, appropriate error otherwise */ static nserror cookie_manager_create_domain_folder( struct cookie_manager_folder **folder, const struct cookie_data *data) { nserror err; struct cookie_manager_folder *f; /* Create new cookie manager entry */ f = malloc(sizeof(struct cookie_manager_folder)); if (f == NULL) { return NSERROR_NOMEM; } f->data.field = cm_ctx.fields[COOKIE_M_N_FIELDS - 1].field; f->data.value = strdup(data->domain); f->data.value_len = (f->data.value != NULL) ? strlen(data->domain) : 0; err = treeview_create_node_folder(cm_ctx.tree, &(f->folder), NULL, TREE_REL_FIRST_CHILD, &f->data, f, cm_ctx.built ? TREE_OPTION_NONE : TREE_OPTION_SUPPRESS_RESIZE | TREE_OPTION_SUPPRESS_REDRAW); if (err != NSERROR_OK) { free((void *)f->data.value); free(f); return err; } *folder = f; return NSERROR_OK; }
/** * Initialise the treeview directories * * \param f Ident for folder to create * \return NSERROR_OK on success, appropriate error otherwise */ static nserror global_history_create_dir(enum global_history_folders f) { nserror err; treeview_node *relation = NULL; enum treeview_relationship rel = TREE_REL_FIRST_CHILD; const char *label; int i; switch (f) { case GH_TODAY: label = "DateToday"; break; case GH_YESTERDAY: label = "DateYesterday"; break; case GH_2_DAYS_AGO: label = "Date2Days"; break; case GH_3_DAYS_AGO: label = "Date3Days"; break; case GH_4_DAYS_AGO: label = "Date4Days"; break; case GH_5_DAYS_AGO: label = "Date5Days"; break; case GH_6_DAYS_AGO: label = "Date6Days"; break; case GH_LAST_WEEK: label = "Date1Week"; break; case GH_2_WEEKS_AGO: label = "Date2Week"; break; case GH_3_WEEKS_AGO: label = "Date3Week"; break; default: return NSERROR_BAD_PARAMETER; } label = messages_get(label); for (i = f - 1; i >= 0; i--) { if (gh_ctx.folders[i].folder != NULL) { relation = gh_ctx.folders[i].folder; rel = TREE_REL_NEXT_SIBLING; break; } } gh_ctx.folders[f].data.field = gh_ctx.fields[N_FIELDS - 1].field; gh_ctx.folders[f].data.value = label; gh_ctx.folders[f].data.value_len = strlen(label); err = treeview_create_node_folder(gh_ctx.tree, &gh_ctx.folders[f].folder, relation, rel, &gh_ctx.folders[f].data, &gh_ctx.folders[f], gh_ctx.built ? TREE_OPTION_NONE : TREE_OPTION_SUPPRESS_RESIZE | TREE_OPTION_SUPPRESS_REDRAW); return err; }