Skip to content

Commit d743cfd

Browse files
committed
add argv_prepend/argv_prependn
1 parent a9e57d5 commit d743cfd

File tree

2 files changed

+24
-0
lines changed

2 files changed

+24
-0
lines changed

include/tig/argv.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,8 @@ size_t argv_size(const char **argv);
3434
bool argv_append(const char ***argv, const char *arg);
3535
bool argv_appendn(const char ***argv, const char *arg, size_t arglen);
3636
bool argv_append_array(const char ***dst_argv, const char *src_argv[]);
37+
bool argv_prepend(const char ***argv, const char *arg);
38+
bool argv_prependn(const char ***argv, const char *arg, size_t arglen);
3739
bool argv_copy(const char ***dst, const char *src[]);
3840
bool argv_contains(const char **argv, const char *arg);
3941

src/argv.c

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -239,13 +239,35 @@ argv_appendn(const char ***argv, const char *arg, size_t arglen)
239239
return alloc != NULL;
240240
}
241241

242+
bool
243+
argv_prependn(const char ***argv, const char *arg, size_t arglen)
244+
{
245+
if (!argv_appendn(argv,arg,strlen(arg)))
246+
return false;
247+
248+
size_t last_i = argv_size(*argv) - 1;
249+
250+
if (last_i > 0) {
251+
const char *save = (*argv)[last_i];
252+
memmove(*argv + 1, *argv, last_i * sizeof(*argv));
253+
(*argv)[0] = save;
254+
}
255+
256+
return true;
257+
}
242258

243259
bool
244260
argv_append(const char ***argv, const char *arg)
245261
{
246262
return argv_appendn(argv, arg, strlen(arg));
247263
}
248264

265+
bool
266+
argv_prepend(const char ***argv, const char *arg)
267+
{
268+
return argv_prependn(argv, arg, strlen(arg));
269+
}
270+
249271
bool
250272
argv_append_array(const char ***dst_argv, const char *src_argv[])
251273
{

0 commit comments

Comments
 (0)