diff options
author | James Youngman <jay@gnu.org> | 2011-06-13 23:29:50 +0100 |
---|---|---|
committer | James Youngman <jay@gnu.org> | 2011-06-13 23:54:48 +0100 |
commit | fce18654244a4ad55ed51f5e8adae1db5ff7555b (patch) | |
tree | d51f86a09f7aa71b3a894895c389e3c644121e8a /lib/splitstring.h | |
parent | b43a69932d4234e3d49cf22d7a756abfc2418132 (diff) | |
download | findutils-fce18654244a4ad55ed51f5e8adae1db5ff7555b.tar.gz |
Split strings into fields nondestructively.
* lib/splitstring.c: New file; defines splitstring(), which will
non-destructively locate character-separated fields in a string.
* lib/splitstring.h: New file; declares splitstring.
* lib/test_splitstring.c: New file; unit test for splitstring.c.
* lib/nextelem.c: Delete (obsoleted by splitstring.c).
* lib/nextelem.h: Delete (obsoleted by splitstring.h).
* lib/Makefile.am (libfind_a_SOURCES): Add splitstring.c,
splitstring.c. Remove nextelem.c, nextelem.h.
(check_PROGRAMS): Add test_splitstring.
(TESTS): Add test_splitstring.
(test_splitstring_SOURCES): Sources for the
test_splitstring unit test.
* locate/locate.c: Include splitstring.h rather than nextelem.h.
(dolocate): Use splitstring rather than next_element. In places
where we need a nul-terminated string, use strndup() to create it.
Convert some space-tab sequences to regular spacing.
* find/parser.c: Include splitstring.h rather than nextelem.h.
(check_path_safety): Use splitstring rather than next_element.
* import-gnulib.config (modules): Depend on the module strndup.
* cfg.mk: Exempt lib/test_splitstring.c from calling
bindtextdomain or set_program_name.
Diffstat (limited to 'lib/splitstring.h')
-rw-r--r-- | lib/splitstring.h | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/lib/splitstring.h b/lib/splitstring.h new file mode 100644 index 00000000..c91f7e75 --- /dev/null +++ b/lib/splitstring.h @@ -0,0 +1,40 @@ +/* splitstring.h -- split a const string into fields. + Copyright (C) 2011 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. +*/ +/* + * Written by James Youngman. + */ + +/* Split a string into fields. The string is never modified. + * + * A false return value indicates that there are no more fields. + * Otherwise the next field is at the poisition indicated by *POS and + * has length *LEN. + * + * Set FIRST to true only on the first call for any given value of s. + * *POS and *LEN do not need to be initialised in this case. + * On subsequent calls, these values should be left at the values + * set by the last call. + * + * Any character in SEPARATORS is taken to be a field separator. + * Consecutive field separators are taken to indicate the presence of + * an empty field. + */ +#include <stdbool.h> +#include <stddef.h> + +bool splitstring(const char *s, const char *separators, + bool first, size_t *pos, size_t *len); |