summaryrefslogtreecommitdiff
path: root/lib/splitstring.h
diff options
context:
space:
mode:
authorJames Youngman <jay@gnu.org>2011-06-13 23:29:50 +0100
committerJames Youngman <jay@gnu.org>2011-06-13 23:54:48 +0100
commitfce18654244a4ad55ed51f5e8adae1db5ff7555b (patch)
treed51f86a09f7aa71b3a894895c389e3c644121e8a /lib/splitstring.h
parentb43a69932d4234e3d49cf22d7a756abfc2418132 (diff)
downloadfindutils-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.h40
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);