+int ExitPipe[2];
+HashList *GZMimeBlackList = NULL; /* mimetypes which shouldn't be gzip compressed */
+
+void LoadMimeBlacklist(void)
+{
+ StrBuf *MimeBlackLine;
+ IOBuffer IOB;
+ eReadState state;
+
+ memset(&IOB, 0, sizeof(IOBuffer));
+ IOB.fd = open(file_etc_mimelist, O_RDONLY);
+
+ IOB.Buf = NewStrBuf();
+ MimeBlackLine = NewStrBuf();
+ GZMimeBlackList = NewHash(1, NULL);
+
+ do
+ {
+ state = StrBufChunkSipLine(MimeBlackLine, &IOB);
+
+ switch (state)
+ {
+ case eMustReadMore:
+ if (StrBuf_read_one_chunk_callback(IOB.fd, 0, &IOB) <= 0)
+ state = eReadFail;
+ break;
+ case eReadSuccess:
+ if ((StrLength(MimeBlackLine) > 1) &&
+ (*ChrPtr(MimeBlackLine) != '#'))
+ {
+ Put(GZMimeBlackList, SKEY(MimeBlackLine),
+ (void*) 1, reference_free_handler);
+ }
+ FlushStrBuf(MimeBlackLine);
+ break;
+ case eReadFail:
+ break;
+ case eBufferNotEmpty:
+ break;
+ }
+ }
+ while (state != eReadFail);
+
+ close(IOB.fd);
+
+ FreeStrBuf(&IOB.Buf);
+ FreeStrBuf(&MimeBlackLine);
+}
+
+void CheckGZipCompressionAllowed(const char *MimeType, long MLen)
+{
+ void *v;
+ wcsession *WCC = WC;
+
+ if (WCC->Hdr->HR.gzip_ok)
+ WCC->Hdr->HR.gzip_ok = GetHash(GZMimeBlackList, MimeType, MLen, &v) == 0;
+}
+