extern void * _param_map_fn(void *data, size_t data_size, void *arg, size_t *new_data_size) { char *name = (char *)data; size_t len = 0; cfuopt_list_entry_t *opt = (cfuopt_list_entry_t *)arg; data_size = data_size; if (!name) return NULL; len = strlen(name); *new_data_size = -1; if (len == 0) return cfustring_dup_c_str(""); if (opt->arg_description && strlen(opt->arg_description) > 0) { if (len == 1) { return cfustring_sprintf_c_str("-%s %s", name, opt->arg_description); } else { return cfustring_sprintf_c_str("--%s=%s", name, opt->arg_description); } } else { if (len == 1) { return cfustring_sprintf_c_str("-%s", name); } else { return cfustring_sprintf_c_str("--%s", name); } } return NULL; }
extern char * cfuopt_get_help_str(cfuopt_t *context) { cfulist_t *desc_list = NULL; size_t max_width = 0; char *fmt = NULL; _help_lines_ds ds; char *help_str = NULL; max_width = _find_longest_help_desc(context, &desc_list); fmt = cfustring_sprintf_c_str(" %%-%us %%s\n", max_width); ds.fmt = fmt; ds.list = cfulist_new(); ds.desc_list = desc_list; cfulist_foreach(desc_list, _get_help_lines, (void *)&ds); help_str = cfulist_join(ds.list, "\n"); cfulist_destroy_with_free_fn(ds.list, _list_simple_free_fn); cfulist_destroy_with_free_fn(desc_list, _desc_list_free); free(fmt); return help_str; }
static int _get_help_lines(void *data, size_t data_size, void *arg) { _cfuopt_desc *desc_ds = (_cfuopt_desc *)data; _help_lines_ds *ds = (_help_lines_ds *)arg; char *left_col = NULL; const char *desc = NULL; char *line = NULL; data_size = data_size; left_col = desc_ds->desc; if (!left_col) return 0; desc = desc_ds->entry->description; if (!desc) desc = "test desc"; line = cfustring_sprintf_c_str(ds->fmt, left_col, desc); cfulist_push(ds->list, (void *)line); return 0; }
int main(int argc, char **argv) { cfustring_t *buf = cfustring_new_with_initial_size(32); char **strings = NULL; size_t num_strings = 0; size_t num_headers = 0; size_t i = 0; char *ref_addr = NULL; char *s = NULL; cfustring_t *header_block = cfustring_new_from_string( "User-Agent: curl/7.10.6 (i386-redhat-linux-gnu) libcurl/7.10.6 OpenSSL/0.9.7a ipv6 zlib/1.2.0.7\r\n" "Host: localhost:9095\r\n" "Pragma: no-cache\r\n" "Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*\r\n"); cfustring_t **header_lines = NULL; (void)argc; (void)argv; /* avoid compiler warnings */ cfustring_append(buf, "test^*string%2^*3"); strings = cfustring_split_to_c_str(buf, &num_strings, 0, "%", "^*", NULL); printf("got back %lu strings\n", num_strings); printf("\n"); for (i = 0; i < num_strings; i++) { printf("'%s'\n", strings[i]); } for (i = 0; i < num_strings; i++) { free(strings[i]); } free(strings); header_lines = cfustring_split(header_block, &num_headers, 0, "\r\n", "\n", NULL); printf("got back %lu headers\n", num_strings); for (i = 0; i < num_headers; i++) { strings = cfustring_split_to_c_str(header_lines[i], &num_strings, 2, ":", NULL); if (num_strings != 2) { /* bad header */ size_t j = 0; for (j = 0; j < num_strings; j++) free(strings[j]); free(strings); fprintf(stderr, "bad header: %lu strings from split -- '%s'\n", num_strings, cfustring_get_buffer(header_lines[i])); continue; } printf("Got header '%s' => '%s'\n", strings[0], strings[1]); free(strings[0]); free(strings[1]); free(strings); } for (i = 0; i < num_headers; i++) { assert(cfu_is_string(header_lines[i])); cfustring_destroy(header_lines[i]); } free(header_lines); cfustring_sprintf(buf, "this %% is a string - '%.2f'", 509.0); printf("cfustring_sprintf(): '%s'\n", cfustring_get_buffer(buf)); cfustring_destroy(buf); s = cfustring_sprintf_c_str("this is a test with a num: '%u'\n", 5); printf("got: %s\n", s); free(s); ref_addr = cfustring_sprintf_c_str("%p", (void *)header_block); cfustring_destroy(header_block); printf("\n\nheader_block as ref_addr='%s'\n\n", ref_addr); free(ref_addr); return 0; }