version 1.10, 2009/11/21 17:52:18 |
version 1.11, 2009/11/26 21:14:30 |
|
|
*/ |
*/ |
|
|
int cmd_string_getc(const char *, size_t *); |
int cmd_string_getc(const char *, size_t *); |
void cmd_string_ungetc(const char *, size_t *); |
void cmd_string_ungetc(size_t *); |
char *cmd_string_string(const char *, size_t *, char, int); |
char *cmd_string_string(const char *, size_t *, char, int); |
char *cmd_string_variable(const char *, size_t *); |
char *cmd_string_variable(const char *, size_t *); |
char *cmd_string_expand_tilde(const char *, size_t *); |
char *cmd_string_expand_tilde(const char *, size_t *); |
|
|
int |
int |
cmd_string_getc(const char *s, size_t *p) |
cmd_string_getc(const char *s, size_t *p) |
{ |
{ |
if (s[*p] == '\0') |
const u_char *ucs = s; |
|
|
|
if (ucs[*p] == '\0') |
return (EOF); |
return (EOF); |
return (s[(*p)++]); |
return (ucs[(*p)++]); |
} |
} |
|
|
void |
void |
cmd_string_ungetc(unused const char *s, size_t *p) |
cmd_string_ungetc(size_t *p) |
{ |
{ |
(*p)--; |
(*p)--; |
} |
} |
|
|
if (fch == '{' && ch != '}') |
if (fch == '{' && ch != '}') |
goto error; |
goto error; |
if (ch != EOF && fch != '{') |
if (ch != EOF && fch != '{') |
cmd_string_ungetc(s, p); /* ch */ |
cmd_string_ungetc(p); /* ch */ |
|
|
buf = xrealloc(buf, 1, len + 1); |
buf = xrealloc(buf, 1, len + 1); |
buf[len] = '\0'; |
buf[len] = '\0'; |
|
|
home = pw->pw_dir; |
home = pw->pw_dir; |
} |
} |
} else { |
} else { |
cmd_string_ungetc(s, p); |
cmd_string_ungetc(p); |
if ((username = cmd_string_string(s, p, '/', 0)) == NULL) |
if ((username = cmd_string_string(s, p, '/', 0)) == NULL) |
return (NULL); |
return (NULL); |
if ((pw = getpwnam(username)) != NULL) |
if ((pw = getpwnam(username)) != NULL) |