version 1.22, 2016/01/19 15:59:12 |
version 1.23, 2016/10/10 21:51:39 |
|
|
* Parse a command from a string. |
* Parse a command from a string. |
*/ |
*/ |
|
|
int cmd_string_getc(const char *, size_t *); |
static int cmd_string_getc(const char *, size_t *); |
void cmd_string_ungetc(size_t *); |
static void cmd_string_ungetc(size_t *); |
void cmd_string_copy(char **, char *, size_t *); |
static void cmd_string_copy(char **, char *, size_t *); |
char *cmd_string_string(const char *, size_t *, char, int); |
static char *cmd_string_string(const char *, size_t *, char, int); |
char *cmd_string_variable(const char *, size_t *); |
static char *cmd_string_variable(const char *, size_t *); |
char *cmd_string_expand_tilde(const char *, size_t *); |
static char *cmd_string_expand_tilde(const char *, size_t *); |
|
|
int |
static int |
cmd_string_getc(const char *s, size_t *p) |
cmd_string_getc(const char *s, size_t *p) |
{ |
{ |
const u_char *ucs = s; |
const u_char *ucs = s; |
|
|
return (ucs[(*p)++]); |
return (ucs[(*p)++]); |
} |
} |
|
|
void |
static void |
cmd_string_ungetc(size_t *p) |
cmd_string_ungetc(size_t *p) |
{ |
{ |
(*p)--; |
(*p)--; |
|
|
return (rval); |
return (rval); |
} |
} |
|
|
void |
static void |
cmd_string_copy(char **dst, char *src, size_t *len) |
cmd_string_copy(char **dst, char *src, size_t *len) |
{ |
{ |
size_t srclen; |
size_t srclen; |
|
|
free(src); |
free(src); |
} |
} |
|
|
char * |
static char * |
cmd_string_string(const char *s, size_t *p, char endch, int esc) |
cmd_string_string(const char *s, size_t *p, char endch, int esc) |
{ |
{ |
int ch; |
int ch; |
|
|
return (NULL); |
return (NULL); |
} |
} |
|
|
char * |
static char * |
cmd_string_variable(const char *s, size_t *p) |
cmd_string_variable(const char *s, size_t *p) |
{ |
{ |
int ch, fch; |
int ch, fch; |
|
|
return (NULL); |
return (NULL); |
} |
} |
|
|
char * |
static char * |
cmd_string_expand_tilde(const char *s, size_t *p) |
cmd_string_expand_tilde(const char *s, size_t *p) |
{ |
{ |
struct passwd *pw; |
struct passwd *pw; |
|
|
cp = user = xmalloc(strlen(s)); |
cp = user = xmalloc(strlen(s)); |
for (;;) { |
for (;;) { |
last = cmd_string_getc(s, p); |
last = cmd_string_getc(s, p); |
if (last == EOF || last == '/' || last == ' '|| last == '\t') |
if (last == EOF || |
|
last == '/' || |
|
last == ' '|| |
|
last == '\t') |
break; |
break; |
*cp++ = last; |
*cp++ = last; |
} |
} |