we use glibc, and gconv. Don't need our own transcoding stuff, glibc does
[apps/madmutt.git] / lib-mx / compress.c
index 22fe01e..01e4a07 100644 (file)
@@ -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,8 +52,7 @@ 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;
   }
 }
     ctx->locked = 0;
   }
 }
@@ -65,9 +64,24 @@ static int is_new (const char *path)
 
 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)