return isn't a function FFS
[apps/madmutt.git] / lib-mx / compress.c
index c28eee6..65093c5 100644 (file)
@@ -12,7 +12,7 @@
 #include <lib-sys/mutt_signal.h>
 #include <lib-sys/unix.h>
 
 #include <lib-sys/mutt_signal.h>
 #include <lib-sys/unix.h>
 
-#include <lib-ui/curses.h>
+#include <lib-ui/lib-ui.h>
 
 #include "mutt.h"
 
 
 #include "mutt.h"
 
@@ -38,7 +38,7 @@ static int mbox_lock_compressed (CONTEXT * ctx, FILE * fp, int excl, int retry)
 {
   int r;
 
 {
   int r;
 
-  if ((r = mx_lock_file (ctx->realpath, fileno (fp), excl, 1, retry)) == 0)
+  if ((r = mx_lock_file (ctx->realpath, fileno (fp), excl, retry)) == 0)
     ctx->locked = 1;
   else if (retry && !excl) {
     ctx->readonly = 1;
     ctx->locked = 1;
   else if (retry && !excl) {
     ctx->readonly = 1;
@@ -52,22 +52,36 @@ static void mbox_unlock_compressed (CONTEXT * ctx, FILE * fp)
 {
   if (ctx->locked) {
     fflush (fp);
 {
   if (ctx->locked) {
     fflush (fp);
-
-    mx_unlock_file (ctx->realpath, fileno (fp), 1);
+    mx_unlock_file(ctx->realpath, fileno(fp));
     ctx->locked = 0;
   }
 }
 
 static int is_new (const char *path)
 {
     ctx->locked = 0;
   }
 }
 
 static int is_new (const char *path)
 {
-  return (access (path, W_OK) && errno == ENOENT);
+  return access (path, W_OK) && errno == ENOENT;
 }
 
 static const char *find_compress_hook (int type, 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)
 }
 
 int mutt_can_read_compressed (const char *path)
@@ -88,7 +102,7 @@ int mutt_can_append_compressed (const char *path)
   int magic;
 
   if (is_new (path))
   int magic;
 
   if (is_new (path))
-    return (find_compress_hook (M_CLOSEHOOK, path) ? 1 : 0);
+    return find_compress_hook (M_CLOSEHOOK, path) ? 1 : 0;
 
   magic = mx_get_magic (path);
 
 
   magic = mx_get_magic (path);
 
@@ -293,9 +307,7 @@ int mutt_open_append_compressed (CONTEXT * ctx)
   m_fclose(&fh);
 
   ctx->path = p_dupstr(tmppath, m_strlen(tmppath));
   m_fclose(&fh);
 
   ctx->path = p_dupstr(tmppath, m_strlen(tmppath));
-
-  ctx->magic = DefaultMagic;
-
+  ctx->magic = M_MBOX;
   if (is_new (ctx->realpath) || ctx->magic != M_MBOX)
       unlink(tmppath);
 
   if (is_new (ctx->realpath) || ctx->magic != M_MBOX)
       unlink(tmppath);