- char *header = response, *real_body = NULL;
-
- while (0 < (response_len - (response - header + 4))) {
- if ( (*response++ == '\r') &&
- (*response++ == '\n') &&
- (*response++ == '\r') &&
- (*response++ == '\n')) {
- real_body = response;
+ char *ct = NULL;
+
+#ifdef HTTP_HAVE_MAGIC
+ /* magic_load() fails if MAGIC_MIME is set because it
+ cowardly adds .mime to the file name */
+ struct magic_set *magic = magic_open(magicmode &~ MAGIC_MIME);
+
+ if (!magic) {
+ http_error_ex(HE_WARNING, HTTP_E_INVALID_PARAM, "Invalid magic mode: %ld", magicmode);
+ } else if (-1 == magic_load(magic, magicfile)) {
+ http_error_ex(HE_WARNING, HTTP_E_RUNTIME, "Failed to load magic database '%s' (%s)", magicfile, magic_error(magic));
+ } else {
+ const char *ctype = NULL;
+
+ magic_setflags(magic, magicmode);
+
+ switch (data_mode)
+ {
+ case SEND_RSRC:
+ {
+ char *buffer;
+ size_t b_len;
+
+ b_len = php_stream_copy_to_mem(data_ptr, &buffer, 65536, 0);
+ ctype = magic_buffer(magic, buffer, b_len);
+ efree(buffer);
+ }
+ break;
+
+ case SEND_DATA:
+ ctype = magic_buffer(magic, data_ptr, data_len);
+ break;
+
+ default:
+ ctype = magic_file(magic, data_ptr);