X-Git-Url: http://git.madism.org/?a=blobdiff_plain;f=lib-mx%2Fcompress.c;h=67f72bce5d9ad51a92bc622900789a882be275ca;hb=84b3808a5aead62dd058b977ba27b99f11a059ce;hp=62a0815ad37b4b0eed0b1eff114a71ed1df821fb;hpb=2ac2bb6e436cef59dcbb88031b276aa81a109785;p=apps%2Fmadmutt.git diff --git a/lib-mx/compress.c b/lib-mx/compress.c index 62a0815..67f72bc 100644 --- a/lib-mx/compress.c +++ b/lib-mx/compress.c @@ -12,7 +12,7 @@ #include #include -#include +#include #include "mutt.h" @@ -65,9 +65,24 @@ static int is_new (const char *path) static const char *find_compress_hook (int type, const char *path) { - const char *c = mutt_find_hook (type, path); - - return (!c || !*c) ? NULL : c; + int len = strlen(path); + if (len > 3 && !strcmp(path + len - 3, ".gz")) { + switch (type) { + case M_OPENHOOK: return "gzip -cd %f > %t"; + case M_CLOSEHOOK: return "gzip -cd %t > %f"; + case M_APPENDHOOK: return "gzip -cd %t >> %f"; + default: return NULL; + } + } + if (len > 4 && !strcmp(path + len - 4, ".bz2")) { + switch (type) { + case M_OPENHOOK: return "bzip2 -cd %f > %t"; + case M_CLOSEHOOK: return "bzip2 -cd %t > %f"; + case M_APPENDHOOK: return "bzip2 -cd %t >> %f"; + default: return NULL; + } + } + return NULL; } int mutt_can_read_compressed (const char *path) @@ -196,7 +211,7 @@ int mutt_open_read_compressed(CONTEXT * ctx) ctx->realpath = ctx->path; /* Uncompress to /tmp */ - tmpfd = m_tempfd(tmppath, sizeof(tmppath), NONULL(MCore.tmpdir), NULL); + tmpfd = m_tempfd(tmppath, sizeof(tmppath), NONULL(mod_core.tmpdir), NULL); /* If we cannot open tempfile, that means the file already exists (!?) * or we are following a symlink, which is bad and insecure. */ @@ -289,7 +304,7 @@ int mutt_open_append_compressed (CONTEXT * ctx) ctx->realpath = ctx->path; /* Uncompress to /tmp */ - fh = m_tempfile(tmppath, sizeof(tmppath), NONULL(MCore.tmpdir), NULL); + fh = m_tempfile(tmppath, sizeof(tmppath), NONULL(mod_core.tmpdir), NULL); m_fclose(&fh); ctx->path = p_dupstr(tmppath, m_strlen(tmppath));