MCPcopy Index your code
hub / github.com/git/git / split_cmdline

Function split_cmdline

alias.c:126–180  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

124};
125
126int split_cmdline(char *cmdline, const char ***argv)
127{
128 size_t src, dst, count = 0, size = 16;
129 char quoted = 0;
130
131 ALLOC_ARRAY(*argv, size);
132
133 /* split alias_string */
134 (*argv)[count++] = cmdline;
135 for (src = dst = 0; cmdline[src];) {
136 char c = cmdline[src];
137 if (!quoted && isspace(c)) {
138 cmdline[dst++] = 0;
139 while (cmdline[++src]
140 && isspace(cmdline[src]))
141 ; /* skip */
142 ALLOC_GROW(*argv, count + 1, size);
143 (*argv)[count++] = cmdline + dst;
144 } else if (!quoted && (c == '\'' || c == '"')) {
145 quoted = c;
146 src++;
147 } else if (c == quoted) {
148 quoted = 0;
149 src++;
150 } else {
151 if (c == '\\' && quoted != '\'') {
152 src++;
153 c = cmdline[src];
154 if (!c) {
155 FREE_AND_NULL(*argv);
156 return -SPLIT_CMDLINE_BAD_ENDING;
157 }
158 }
159 cmdline[dst++] = c;
160 src++;
161 }
162 }
163
164 cmdline[dst] = 0;
165
166 if (quoted) {
167 FREE_AND_NULL(*argv);
168 return -SPLIT_CMDLINE_UNCLOSED_QUOTE;
169 }
170
171 if (count >= INT_MAX) {
172 FREE_AND_NULL(*argv);
173 return -SPLIT_CMDLINE_ARGC_OVERFLOW;
174 }
175
176 ALLOC_GROW(*argv, count + 1, size);
177 (*argv)[count] = NULL;
178
179 return count;
180}
181
182const char *split_cmdline_strerror(int split_cmdline_errno)
183{

Callers 9

determine_ssh_variantFunction · 0.85
run_shellFunction · 0.85
cmd_mainFunction · 0.85
parse_strategy_optsFunction · 0.85
handle_aliasFunction · 0.85
setup_pager_envFunction · 0.85
check_git_cmdFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected