| /* Test for bug BZ #2703. */ |
| #include <stdio.h> |
| #include <envz.h> |
| #include <stdlib.h> |
| #include <string.h> |
| |
| static const struct |
| { |
| const char *s; |
| int in_result; |
| } strs[] = |
| { |
| { "a=1", 1 }, |
| { "b=2", 1 }, |
| { "(*)", 0 }, |
| { "(*)", 0 }, |
| { "e=5", 1 }, |
| { "f=", 1 }, |
| { "(*)", 0 }, |
| { "h=8", 1 }, |
| { "i=9", 1 }, |
| { "j", 0 } |
| }; |
| |
| #define nstrs (sizeof (strs) / sizeof (strs[0])) |
| |
| |
| static int |
| do_test (void) |
| { |
| |
| size_t size = 0; |
| char *str = malloc (100); |
| if (str == NULL) |
| { |
| puts ("out of memory"); |
| return 1; |
| } |
| |
| char **argz = &str; |
| |
| for (int i = 0; i < nstrs; ++i) |
| argz_add_sep (argz, &size, strs[i].s, '\0'); |
| |
| printf ("calling envz_strip with size=%zu\n", size); |
| envz_strip (argz, &size); |
| |
| int result = 0; |
| printf ("new size=%zu\n", size); |
| for (int i = 0; i < nstrs; ++i) |
| if (strs[i].in_result) |
| { |
| char name[2]; |
| name[0] = strs[i].s[0]; |
| name[1] = '\0'; |
| |
| char *e = envz_entry (*argz, size, name); |
| if (e == NULL) |
| { |
| printf ("entry '%s' not found\n", name); |
| result = 1; |
| } |
| else if (strcmp (e, strs[i].s) != 0) |
| { |
| printf ("entry '%s' does not match: is '%s', expected '%s'\n", |
| name, e, strs[i].s); |
| result = 1; |
| } |
| } |
| |
| free (*argz); |
| return result; |
| } |
| |
| #define TEST_FUNCTION do_test () |
| #include "../test-skeleton.c" |