commit - ca44613693732f925bb60419342e9a62e4ddf000
commit + 18bd83915eab0f06b7e2920d0d71a39108b2d641
blob - 21ac1f758c05dd9302104324ebb876a2e81b1871
blob + 12b070084af562bb3e68dc4382383d8434abc89c
--- gmid.c
+++ gmid.c
drop_priv();
if (!conf.mime.skip_defaults && load_default_mime(&conf.mime) == -1)
fatal("load_default_mime: %s", strerror(errno));
+ sort_mime(&conf.mime);
load_vhosts();
loop(ctx, sock4, sock6, ibuf);
return 0;
blob - 3bf9798e546420f85e88c85e773f7f3aca1c4b8c
blob + cc6253a87732028a882fa4e58463565bd9d82732
--- gmid.h
+++ gmid.h
void init_mime(struct mime*);
int add_mime(struct mime*, const char*, const char*);
int load_default_mime(struct mime*);
+void sort_mime(struct mime *);
const char *mime(struct vhost*, const char*);
void free_mime(struct mime *);
blob - 715bec5ecae060903c30e03a29d54158caa8ce6c
blob + 8ce73fd8f002028d42d459577b80a398691a5666
--- mime.c
+++ mime.c
return NULL;
}
+static int
+mime_comp(const void *a, const void *b)
+{
+ const struct etm *x = a, *y = b;
+
+ return strcmp(x->ext, y->ext);
+}
+
+void
+sort_mime(struct mime *m)
+{
+ qsort(m->t, m->len, sizeof(*m->t), mime_comp);
+}
+
+static int
+mime_find(const void *a, const void *b)
+{
+ const char *ext = a;
+ const struct etm *x = b;
+
+ return strcmp(ext, x->ext);
+}
+
const char *
mime(struct vhost *host, const char *path)
{
if ((ext = path_ext(path)) == NULL)
return def;
- for (t = conf.mime.t; t->mime != NULL; ++t)
- if (!strcmp(ext, t->ext))
- return t->mime;
-
+ t = bsearch(ext, conf.mime.t, conf.mime.len, sizeof(*conf.mime.t),
+ mime_find);
+ if (t != NULL)
+ return t->mime;
return def;
}