summaryrefslogtreecommitdiffabout
path: root/include
authorSergey Poznyakoff <gray@gnu.org>2019-07-10 07:09:45 (GMT)
committer Sergey Poznyakoff <gray@gnu.org>2019-07-10 07:09:45 (GMT)
commitd73567ebdf054eb6de6dea72250ef164e4c50eec (patch) (side-by-side diff)
treec8d48504b02786e13215923b3e2654fe42275f0d /include
parentee35adccec058a5a8cc62f5030b9a925168236d6 (diff)
downloadgrecs-d73567ebdf054eb6de6dea72250ef164e4c50eec.tar.gz
grecs-d73567ebdf054eb6de6dea72250ef164e4c50eec.tar.bz2
Import wordsplit as a submodule
* .gitmodules: New module: wordsplit * Makefile.am: Distribute wordsplit files. * am/grecs.m4 (GRECS_INCLUDES): Add wordsplit directory * doc/Makefile.am (dist_man_MANS): Distribute wordsplit/wordsplit.3 * doc/wordsplit.3: Remove. * include/Makefile.am (GRECS_HDR): Add wordsplit/wordsplit. * include/wordsplit.h: Remove. * src/Make-inst.am: Define nodist_libgrecs_la_SOURCES. * src/Make-shared.am: Likewise. * src/Make-static.am: Define nodist_libgrecs_a_SOURCES. * src/Make.am (GRECS_SRC): Remove wordsplit.c (NODIST_GRECS_SRC): Define to wordsplit.c (VPATH): Add the wordsplit directory. * src/wordsplit.c: Remove. * tests/wordsplit.at: Remove. * tests/wsp.c: Remove. * tests/Makefile.am: Build separate testsuite for wordsplit. Use VPATH to build wsp. * tests/.gitignore: Update.
Diffstat (limited to 'include') (more/less context) (ignore whitespace changes)
-rw-r--r--include/Makefile.am2
-rw-r--r--include/wordsplit.h306
2 files changed, 1 insertions, 307 deletions
diff --git a/include/Makefile.am b/include/Makefile.am
index 6a017a3..5934d40 100644
--- a/include/Makefile.am
+++ b/include/Makefile.am
@@ -1,5 +1,5 @@
SUBDIRS = grecs
-GRECS_HDR = grecs.h wordsplit.h
+GRECS_HDR = grecs.h $(top_srcdir)/@GRECS_SUBDIR@/wordsplit/wordsplit.h
if GRECS_COND_BUILD_INSTALL
include_HEADERS = $(GRECS_HDR)
diff --git a/include/wordsplit.h b/include/wordsplit.h
deleted file mode 100644
index 3451979..0000000
--- a/include/wordsplit.h
+++ b/dev/null
@@ -1,306 +0,0 @@
-/* wordsplit - a word splitter
- Copyright (C) 2009-2019 Sergey Poznyakoff
-
- 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/>. */
-
-#ifndef __WORDSPLIT_H
-#define __WORDSPLIT_H
-
-#include <stddef.h>
-
-typedef struct wordsplit wordsplit_t;
-
-/* Structure used to direct the splitting. Members marked with [Input]
- can be defined before calling wordsplit(), those marked with [Output]
- provide return values when the function returns. If neither mark is
- used, the member is internal and must not be used by the caller.
-
- In the comments below, the identifiers in parentheses indicate bits that
- must be set (or unset, if starting with !) in ws_flags (if starting with
- WRDSF_) or ws_options (if starting with WRDSO_) to initialize or use the
- given member.
-
- If not redefined explicitly, most of them are set to some reasonable
- default value upon entry to wordsplit(). */
-struct wordsplit
-{
- size_t ws_wordc; /* [Output] Number of words in ws_wordv. */
- char **ws_wordv; /* [Output] Array of parsed out words. */
- size_t ws_offs; /* [Input] (WRDSF_DOOFFS) Number of initial
- elements in ws_wordv to fill with NULLs. */
- size_t ws_wordn; /* Number of elements ws_wordv can accomodate. */
- int ws_flags; /* [Input] Flags passed to wordsplit. */
- int ws_options; /* [Input] (WRDSF_OPTIONS)
- Additional options. */
- size_t ws_maxwords; /* [Input] (WRDSO_MAXWORDS) Return at most that
- many words */
- size_t ws_wordi; /* [Output] (WRDSF_INCREMENTAL) Total number of
- words returned so far */
-
- const char *ws_delim; /* [Input] (WRDSF_DELIM) Word delimiters. */
- const char *ws_comment; /* [Input] (WRDSF_COMMENT) Comment characters. */
- const char *ws_escape[2]; /* [Input] (WRDSF_ESCAPE) Characters to be escaped
- with backslash. */
- void (*ws_alloc_die) (wordsplit_t *wsp);
- /* [Input] (WRDSF_ALLOC_DIE) Function called when
- out of memory. Must not return. */
- void (*ws_error) (const char *, ...)
- __attribute__ ((__format__ (__printf__, 1, 2)));
- /* [Input] (WRDSF_ERROR) Function used for error
- reporting */
- void (*ws_debug) (const char *, ...)
- __attribute__ ((__format__ (__printf__, 1, 2)));
- /* [Input] (WRDSF_DEBUG) Function used for debug
- output. */
- const char **ws_env; /* [Input] (WRDSF_ENV, !WRDSF_NOVAR) Array of
- environment variables. */
-
- /* Temporary storage for environment variables. It is initialized
- upon first assignment which occurs during the parsing process
- (e.g. ${x:=2}). When this happens, all variables from ws_env are
- moved to ws_envbuf first, and the ws_envbuf address is assigned
- to ws_env. From this moment on, all variable expansions are served
- from ws_envbuf. */
- char **ws_envbuf; /* Storage for variables */
- size_t ws_envidx; /* Index of first free slot */
- size_t ws_envsiz; /* Size of the ws_envbuf array */
-
- char const **ws_paramv; /* [WRDSO_PARAMV] User-supplied positional
- parameters */
- size_t ws_paramc; /* Number of positional parameters */
-
- /* Temporary storage for parameters. Works similarly to ws_enbuf.
- */
- char **ws_parambuf;
- size_t ws_paramidx;
- size_t ws_paramsiz;
-
- int (*ws_getvar) (char **ret, const char *var, size_t len, void *clos);
- /* [Input] (WRDSF_GETVAR, !WRDSF_NOVAR) Looks up
- the name VAR (LEN bytes long) in the table of
- variables and if found returns in memory
- location pointed to by RET the value of that
- variable. Returns WRDSE_OK (0) on success,
- and an error code (see WRDSE_* defines below)
- on error. User-specific errors can be returned
- by storing the error diagnostic string in RET
- and returning WRDSE_USERERR.
- Whatever is stored in RET, it must be allocated
- using malloc(3). */
- void *ws_closure; /* [Input] (WRDSF_CLOSURE) Passed as the CLOS
- argument to ws_getvar and ws_command. */
- int (*ws_command) (char **ret, const char *cmd, size_t len, char **argv,
- void *clos);
- /* [Input] (!WRDSF_NOCMD) Returns in the memory
- location pointed to by RET the expansion of
- the command CMD (LEN bytes long). On input,
- ARGV contains CMD split out to words.
-
- See ws_getvar for a discussion of possible
- return values. */
-
- const char *ws_input; /* Input string (the S argument to wordsplit). */
- size_t ws_len; /* Length of ws_input. */
- size_t ws_endp; /* Points past the last processed byte in
- ws_input. */
- int ws_errno; /* [Output] Error code, if an error occurred. */
- char *ws_usererr; /* Points to textual description of
- the error, if ws_errno is WRDSE_USERERR. Must
- be allocated with malloc(3). */
- char *ws_errctx; /* Context in which the error occurred:
- For WRDSE_UNDEF - name of the undefined variable,
- For WRDSE_GLOBERR - pattern that caused error.
- */
- struct wordsplit_node *ws_head, *ws_tail;
- /* Doubly-linked list of parsed out nodes. */
- char ws_sep[2]; /* Temporary storage used during splitting */
- int ws_lvl; /* Invocation nesting level. */
-};
-
-/* Initial size for ws_env, if allocated automatically */
-#define WORDSPLIT_ENV_INIT 16
-
-/* Wordsplit flags. */
-/* Append the words found to the array resulting from a previous
- call. */
-#define WRDSF_APPEND 0x00000001
-/* Insert ws_offs initial NULLs in the array ws_wordv.
- (These are not counted in the returned ws_wordc.) */
-#define WRDSF_DOOFFS 0x00000002
-/* Don't do command substitution. */
-#define WRDSF_NOCMD 0x00000004
-/* The parameter p resulted from a previous call to
- wordsplit(), and wordsplit_free() was not called. Reuse the
- allocated storage. */
-#define WRDSF_REUSE 0x00000008
-/* Print errors */
-#define WRDSF_SHOWERR 0x00000010
-/* Consider it an error if an undefined variable is expanded. */
-#define WRDSF_UNDEF 0x00000020
-/* Don't do variable expansion. */
-#define WRDSF_NOVAR 0x00000040
-/* Abort on ENOMEM error */
-#define WRDSF_ENOMEMABRT 0x00000080
-/* Trim off any leading and trailind whitespace */
-#define WRDSF_WS 0x00000100
-/* Handle single quotes */
-#define WRDSF_SQUOTE 0x00000200
-/* Handle double quotes */
-#define WRDSF_DQUOTE 0x00000400
-/* Handle single and double quotes */
-#define WRDSF_QUOTE (WRDSF_SQUOTE|WRDSF_DQUOTE)
-/* Replace each input sequence of repeated delimiters with a single
- delimiter */
-#define WRDSF_SQUEEZE_DELIMS 0x00000800
-/* Return delimiters */
-#define WRDSF_RETURN_DELIMS 0x00001000
-/* Treat sed expressions as words */
-#define WRDSF_SED_EXPR 0x00002000
-/* ws_delim field is initialized */
-#define WRDSF_DELIM 0x00004000
-/* ws_comment field is initialized */
-#define WRDSF_COMMENT 0x00008000
-/* ws_alloc_die field is initialized */
-#define WRDSF_ALLOC_DIE 0x00010000
-/* ws_error field is initialized */
-#define WRDSF_ERROR 0x00020000
-/* ws_debug field is initialized */
-#define WRDSF_DEBUG 0x00040000
-/* ws_env field is initialized */
-#define WRDSF_ENV 0x00080000
-/* ws_getvar field is initialized */
-#define WRDSF_GETVAR 0x00100000
-/* enable debugging */
-#define WRDSF_SHOWDBG 0x00200000
-/* Don't split input into words. Useful for side effects. */
-#define WRDSF_NOSPLIT 0x00400000
-/* Keep undefined variables in place, instead of expanding them to
- empty strings. */
-#define WRDSF_KEEPUNDEF 0x00800000
-/* Warn about undefined variables */
-#define WRDSF_WARNUNDEF 0x01000000
-/* Handle C escapes */
-#define WRDSF_CESCAPES 0x02000000
-/* ws_closure is set */
-#define WRDSF_CLOSURE 0x04000000
-/* ws_env is a Key/Value environment, i.e. the value of a variable is
- stored in the element that follows its name. */
-#define WRDSF_ENV_KV 0x08000000
-/* ws_escape is set */
-#define WRDSF_ESCAPE 0x10000000
-/* Incremental mode */
-#define WRDSF_INCREMENTAL 0x20000000
-/* Perform pathname and tilde expansion */
-#define WRDSF_PATHEXPAND 0x40000000
-/* ws_options is initialized */
-#define WRDSF_OPTIONS 0x80000000
-
-#define WRDSF_DEFFLAGS \
- (WRDSF_NOVAR | WRDSF_NOCMD | \
- WRDSF_QUOTE | WRDSF_SQUEEZE_DELIMS | WRDSF_CESCAPES)
-
-/* Remove the word that produces empty string after path expansion */
-#define WRDSO_NULLGLOB 0x00000001
-/* Print error message if path expansion produces empty string */
-#define WRDSO_FAILGLOB 0x00000002
-/* Allow a leading period to be matched by metacharacters. */
-#define WRDSO_DOTGLOB 0x00000004
-/* Prefer ws_getvar over lookup in ws_env, if both are supplied */
-#define WRDSO_GETVARPREF 0x00000008
-/* Keep backslash in unrecognized escape sequences in words */
-#define WRDSO_BSKEEP_WORD 0x00000010
-/* Handle octal escapes in words */
-#define WRDSO_OESC_WORD 0x00000020
-/* Handle hex escapes in words */
-#define WRDSO_XESC_WORD 0x00000040
-
-/* ws_maxwords field is initialized */
-#define WRDSO_MAXWORDS 0x00000080
-
-/* Keep backslash in unrecognized escape sequences in quoted strings */
-#define WRDSO_BSKEEP_QUOTE 0x00000100
-/* Handle octal escapes in quoted strings */
-#define WRDSO_OESC_QUOTE 0x00000200
-/* Handle hex escapes in quoted strings */
-#define WRDSO_XESC_QUOTE 0x00000400
-/* Unused: 0x00000800 */
-/* Don't split variable references, even if they contain whitespace
- (e.g. ${VAR:-foo bar}) */
-#define WRDSO_NOVARSPLIT 0x00001000
-/* Don't split commands, even containing whitespace, e.g.
- $(echo foo bar) */
-#define WRDSO_NOCMDSPLIT 0x00002000
-
-/* Enable positional parameters */
-#define WRDSO_PARAMV 0x00004000
-/* Enable negative positional indices (${-1} is the last positional
- parameter) */
-#define WRDSO_PARAM_NEGIDX 0x00008000
-
-#define WRDSO_BSKEEP WRDSO_BSKEEP_WORD
-#define WRDSO_OESC WRDSO_OESC_WORD
-#define WRDSO_XESC WRDSO_XESC_WORD
-
-/* Indices into ws_escape */
-#define WRDSX_WORD 0
-#define WRDSX_QUOTE 1
-
-/* Set escape option F in WS for words (Q==0) or quoted strings (Q==1) */
-#define WRDSO_ESC_SET(ws,q,f) ((ws)->ws_options |= ((f) << 4*(q)))
-/* Test WS for escape option F for words (Q==0) or quoted strings (Q==1) */
-#define WRDSO_ESC_TEST(ws,q,f) ((ws)->ws_options & ((f) << 4*(q)))
-
-#define WRDSE_OK 0
-#define WRDSE_EOF WRDSE_OK
-#define WRDSE_QUOTE 1
-#define WRDSE_NOSPACE 2
-#define WRDSE_USAGE 3
-#define WRDSE_CBRACE 4
-#define WRDSE_UNDEF 5
-#define WRDSE_NOINPUT 6
-#define WRDSE_PAREN 7
-#define WRDSE_GLOBERR 8
-#define WRDSE_USERERR 9
-#define WRDSE_BADPARAM 10
-
-int wordsplit (const char *s, wordsplit_t *ws, int flags);
-int wordsplit_len (const char *s, size_t len, wordsplit_t *ws, int flags);
-void wordsplit_free (wordsplit_t *ws);
-void wordsplit_free_words (wordsplit_t *ws);
-void wordsplit_free_envbuf (wordsplit_t *ws);
-void wordsplit_free_parambuf (struct wordsplit *ws);
-int wordsplit_get_words (wordsplit_t *ws, size_t *wordc, char ***wordv);
-
-static inline void wordsplit_getwords (wordsplit_t *ws, size_t *wordc, char ***wordv)
- __attribute__ ((deprecated));
-
-static inline void
-wordsplit_getwords (wordsplit_t *ws, size_t *wordc, char ***wordv)
-{
- wordsplit_get_words (ws, wordc, wordv);
-}
-
-int wordsplit_append (wordsplit_t *wsp, int argc, char **argv);
-
-int wordsplit_c_unquote_char (int c);
-int wordsplit_c_quote_char (int c);
-size_t wordsplit_c_quoted_length (const char *str, int quote_hex, int *quote);
-void wordsplit_c_quote_copy (char *dst, const char *src, int quote_hex);
-
-void wordsplit_perror (wordsplit_t *ws);
-const char *wordsplit_strerror (wordsplit_t *ws);
-
-void wordsplit_clearerr (wordsplit_t *ws);
-
-#endif

Return to:

Send suggestions and report system problems to the System administrator.