summaryrefslogtreecommitdiff
path: root/lib/argcv.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/argcv.c')
-rw-r--r--lib/argcv.c211
1 files changed, 0 insertions, 211 deletions
diff --git a/lib/argcv.c b/lib/argcv.c
deleted file mode 100644
index 291f5c44d..000000000
--- a/lib/argcv.c
+++ /dev/null
@@ -1,211 +0,0 @@
-/* argcv.c - simple functions for parsing input based on whitespace
- Copyright (C) 1999, 2000, 2001 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 2, 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, write to the Free Software
- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
-
-#include <ctype.h>
-
-#include "argcv.h"
-
-/*
- * takes a string and splits it into several strings, breaking at ' '
- * command is the string to split
- * the number of strings is placed into argc
- * the split strings are put into argv
- * returns 0 on success, nonzero on failure
- */
-
-#define isws(c) ((c)==' '||(c)=='\t'||(c)=='\n')
-#define isdelim(c,delim) ((c)=='"'||strchr(delim,(c))!=NULL)
-
-static int
-argcv_scan (int len, const char *command, const char *delim, const char* cmnt,
- int *start, int *end, int *save)
-{
- int i = 0;
-
- for (;;)
- {
- i = *save;
-
- if (i >= len)
- return i + 1;
-
- /* Skip initial whitespace */
- while (i < len && isws (command[i]))
- i++;
- *start = i;
-
- switch (command[i])
- {
- case '"':
- case '\'':
- while (++i < len && command[i] != command[*start])
- ;
- if (i < len) /* found matching quote */
- break;
- /*FALLTHRU*/ default:
- if (isdelim (command[i], delim))
- break;
- /* Skip until next whitespace character or end of line */
- while (++i < len &&
- !(isws (command[i]) || isdelim (command[i], delim)))
- ;
- i--;
- break;
- }
-
- *end = i;
- *save = i + 1;
-
- /* If we have a token, and it starts with a comment character, skip
- to the newline and restart the token search. */
- if (*save <= len)
- {
- if (cmnt && strchr (cmnt, command[*start]) != NULL)
- {
- i = *save;
- while (i < len && command[i] != '\n')
- i++;
-
- *save = i;
- continue;
- }
- }
- break;
- }
- return *save;
-}
-
-int
-argcv_get (const char *command, const char *delim, const char* cmnt,
- int *argc, char ***argv)
-{
- int len = strlen (command);
- int i = 0;
- int start, end, save;
-
- *argv = NULL;
-
- /* Count number of arguments */
- *argc = 0;
- save = 0;
-
- while (argcv_scan (len, command, delim, cmnt, &start, &end, &save) <= len)
- (*argc)++;
-
- *argv = calloc ((*argc + 1), sizeof (char *));
-
- i = 0;
- save = 0;
- for (i = 0; i < *argc; i++)
- {
- int n;
- argcv_scan (len, command, delim, cmnt, &start, &end, &save);
-
- /* FIXME: this is the right place to do unescaping as well
- as stripping of quotes. */
- if (command[start] == '"' && command[end] == '"')
- {
- start++;
- end--;
- }
- else if (command[start] == '\'' && command[end] == '\'')
- {
- start++;
- end--;
- }
- n = end - start + 1;
- (*argv)[i] = calloc (n+1, sizeof (char));
- if ((*argv)[i] == NULL)
- return 1;
- memcpy ((*argv)[i], &command[start], n);
- (*argv)[i][n] = 0;
- }
- (*argv)[i] = NULL;
- return 0;
-}
-
-/*
- * frees all elements of an argv array
- * argc is the number of elements
- * argv is the array
- */
-int
-argcv_free (int argc, char **argv)
-{
- while (--argc >= 0)
- if (argv[argc])
- free (argv[argc]);
- free (argv);
- return 1;
-}
-
-/* Take a argv an make string separated by ' '. */
-
-int
-argcv_string (int argc, char **argv, char **pstring)
-{
- int i;
- size_t len;
- char *buffer;
-
- /* No need. */
- if (pstring == NULL)
- return 1;
-
- buffer = malloc (1);
- if (buffer == NULL)
- return 1;
- *buffer = '\0';
-
- for (len = i = 0; i < argc; i++)
- {
- len += strlen (argv[i]) + 2;
- buffer = realloc (buffer, len);
- if (buffer == NULL)
- return 1;
- if (i != 0)
- strcat (buffer, " ");
- strcat (buffer, argv[i]);
- }
-
- /* Strip off trailing space. */
- if (*buffer != '\0')
- {
- while (buffer[strlen (buffer) - 1] == ' ')
- {
- buffer[strlen (buffer) - 1] = '\0';
- }
- }
- if (pstring)
- *pstring = buffer;
- return 0;
-}
-
-#if 0
-char *command = "set prompt=\"& \" ";
-
-main(int xargc, char **xargv)
-{
- int i, argc;
- char **argv;
-
- argcv_get (xargv[1] ? xargv[1]:command, "=", "#", &argc, &argv);
- printf ("%d args:\n", argc);
- for (i = 0; i < argc; i++)
- printf ("%s\n", argv[i]);
-}
-#endif

Return to:

Send suggestions and report system problems to the System administrator.