MCPcopy Index your code
hub / github.com/RsyncProject/rsync / poptDupArgv

Function poptDupArgv

popt/poptparse.c:13–52  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

11#define POPT_ARGV_ARRAY_GROW_DELTA 5
12
13int poptDupArgv(int argc, const char **argv,
14 int * argcPtr, const char *** argvPtr)
15{
16 size_t nb = (argc + 1) * sizeof(*argv);
17 const char ** argv2;
18 char * dst;
19 int i;
20
21 if (argc <= 0 || argv == NULL) /* XXX can't happen */
22 return POPT_ERROR_NOARG;
23 for (i = 0; i < argc; i++) {
24 if (argv[i] == NULL)
25 return POPT_ERROR_NOARG;
26 nb += strlen(argv[i]) + 1;
27 }
28
29 dst = malloc(nb);
30 if (dst == NULL) /* XXX can't happen */
31 return POPT_ERROR_MALLOC;
32 argv2 = (void *) dst;
33 dst += (argc + 1) * sizeof(*argv);
34 *dst = '\0';
35
36 for (i = 0; i < argc; i++) {
37 argv2[i] = dst;
38 dst = stpcpy(dst, argv[i]);
39 dst++; /* trailing NUL */
40 }
41 argv2[argc] = NULL;
42
43 if (argvPtr) {
44 *argvPtr = argv2;
45 } else {
46 free(argv2);
47 argv2 = NULL;
48 }
49 if (argcPtr)
50 *argcPtr = argc;
51 return 0;
52}
53
54int poptParseArgvString(const char * s, int * argcPtr, const char *** argvPtr)
55{

Callers 5

parse_argumentsFunction · 0.85
mainFunction · 0.85
poptParseArgvStringFunction · 0.85
handleAliasFunction · 0.85
poptStuffArgsFunction · 0.85

Calls 1

stpcpyFunction · 0.85

Tested by

no test coverage detected