/* Copies the string from line to the buffer at param, unquoting backslash-quoted characters and NUL-terminating the output string. Stops at the first non-backslash-quoted double quote character or the end of the input string. param must be at least as long as the input string. Returns the pointer after the last handled input character.  */
static const char * unslashquote(const char *line, char *param)
/* Copies the string from line to the buffer at param, unquoting backslash-quoted characters and NUL-terminating the output string. Stops at the first non-backslash-quoted double quote character or the end of the input string. param must be at least as long as the input string. Returns the pointer after the last handled input character.  */
static const char * unslashquote(const char *line, char *param)
{
  while(*line && (*line != '\"')) {
    if(*line == '\\') {
      char out;
      line++;
      switch(out = *line) {
      case '\0':
        continue;
      case 't':
        out = '\t';
        break;
      case 'n':
        out = '\n';
        break;
      case 'r':
        out = '\r';
        break;
      case 'v':
        out = '\v';
        break;
      }
      *param++ = out;
      line++;
    }
    else
      *param++ = *line++;
  }
  *param = '\0';
  return line;
}