diff -Naur sc-im-0.7.0/src/cmds_command.c sc-im-0.7.0+iPhone/src/cmds_command.c --- sc-im-0.7.0/src/cmds_command.c 2017-12-13 17:48:59.000000000 +0000 +++ sc-im-0.7.0+iPhone/src/cmds_command.c 2019-04-17 14:23:10.309275806 +0000 @@ -46,7 +46,7 @@ #include #include #include // for isprint() -#include +#include "wordexp.h" #include "sc.h" // for rescol #include "conf.h" #include "cmds_command.h" diff -Naur sc-im-0.7.0/src/file.c sc-im-0.7.0+iPhone/src/file.c --- sc-im-0.7.0/src/file.c 2017-12-13 17:48:59.000000000 +0000 +++ sc-im-0.7.0+iPhone/src/file.c 2019-04-17 14:22:52.813269422 +0000 @@ -53,7 +53,7 @@ #include #include #include -#include +#include "wordexp.h" #include "conf.h" #include "maps.h" diff -Naur sc-im-0.7.0/src/main.c sc-im-0.7.0+iPhone/src/main.c --- sc-im-0.7.0/src/main.c 2017-12-13 17:48:59.000000000 +0000 +++ sc-im-0.7.0+iPhone/src/main.c 2019-04-17 14:22:24.025259625 +0000 @@ -60,7 +60,7 @@ #include // for F_GETFL O_NONBLOCK F_SETFL #include #include -#include +#include "wordexp.h" #include // for ioctl #include "main.h" diff -Naur sc-im-0.7.0/src/wordexp.c sc-im-0.7.0+iPhone/src/wordexp.c --- sc-im-0.7.0/src/wordexp.c 1970-01-01 00:00:00.000000000 +0000 +++ sc-im-0.7.0+iPhone/src/wordexp.c 2019-04-17 14:25:52.777348253 +0000 @@ -0,0 +1,209 @@ +/* + * Copyright 1994, University Corporation for Atmospheric Research + * See ../COPYRIGHT file for copying and redistribution conditions. + */ +/* + * Reproduction of ../COPYRIGHT file: + * + ********************************************************************* + +Copyright 1995-2002 University Corporation for Atmospheric Research/Unidata + +Portions of this software were developed by the Unidata Program at the +University Corporation for Atmospheric Research. + +Access and use of this software shall impose the following obligations +and understandings on the user. The user is granted the right, without +any fee or cost, to use, copy, modify, alter, enhance and distribute +this software, and any derivative works thereof, and its supporting +documentation for any purpose whatsoever, provided that this entire +notice appears in all copies of the software, derivative works and +supporting documentation. Further, UCAR requests that the user credit +UCAR/Unidata in any publications that result from the use of this +software or in any product that includes this software. The names UCAR +and/or Unidata, however, may not be used in any advertising or publicity +to endorse or promote any products or commercial entity unless specific +written permission is obtained from UCAR/Unidata. The user also +understands that UCAR/Unidata is not obligated to provide the user with +any support, consulting, training or assistance of any kind with regard +to the use, operation and performance of this software nor to provide +the user with any updates, revisions, new versions or "bug fixes." + +THIS SOFTWARE IS PROVIDED BY UCAR/UNIDATA "AS IS" AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL UCAR/UNIDATA BE LIABLE FOR ANY SPECIAL, +INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING +FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, +NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION +WITH THE ACCESS, USE OR PERFORMANCE OF THIS SOFTWARE. + + ********************************************************************* + */ + +/* $Id: wordexp.c,v 1.13 2002/12/26 16:46:46 steve Exp $ */ + +#include +#include +#include + +#include "wordexp.h" + + + +/* + * Translate return value from wordexp() into a string + */ +const char * +s_wrde_err(int wrde_err) +{ + switch(wrde_err) { + case 0: return "No Error"; + case WRDE_BADCHAR: return "WRDE_BADCHAR"; + case WRDE_BADVAL: return "WRDE_BADVAL"; + case WRDE_CMDSUB: return "WRDE_CMDSUB"; + case WRDE_NOSPACE: return "WRDE_NOSPACE"; + case WRDE_SYNTAX: return "WRDE_SYNTAX"; + } + /* default */ + return "Unknown Error"; +} + + +/*ARGSUSED*/ +int +wordexp(const char *words, wordexp_t *pwordexp, int flags) +{ + const char *ccp; + char **argv; + const char *buf; + size_t argc; + enum states {ARGSTART, IN_QUOTE, NOT_IN_QUOTE, DONE}; + enum classes {EOS, SPACE, QUOTE, OTHER}; + int state = ARGSTART; + char *argbuf; + const char *sp; + char *dp; + int status = 0; + + /* devour leading white space */ + for(ccp = words; *ccp != 0 && isspace(*ccp); ) + ccp++; + /* skip comments */ + if(*ccp == '#') + { + pwordexp->we_wordc = 0; + pwordexp->we_wordv = NULL; + return 0; + } + +/* If every other character was a space ... */ +#define MAXNARGS(str) ((strlen(str) +1)/2 +1) + argv = (char **)calloc(MAXNARGS(ccp), sizeof(char *)); + if(argv == NULL) + return WRDE_NOSPACE; + + buf = ccp; + + argbuf = malloc(strlen(words)+1); /* where each arg is built */ + if (argbuf == NULL) + { + free(argv); + return WRDE_NOSPACE; + } + + sp = buf; + dp = argbuf; + argc = 0; + while(state != DONE) + { + int class; + + if (*sp == 0) + class = EOS; + else if (isspace(*sp)) + class = SPACE; + else if (*sp == '"') + class = QUOTE; + else + class = OTHER; + switch (state) { + case ARGSTART: + switch(class) { + case EOS: + state = DONE; + break; + case SPACE: + sp++; + break; + case QUOTE: + sp++; + state = IN_QUOTE; + break; + case OTHER: + *dp++ = *sp++; + state = NOT_IN_QUOTE; + break; + } + break; + case IN_QUOTE: + switch(class) { + case EOS: /* unmatched quote */ + state = DONE; + status = WRDE_SYNTAX; + break; + case QUOTE: + sp++; + state = NOT_IN_QUOTE; + break; + case SPACE: + case OTHER: + *dp++ = *sp++; + break; + } + break; + case NOT_IN_QUOTE: + switch(class) { + case EOS: + *dp = 0; + dp = argbuf; + argv[argc++] = strdup(argbuf); + state = DONE; + break; + case SPACE: + *dp = 0; + dp = argbuf; + argv[argc++] = strdup(argbuf); + sp++; + state = ARGSTART; + break; + case QUOTE: + sp++; + state = IN_QUOTE; + break; + case OTHER: + *dp++ = *sp++; + break; + } + break; + } + } + argv[argc] = NULL; + + pwordexp->we_wordc = argc; + pwordexp->we_wordv = argv; + + free(argbuf); + + return status; +} + +void +wordfree(wordexp_t *pwordexp) +{ + if(pwordexp == NULL || pwordexp->we_wordv == NULL) + return; + if(*pwordexp->we_wordv) + free(*pwordexp->we_wordv); + free(pwordexp->we_wordv); +} diff -Naur sc-im-0.7.0/src/wordexp.h sc-im-0.7.0+iPhone/src/wordexp.h --- sc-im-0.7.0/src/wordexp.h 1970-01-01 00:00:00.000000000 +0000 +++ sc-im-0.7.0+iPhone/src/wordexp.h 2019-04-17 14:24:09.137299413 +0000 @@ -0,0 +1,85 @@ +/* + * Copyright 1994, University Corporation for Atmospheric Research + * See ../COPYRIGHT file for copying and redistribution conditions. + */ +/* + * Reproduction of ../COPYRIGHT file: + * + ********************************************************************* + +Copyright 1995-2002 University Corporation for Atmospheric Research/Unidata + +Portions of this software were developed by the Unidata Program at the +University Corporation for Atmospheric Research. + +Access and use of this software shall impose the following obligations +and understandings on the user. The user is granted the right, without +any fee or cost, to use, copy, modify, alter, enhance and distribute +this software, and any derivative works thereof, and its supporting +documentation for any purpose whatsoever, provided that this entire +notice appears in all copies of the software, derivative works and +supporting documentation. Further, UCAR requests that the user credit +UCAR/Unidata in any publications that result from the use of this +software or in any product that includes this software. The names UCAR +and/or Unidata, however, may not be used in any advertising or publicity +to endorse or promote any products or commercial entity unless specific +written permission is obtained from UCAR/Unidata. The user also +understands that UCAR/Unidata is not obligated to provide the user with +any support, consulting, training or assistance of any kind with regard +to the use, operation and performance of this software nor to provide +the user with any updates, revisions, new versions or "bug fixes." + +THIS SOFTWARE IS PROVIDED BY UCAR/UNIDATA "AS IS" AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL UCAR/UNIDATA BE LIABLE FOR ANY SPECIAL, +INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING +FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, +NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION +WITH THE ACCESS, USE OR PERFORMANCE OF THIS SOFTWARE. + + ********************************************************************* + * + */ + +/* $Id: wordexp.h,v 1.5 1994/05/12 20:46:40 davis Exp $ */ +#ifndef _WORDEXP_H +#define _WORDEXP_H + +#include +#include <_types.h> +#include +#include + +typedef struct { + size_t we_wordc; + char **we_wordv; + size_t we_offs; +} wordexp_t; + +/* wordexp() flags Argument */ +#define WRDE_APPEND 0x01 +#define WRDE_DOOFFS 0x02 +#define WRDE_NOCMD 0x04 +#define WRDE_REUSE 0x08 +#define WRDE_SHOWERR 0x10 +#define WRDE_UNDEF 0x20 + +/* + * wordexp() Return Values + */ +/* required */ +#define WRDE_BADCHAR 1 +#define WRDE_BADVAL 2 +#define WRDE_CMDSUB 3 +#define WRDE_NOSPACE 4 +#define WRDE_NOSYS 5 +#define WRDE_SYNTAX 6 + + +__BEGIN_DECLS +int wordexp(const char * __restrict, wordexp_t * __restrict, int); +void wordfree(wordexp_t *); +__END_DECLS + +#endif /* _WORDEXP_H */