Beispiel #1
0
/*
 * Receive the response from the server, which include the HEAD info. And
 * store result to dl->di_length, dl->di_filename.
 */
static int dlinfo_recv_and_parsing(struct dlinfo *dl)
{
	int n;
	int code;
	char buf[DLINFO_RCV_SZ];
	char tmp[DLINFO_ENCODE_NAME_MAX];
	char *p;

	/* any error or end-of-file will cause parsing header fails */
	if ((n = read(dl->di_remote, buf, DLINFO_RCV_SZ - 1)) <= 0)
		return -1;

	buf[n] = 0;
	err_dbg(2, "--------------Received Meta info---------------\n"
		"%s\n", buf);

	/* response code valid range [200-300) */
	code = getrcode(buf);
	if (code < 200 || code >= 300)
		return -1;

#define _CONTENT_LENGTH	"Content-Length: "
	if (NULL != (p = strcasestr(buf, _CONTENT_LENGTH))) {
		dl->di_length = strtol(p + sizeof(_CONTENT_LENGTH) - 1,
				       NULL, 10);
	}

	/* User specified filename */
	if (*dl->di_filename)
		return 0;

#define FILENAME	"filename="
	if ((p = strcasestr(buf, FILENAME))) {
		p = memccpy(tmp, p + sizeof(FILENAME) - 1, '\n',
				DLINFO_ENCODE_NAME_MAX);
		if (!p) {
			err_sys("memccpy");
			return -1;
		}
		strncpy(dl->di_filename, string_decode(tmp),
			sizeof(dl->di_filename) - 1);
		return 0;
	}

	/* if filename parsing failed, then parsing filename from url. */
	if ((p = strrchr(dl->di_url, '/'))) {
		strcpy(tmp, p + 1);
		strncpy(dl->di_filename, string_decode(tmp),
			sizeof(dl->di_filename) - 1);
		return 0;
	}
	return -1;
}
Beispiel #2
0
char *
muscle_percent_define_get (char const *variable)
{
  uniqstr name = muscle_name (variable, NULL);
  char *value = string_decode (name);
  if (!value)
    value = xstrdup ("");
  muscle_percent_define_use (variable);
  return value;
}
Beispiel #3
0
void
muscle_percent_define_check_values (char const * const *values)
{
  for (; *values; ++values)
    {
      char const * const *variablep = values;
      uniqstr name = muscle_name (*variablep, NULL);
      char *value = string_decode (name);
      muscle_percent_define_check_kind (*variablep, muscle_keyword);
      if (value)
        {
          for (++values; *values; ++values)
            {
              if (STREQ (value, *values))
                break;
            }
          if (!*values)
            {
              unsigned i = 0;
              location loc = muscle_percent_define_get_loc (*variablep);
              complain_indent (&loc, complaint, &i,
                               _("invalid value for %%define variable %s: %s"),
                               quote (*variablep), quote_n (1, value));
              i += SUB_INDENT;
              for (values = variablep + 1; *values; ++values)
                complain_indent (&loc, complaint | no_caret | silent, &i,
                                 _("accepted value: %s"), quote (*values));
            }
          else
            {
              while (*values)
                ++values;
            }
          free (value);
        }
      else
        complain (NULL, fatal, _("%s: undefined %%define variable %s"),
                  "muscle_percent_define_check_values", quote (*variablep));
    }
}