Author: guibert
Date: Tue Aug 9 20:09:17 2011
New Revision: 28438
URL: https://svn.nixos.org/websvn/nix/?rev=28438&sc=1
Log:
isync: add recursive imap patch
Added:
nixpkgs/trunk/pkgs/tools/networking/isync/isync-recursice-imap.patch
Modified:
nixpkgs/trunk/pkgs/tools/networking/isync/default.nix
Modified: nixpkgs/trunk/pkgs/tools/networking/isync/default.nix
==============================================================================
--- nixpkgs/trunk/pkgs/tools/networking/isync/default.nix Tue Aug 9
20:04:03 2011 (r28437)
+++ nixpkgs/trunk/pkgs/tools/networking/isync/default.nix Tue Aug 9
20:09:17 2011 (r28438)
@@ -8,6 +8,7 @@
sha256 = "1xmgzypl5a3i0fz1ca55vfbs5mv2l9icwf2gk8rvlbwrkn2wid68";
};
+ patches = [ ./isync-recursice-imap.patch ]; # usefull patch to enable
subfolders listing
buildInputs = [ openssl pkgconfig db4 ];
meta = {
Added: nixpkgs/trunk/pkgs/tools/networking/isync/isync-recursice-imap.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ nixpkgs/trunk/pkgs/tools/networking/isync/isync-recursice-imap.patch
Tue Aug 9 20:09:17 2011 (r28438)
@@ -0,0 +1,114 @@
+diff -rupN ../isync-1.0.4_original/./src/drv_imap.c ./src/drv_imap.c
+--- ../isync-1.0.4_original/./src/drv_imap.c 2007-09-22 01:44:12.000000000
-0700
++++ ./src/drv_imap.c 2009-04-22 15:28:58.000000000 -0700
+@@ -1678,7 +1678,7 @@ imap_list( store_t *gctx, string_list_t
+ int ret;
+
+ imap->boxes = 0;
+- if ((ret = imap_exec_b( ctx, 0, "LIST \"\" \"%s%%\"", ctx->prefix )) !=
DRV_OK)
++ if ((ret = imap_exec_b( ctx, 0, "LIST \"\" \"%s*\"", ctx->prefix )) !=
DRV_OK)
+ return ret;
+ *retb = imap->boxes;
+ return DRV_OK;
+diff -rupN ../isync-1.0.4_original/./src/drv_maildir.c ./src/drv_maildir.c
+--- ../isync-1.0.4_original/./src/drv_maildir.c 2008-02-23
01:02:21.000000000 -0800
++++ ./src/drv_maildir.c 2009-04-22 15:34:05.000000000 -0700
+@@ -24,6 +24,7 @@
+
+ #include "isync.h"
+
++#include <assert.h>
+ #include <limits.h>
+ #include <stdlib.h>
+ #include <string.h>
+@@ -46,6 +47,56 @@
+ #include <db.h>
+ #endif /* USE_DB */
+
++static void encode_maildir_box(const char* in, char* out, size_t size)
++{
++ const char* p;
++ char c;
++ size_t out_chars;
++
++ for (p = in, out_chars = 0; (c = *p); ++p, ++out, ++out_chars) {
++ assert(out_chars < size);
++ if (c == '/') {
++ assert(out_chars < size - 1);
++ *(out++) = '~';
++ *out = '-';
++ ++out_chars;
++ }
++ else if (c == '~') {
++ assert(out_chars < size - 1);
++ *(out++) = '~';
++ *out = '~';
++ ++out_chars;
++ }
++ else {
++ *out = c;
++ }
++ }
++ assert(out_chars < size);
++ *out = 0;
++}
++
++static void decode_maildir_box(const char* in, char* out, size_t size)
++{
++ const char* p;
++ char c;
++ size_t out_chars;
++
++ for (p = in, out_chars = 0; (c = *p); ++p, ++out, ++out_chars) {
++ assert(out_chars < size);
++ if (c == '~') {
++ assert(out_chars < size - 1);
++ c = *(++p);
++ *out = (c == '-' ? '/' : '~');
++ ++out_chars;
++ }
++ else {
++ *out = c;
++ }
++ }
++ assert(out_chars < size);
++ *out = 0;
++}
++
+ typedef struct maildir_store_conf {
+ store_conf_t gen;
+ char *inbox;
+@@ -164,14 +215,17 @@ maildir_list( store_t *gctx, string_list
+ const char *inbox = ((maildir_store_conf_t *)gctx->conf)->inbox;
+ int bl;
+ struct stat st;
+- char buf[PATH_MAX];
++ char buf[PATH_MAX], box[PATH_MAX];
+
+ if (*de->d_name == '.')
+ continue;
+ bl = nfsnprintf( buf, sizeof(buf), "%s%s/cur",
gctx->conf->path, de->d_name );
+ if (stat( buf, &st ) || !S_ISDIR(st.st_mode))
+ continue;
+- add_string_list( retb, !memcmp( buf, inbox, bl - 4 ) &&
!inbox[bl - 4] ? "INBOX" : de->d_name );
++
++ decode_maildir_box(de->d_name, box, PATH_MAX);
++ add_string_list( retb,
++ !memcmp( buf, inbox, bl - 4 ) && !inbox[bl -
4] ? "INBOX" : box );
+ }
+ closedir (dir);
+
+@@ -717,8 +771,11 @@ maildir_prepare( store_t *gctx, int opts
+ #endif /* USE_DB */
+ if (!strcmp( gctx->name, "INBOX" ))
+ gctx->path = nfstrdup( ((maildir_store_conf_t
*)gctx->conf)->inbox );
+- else
+- nfasprintf( &gctx->path, "%s%s", gctx->conf->path, gctx->name );
++ else {
++ char box[_POSIX_PATH_MAX];
++ encode_maildir_box(gctx->name, box, _POSIX_PATH_MAX);
++ nfasprintf( &gctx->path, "%s%s", gctx->conf->path, box );
++ }
+ if (opts & OPEN_SETFLAGS)
+ opts |= OPEN_OLD;
+ if (opts & OPEN_EXPUNGE)
_______________________________________________
nix-commits mailing list
[email protected]
http://mail.cs.uu.nl/mailman/listinfo/nix-commits