diff options
author | midipix <writeonce@midipix.org> | 2024-03-23 03:27:01 +0000 |
---|---|---|
committer | midipix <writeonce@midipix.org> | 2024-03-23 03:27:01 +0000 |
commit | bbc13d492947ef58bf7901e42e1fbed0a5ac1eda (patch) | |
tree | 11d48ed45073e86f4ccf70e911f417f894d73151 /src/internal | |
parent | 41a8685b3f7beff9f2b7c5a2f7cf38fe7d5b0db2 (diff) | |
download | slibtool-bbc13d492947ef58bf7901e42e1fbed0a5ac1eda.tar.bz2 slibtool-bbc13d492947ef58bf7901e42e1fbed0a5ac1eda.tar.xz |
internals: added slbt_txtline_to_string_vector() by reusing existing code.
Diffstat (limited to 'src/internal')
-rw-r--r-- | src/internal/slibtool_txtline_impl.c | 67 | ||||
-rw-r--r-- | src/internal/slibtool_txtline_impl.h | 8 |
2 files changed, 75 insertions, 0 deletions
diff --git a/src/internal/slibtool_txtline_impl.c b/src/internal/slibtool_txtline_impl.c new file mode 100644 index 0000000..4c8f2ad --- /dev/null +++ b/src/internal/slibtool_txtline_impl.c @@ -0,0 +1,67 @@ +/*******************************************************************/ +/* slibtool: a strong libtool implementation, written in C */ +/* Copyright (C) 2016--2024 SysDeer Technologies, LLC */ +/* Released under the Standard MIT License; see COPYING.SLIBTOOL. */ +/*******************************************************************/ + +#include <string.h> +#include <stdlib.h> + +#include <slibtool/slibtool.h> +#include "slibtool_visibility_impl.h" + +slbt_hidden int slbt_txtline_to_string_vector(const char * txtline, char *** pargv) +{ + int argc; + char ** argv; + const char * ch; + const char * mark; + + if (!(ch = txtline)) + return 0; + + argc = 1; + + for (; *ch == ' '; ) + ch++; + + for (; *ch; ) { + if (*ch++ == ' ') { + argc++; + + for (; (*ch == ' '); ) + ch++; + } + } + + if (argc == 1) + return 0; + + if (!(*pargv = calloc(++argc,sizeof(char *)))) + return -1; + + for (ch=txtline; (*ch == ' '); ch++) + (void)0; + + argv = *pargv; + mark = ch; + + for (; *ch; ) { + if (*ch == ' ') { + if (!(*argv++ = strndup(mark,ch-mark))) + return -1; + + for (; (*ch == ' '); ) + ch++; + + mark = ch; + } else { + ch++; + } + } + + if (!(*argv++ = strndup(mark,ch-mark))) + return -1; + + return 0; +} diff --git a/src/internal/slibtool_txtline_impl.h b/src/internal/slibtool_txtline_impl.h new file mode 100644 index 0000000..2a647b1 --- /dev/null +++ b/src/internal/slibtool_txtline_impl.h @@ -0,0 +1,8 @@ +#ifndef SLIBTOOL_TXTLINE_IMPL_H +#define SLIBTOOL_TXTLINE_IMPL_H + +#include <slibtool/slibtool.h> + +int slbt_txtline_to_string_vector(const char *, char ***); + +#endif |