示例#1
0
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;
}
示例#2
0
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;
}
示例#3
0
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;
	
}
示例#4
0
文件: strings.c 项目: crees/libcfu
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;
}