#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"
{
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;
{
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)
{
- 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)
{
- 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 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);
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.
*/
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));
-
- ctx->magic = DefaultMagic;
-
+ ctx->magic = M_MBOX;
if (is_new (ctx->realpath) || ctx->magic != M_MBOX)
unlink(tmppath);
m_fclose(&ctx->fp);
/* if the folder was removed, remove the gzipped folder too */
- if (access (ctx->path, F_OK) != 0 && !option (OPTSAVEEMPTY))
- remove (ctx->realpath);
- else
- remove_file (ctx);
-
+ remove_file (ctx);
restore_path (ctx);
p_delete(&ctx->cinfo);
}
NULL,
NULL,
NULL,
+ NULL,
};