mirror of
https://github.com/emikulic/darkhttpd.git
synced 2023-08-10 21:13:08 +03:00
. Added debugf() to parse_mimetype_line()
. Added parse_extension_map_file() . Added --mimetypes to usage() and parse_commandline()
This commit is contained in:
parent
a0d608d1e3
commit
7a2daecf22
@ -223,6 +223,8 @@ static void parse_mimetype_line(const char *line)
|
|||||||
assert(strlen(mapping->mimetype) > 0);
|
assert(strlen(mapping->mimetype) > 0);
|
||||||
assert(strlen(mapping->extension) > 0);
|
assert(strlen(mapping->extension) > 0);
|
||||||
|
|
||||||
|
debugf("*.%s \t-> %s\n", mapping->extension, mapping->mimetype);
|
||||||
|
|
||||||
LIST_INSERT_HEAD(&mime_map, mapping, entries);
|
LIST_INSERT_HEAD(&mime_map, mapping, entries);
|
||||||
|
|
||||||
if (line[rbound] == 0) return; /* end of line */
|
if (line[rbound] == 0) return; /* end of line */
|
||||||
@ -245,6 +247,55 @@ static void parse_default_extension_map(void)
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* ---------------------------------------------------------------------------
|
||||||
|
* Adds contents of specified file to mime_map list.
|
||||||
|
*/
|
||||||
|
static void parse_extension_map_file(const char *filename)
|
||||||
|
{
|
||||||
|
char *buf = NULL;
|
||||||
|
FILE *fp = fopen(filename, "rb");
|
||||||
|
if (fp == NULL) err(1, "fopen(\"%s\")", filename);
|
||||||
|
|
||||||
|
while (!feof(fp))
|
||||||
|
{
|
||||||
|
size_t line_len;
|
||||||
|
char c;
|
||||||
|
long filepos;
|
||||||
|
|
||||||
|
/* store current file position */
|
||||||
|
filepos = ftell(fp);
|
||||||
|
if (filepos == -1) err(1, "ftell()");
|
||||||
|
|
||||||
|
/* read to newline */
|
||||||
|
for (c=0, line_len=0;
|
||||||
|
!feof(fp) && c != '\n' && c != '\r';
|
||||||
|
c = fgetc(fp), line_len++);
|
||||||
|
|
||||||
|
/* jump back to beginning of current line */
|
||||||
|
if (fseek(fp, filepos, SEEK_SET) == -1)
|
||||||
|
err(1, "fseek()");
|
||||||
|
|
||||||
|
if (line_len-1 != 0)
|
||||||
|
{
|
||||||
|
/* alloc and fill up buf */
|
||||||
|
buf = (char*) xmalloc(line_len);
|
||||||
|
if (fread(buf, 1, line_len-1, fp) != (line_len-1))
|
||||||
|
err(1, "fread()");
|
||||||
|
buf[line_len-1] = '\0';
|
||||||
|
|
||||||
|
/* parse it */
|
||||||
|
parse_mimetype_line(buf);
|
||||||
|
free(buf);
|
||||||
|
}
|
||||||
|
|
||||||
|
c = fgetc(fp); /* read last char (newline) */
|
||||||
|
}
|
||||||
|
|
||||||
|
fclose(fp);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* ---------------------------------------------------------------------------
|
/* ---------------------------------------------------------------------------
|
||||||
* Initialize the sockin global. This is the socket that we accept
|
* Initialize the sockin global. This is the socket that we accept
|
||||||
* connections from.
|
* connections from.
|
||||||
@ -308,6 +359,9 @@ static void usage(void)
|
|||||||
"\t--index filename (default: %s)\n" /* index_name */
|
"\t--index filename (default: %s)\n" /* index_name */
|
||||||
"\t\tDefault file to serve when a directory is requested.\n"
|
"\t\tDefault file to serve when a directory is requested.\n"
|
||||||
"\n"
|
"\n"
|
||||||
|
"\t--mimetypes filename (optional)\n"
|
||||||
|
"\t\tParses specified file for extension-MIME associations.\n"
|
||||||
|
"\n"
|
||||||
/* "\t--uid blah, --gid blah\n" FIXME */
|
/* "\t--uid blah, --gid blah\n" FIXME */
|
||||||
, bindport, index_name);
|
, bindport, index_name);
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
@ -407,6 +461,11 @@ static void parse_commandline(const int argc, char *argv[])
|
|||||||
if (++i >= argc) errx(1, "missing filename after --index");
|
if (++i >= argc) errx(1, "missing filename after --index");
|
||||||
index_name = argv[i];
|
index_name = argv[i];
|
||||||
}
|
}
|
||||||
|
else if (strcmp(argv[i], "--mimetypes") == 0)
|
||||||
|
{
|
||||||
|
if (++i >= argc) errx(1, "missing filename after --mimetypes");
|
||||||
|
parse_extension_map_file(argv[i]);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
errx(1, "unknown argument `%s'", argv[i]);
|
errx(1, "unknown argument `%s'", argv[i]);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user