diff options
-rw-r--r-- | rsh.c | 46 |
1 files changed, 5 insertions, 41 deletions
@@ -1,52 +1,16 @@ -#include "rsh.h" - #include <string.h> #include <sys/types.h> #include <sys/socket.h> +#include "rsh.h" +#include "quote.h" #include "cache.h" #define COMMAND_SIZE 4096 /* - * Write a shell-quoted version of a string into a buffer, and - * return bytes that ought to be output excluding final null. - */ -static int shell_quote(char *buf, int nmax, const char *str) -{ - char ch; - int nq; - int oc = 0; - - while ( (ch = *str++) ) { - nq = 0; - if ( strchr(" !\"#$%&\'()*;<=>?[\\]^`{|}", ch) ) - nq = 1; - - if ( nq ) { - if ( nmax > 1 ) { - *buf++ = '\\'; - nmax--; - } - oc++; - } - - if ( nmax > 1 ) { - *buf++ = ch; - nmax--; - } - oc++; - } - - if ( nmax ) - *buf = '\0'; - - return oc; -} - -/* - * Append a string to a string buffer, with or without quoting. Return true - * if the buffer overflowed. + * Append a string to a string buffer, with or without shell quoting. + * Return true if the buffer overflowed. */ static int add_to_string(char **ptrp, int *sizep, const char *str, int quote) { @@ -56,7 +20,7 @@ static int add_to_string(char **ptrp, int *sizep, const char *str, int quote) int err = 0; if ( quote ) { - oc = shell_quote(p, size, str); + oc = sq_quote_buf(p, size, str); } else { oc = strlen(str); memcpy(p, str, (oc >= size) ? size-1 : oc); |