RE: Reply all - issue
[notmuch-archives.git] / 3d / e4e1605dcedb03a2178d643f080052a34e4537
1 Return-Path: <amdragon@mit.edu>\r
2 X-Original-To: notmuch@notmuchmail.org\r
3 Delivered-To: notmuch@notmuchmail.org\r
4 Received: from localhost (localhost [127.0.0.1])\r
5         by olra.theworths.org (Postfix) with ESMTP id EE3A4431FAE\r
6         for <notmuch@notmuchmail.org>; Tue, 24 Jul 2012 19:35:18 -0700 (PDT)\r
7 X-Virus-Scanned: Debian amavisd-new at olra.theworths.org\r
8 X-Spam-Flag: NO\r
9 X-Spam-Score: -0.7\r
10 X-Spam-Level: \r
11 X-Spam-Status: No, score=-0.7 tagged_above=-999 required=5\r
12         tests=[RCVD_IN_DNSWL_LOW=-0.7] autolearn=disabled\r
13 Received: from olra.theworths.org ([127.0.0.1])\r
14         by localhost (olra.theworths.org [127.0.0.1]) (amavisd-new, port 10024)\r
15         with ESMTP id Sh4aC+d8oGpS for <notmuch@notmuchmail.org>;\r
16         Tue, 24 Jul 2012 19:35:17 -0700 (PDT)\r
17 Received: from dmz-mailsec-scanner-7.mit.edu (DMZ-MAILSEC-SCANNER-7.MIT.EDU\r
18         [18.7.68.36])\r
19         by olra.theworths.org (Postfix) with ESMTP id 2B0EC431E82\r
20         for <notmuch@notmuchmail.org>; Tue, 24 Jul 2012 19:35:07 -0700 (PDT)\r
21 X-AuditID: 12074424-b7f2a6d0000008bf-7d-500f5b59312e\r
22 Received: from mailhub-auth-2.mit.edu ( [18.7.62.36])\r
23         by dmz-mailsec-scanner-7.mit.edu (Symantec Messaging Gateway) with SMTP\r
24         id 90.9B.02239.95B5F005; Tue, 24 Jul 2012 22:35:05 -0400 (EDT)\r
25 Received: from outgoing.mit.edu (OUTGOING-AUTH.MIT.EDU [18.7.22.103])\r
26         by mailhub-auth-2.mit.edu (8.13.8/8.9.2) with ESMTP id q6P2Z4Wu005060; \r
27         Tue, 24 Jul 2012 22:35:04 -0400\r
28 Received: from drake.dyndns.org\r
29         (209-6-116-242.c3-0.arl-ubr1.sbo-arl.ma.cable.rcn.com\r
30         [209.6.116.242]) (authenticated bits=0)\r
31         (User authenticated as amdragon@ATHENA.MIT.EDU)\r
32         by outgoing.mit.edu (8.13.6/8.12.4) with ESMTP id q6P2Z2T7025119\r
33         (version=TLSv1/SSLv3 cipher=AES256-SHA bits=256 verify=NOT);\r
34         Tue, 24 Jul 2012 22:35:03 -0400 (EDT)\r
35 Received: from amthrax by drake.dyndns.org with local (Exim 4.77)\r
36         (envelope-from <amdragon@mit.edu>)\r
37         id 1StrRG-0004Yn-4C; Tue, 24 Jul 2012 22:35:02 -0400\r
38 From: Austin Clements <amdragon@MIT.EDU>\r
39 To: notmuch@notmuchmail.org\r
40 Subject: [PATCH 03/13] sprinter: Add a string_len method\r
41 Date: Tue, 24 Jul 2012 22:34:43 -0400\r
42 Message-Id: <1343183693-17134-4-git-send-email-amdragon@mit.edu>\r
43 X-Mailer: git-send-email 1.7.10\r
44 In-Reply-To: <1343183693-17134-1-git-send-email-amdragon@mit.edu>\r
45 References: <1343183693-17134-1-git-send-email-amdragon@mit.edu>\r
46 X-Brightmail-Tracker:\r
47  H4sIAAAAAAAAA+NgFtrNIsWRmVeSWpSXmKPExsUixG6nohsZzR9gcPq6lMXehnZGi+s3ZzI7\r
48         MHks3rSfzePZqlvMAUxRXDYpqTmZZalF+nYJXBn3pu1kKjgkWXFso2cD433hLkZODgkBE4kF\r
49         y04yQ9hiEhfurWfrYuTiEBLYxyhxbsdTZghnA6PEx2dLGSGcR0wSXw49hnLmMkq03u1gA+ln\r
50         E9CQ2LZ/OSOILSIgLbHz7mxWEJtZwExi7s+JQDUcHMICFhL/D4WChFkEVCWOzr7JDhLmFXCQ\r
51         ePG5DuIKeYmn9/vAJnIKOEqcX7IQbKIQUEnP4mvsExj5FzAyrGKUTcmt0s1NzMwpTk3WLU5O\r
52         zMtLLdI118vNLNFLTSndxAgOIxeVHYzNh5QOMQpwMCrx8P56whcgxJpYVlyZe4hRkoNJSZS3\r
53         Ipg/QIgvKT+lMiOxOCO+qDQntfgQowQHs5IIb1EYUI43JbGyKrUoHyYlzcGiJM57PeWmv5BA\r
54         emJJanZqakFqEUxWhoNDSYJ3fxRQo2BRanpqRVpmTglCmomDE2Q4D9Dw3SA1vMUFibnFmekQ\r
55         +VOMilLivHNBEgIgiYzSPLheWJy/YhQHekUYop0HmCLgul8BDWYCGvw8jA9kcEkiQkqqgTGz\r
56         R9g9LZ3FvLvr8IlfrKYfUx182FeU/fUu0r98vmn6Qc1JP3xadolUyaz7Kel0fM4Z/ZpXmpc7\r
57         DkU7ZM5cY+t6N+b8xBMMnPN93xwNm2+n9L6dO3uZqYnawe6MhJTmxFlmDDX+Hxrm6nQWlr+y\r
58         r38s9/Vr7KqX1yKSE8L47veLCz6u+3feUYmlOCPRUIu5qDgRAEkD8YjOAgAA\r
59 X-BeenThere: notmuch@notmuchmail.org\r
60 X-Mailman-Version: 2.1.13\r
61 Precedence: list\r
62 List-Id: "Use and development of the notmuch mail system."\r
63         <notmuch.notmuchmail.org>\r
64 List-Unsubscribe: <http://notmuchmail.org/mailman/options/notmuch>,\r
65         <mailto:notmuch-request@notmuchmail.org?subject=unsubscribe>\r
66 List-Archive: <http://notmuchmail.org/pipermail/notmuch>\r
67 List-Post: <mailto:notmuch@notmuchmail.org>\r
68 List-Help: <mailto:notmuch-request@notmuchmail.org?subject=help>\r
69 List-Subscribe: <http://notmuchmail.org/mailman/listinfo/notmuch>,\r
70         <mailto:notmuch-request@notmuchmail.org?subject=subscribe>\r
71 X-List-Received-Date: Wed, 25 Jul 2012 02:35:19 -0000\r
72 \r
73 This method allows callers to output strings with specific lengths.\r
74 It's useful both for strings with embedded NULs (which JSON can\r
75 represent, though parser support is apparently spotty), and\r
76 non-terminated strings.\r
77 ---\r
78  sprinter-json.c |   11 +++++++++--\r
79  sprinter-text.c |   11 +++++++++--\r
80  sprinter.h      |    1 +\r
81  3 files changed, 19 insertions(+), 4 deletions(-)\r
82 \r
83 diff --git a/sprinter-json.c b/sprinter-json.c\r
84 index 4649655..2587ca6 100644\r
85 --- a/sprinter-json.c\r
86 +++ b/sprinter-json.c\r
87 @@ -89,7 +89,7 @@ json_end (struct sprinter *sp)\r
88  }\r
89  \r
90  static void\r
91 -json_string (struct sprinter *sp, const char *val)\r
92 +json_string_len (struct sprinter *sp, const char *val, size_t len)\r
93  {\r
94      static const char *const escapes[] = {\r
95         ['\"'] = "\\\"", ['\\'] = "\\\\", ['\b'] = "\\b",\r
96 @@ -98,7 +98,7 @@ json_string (struct sprinter *sp, const char *val)\r
97      struct sprinter_json *spj = json_begin_value (sp);\r
98  \r
99      fputc ('"', spj->stream);\r
100 -    for (; *val; ++val) {\r
101 +    for (; len; ++val, --len) {\r
102         unsigned char ch = *val;\r
103         if (ch < ARRAY_SIZE (escapes) && escapes[ch])\r
104             fputs (escapes[ch], spj->stream);\r
105 @@ -111,6 +111,12 @@ json_string (struct sprinter *sp, const char *val)\r
106  }\r
107  \r
108  static void\r
109 +json_string (struct sprinter *sp, const char *val)\r
110 +{\r
111 +    json_string_len (sp, val, strlen (val));\r
112 +}\r
113 +\r
114 +static void\r
115  json_integer (struct sprinter *sp, int val)\r
116  {\r
117      struct sprinter_json *spj = json_begin_value (sp);\r
118 @@ -166,6 +172,7 @@ sprinter_json_create (const void *ctx, FILE *stream)\r
119             .begin_list = json_begin_list,\r
120             .end = json_end,\r
121             .string = json_string,\r
122 +           .string_len = json_string_len,\r
123             .integer = json_integer,\r
124             .boolean = json_boolean,\r
125             .null = json_null,\r
126 diff --git a/sprinter-text.c b/sprinter-text.c\r
127 index b208840..dfa54b5 100644\r
128 --- a/sprinter-text.c\r
129 +++ b/sprinter-text.c\r
130 @@ -25,14 +25,20 @@ struct sprinter_text {\r
131  };\r
132  \r
133  static void\r
134 -text_string (struct sprinter *sp, const char *val)\r
135 +text_string_len (struct sprinter *sp, const char *val, size_t len)\r
136  {\r
137      struct sprinter_text *sptxt = (struct sprinter_text *) sp;\r
138  \r
139      if (sptxt->current_prefix != NULL)\r
140         fprintf (sptxt->stream, "%s:", sptxt->current_prefix);\r
141  \r
142 -    fputs(val, sptxt->stream);\r
143 +    fwrite (val, len, 1, sptxt->stream);\r
144 +}\r
145 +\r
146 +static void\r
147 +text_string (struct sprinter *sp, const char *val)\r
148 +{\r
149 +    text_string_len (sp, val, strlen (val));\r
150  }\r
151  \r
152  static void\r
153 @@ -105,6 +111,7 @@ sprinter_text_create (const void *ctx, FILE *stream)\r
154             .begin_list = text_begin_list,\r
155             .end = text_end,\r
156             .string = text_string,\r
157 +           .string_len = text_string_len,\r
158             .integer = text_integer,\r
159             .boolean = text_boolean,\r
160             .null = text_null,\r
161 diff --git a/sprinter.h b/sprinter.h\r
162 index 6680d41..826a852 100644\r
163 --- a/sprinter.h\r
164 +++ b/sprinter.h\r
165 @@ -28,6 +28,7 @@ typedef struct sprinter {\r
166       * For string, the char * must be UTF-8 encoded.\r
167       */\r
168      void (*string) (struct sprinter *, const char *);\r
169 +    void (*string_len) (struct sprinter *, const char *, size_t);\r
170      void (*integer) (struct sprinter *, int);\r
171      void (*boolean) (struct sprinter *, notmuch_bool_t);\r
172      void (*null) (struct sprinter *);\r
173 -- \r
174 1.7.10\r
175 \r