2009-04-02 Marcus Brinkmann <marcus@g10code.de>
[gpg4win.git] / patches / gnupg2-2.0.9 / 03-i18n+etc.patch
1 #! /bin/sh
2 patch -p1 -f $* < $0
3 exit $?
4
5
6
7
8 --- gnupg-2.0.9/jnlib/w32-gettext.c     2008-03-25 20:12:57.000000000 +0100
9 +++ jnlib/w32-gettext.c 2008-04-08 15:16:29.000000000 +0200
10 @@ -96,11 +96,13 @@
11  struct loaded_domain
12  {
13    char *data;
14 +  char *data_native; /* Data mapped to the native version of the
15 +                        string.  (Allocated along with DATA). */
16    int must_swap;
17    u32 nstrings;
18 -  char *mapped;  /* 0 = not yet mapped, 1 = mapped,
19 -                    2 = mapped to
20 -                    overflow space */
21 +  char *mapped;  /* 0 = not mapped (original utf8), 
22 +                    1 = mapped to native encoding,
23 +                    2 = mapped to native encoding in overflow space.   */
24    struct overflow_space_s *overflow_space;
25    struct string_desc *orig_tab;
26    struct string_desc *trans_tab;
27 @@ -111,6 +113,8 @@
28  
29  static struct loaded_domain *the_domain;
30  static char *the_langid;
31 +static int want_utf8;  /* True if the user want's utf-8 strings.  */
32 +
33  
34  static __inline__ u32
35  do_swap_u32( u32 i )
36 @@ -1236,7 +1240,7 @@
37        return NULL;
38      }
39  
40 -  data = jnlib_malloc (size);
41 +  data = (2*size <= size)? NULL : jnlib_malloc (2*size);
42    if (!data)
43      {
44        fclose (fp);
45 @@ -1278,38 +1282,39 @@
46        return NULL;
47      }
48    domain->data = (char *) data;
49 +  domain->data_native = (char *) data + size;
50    domain->must_swap = data->magic != MAGIC;
51  
52    /* Fill in the information about the available tables.  */
53 -    switch (SWAPIT(domain->must_swap, data->revision))
54 -      {
55 -      case 0:
56 -       domain->nstrings = SWAPIT(domain->must_swap, data->nstrings);
57 -       domain->orig_tab = (struct string_desc *)
58 +  switch (SWAPIT(domain->must_swap, data->revision))
59 +    {
60 +    case 0:
61 +      domain->nstrings = SWAPIT(domain->must_swap, data->nstrings);
62 +      domain->orig_tab = (struct string_desc *)
63           ((char *) data + SWAPIT(domain->must_swap, data->orig_tab_offset));
64 -       domain->trans_tab = (struct string_desc *)
65 -         ((char *) data + SWAPIT(domain->must_swap, data->trans_tab_offset));
66 -       domain->hash_size = SWAPIT(domain->must_swap, data->hash_tab_size);
67 -       domain->hash_tab = (u32 *)
68 -         ((char *) data + SWAPIT(domain->must_swap, data->hash_tab_offset));
69 -        break;
70 +      domain->trans_tab = (struct string_desc *)
71 +        ((char *) data + SWAPIT(domain->must_swap, data->trans_tab_offset));
72 +      domain->hash_size = SWAPIT(domain->must_swap, data->hash_tab_size);
73 +      domain->hash_tab = (u32 *)
74 +        ((char *) data + SWAPIT(domain->must_swap, data->hash_tab_offset));
75 +      break;
76          
77 -      default: /* This is an invalid revision. */
78 -       jnlib_free( data );
79 -       jnlib_free( domain );
80 -       return NULL;
81 +    default: /* This is an invalid revision.   */
82 +      jnlib_free( data );
83 +      jnlib_free( domain );
84 +      return NULL;
85      }
86 -
87 -    /* Allocate an array to keep track of code page mappings. */
88 -    domain->mapped = jnlib_calloc (1, domain->nstrings);
89 -    if (!domain->mapped)
90 -      {
91 -        jnlib_free (data);
92 -        jnlib_free (domain);
93 -        return NULL;
94 -      }
95 -
96 -    return domain;
97 +  
98 +  /* Allocate an array to keep track of code page mappings. */
99 +  domain->mapped = jnlib_calloc (1, domain->nstrings);
100 +  if (!domain->mapped)
101 +    {
102 +      jnlib_free (data);
103 +      jnlib_free (domain);
104 +      return NULL;
105 +    }
106 +  
107 +  return domain;
108  }
109  
110  
111 @@ -1510,30 +1515,45 @@
112  
113  
114  static const char*
115 -get_string( struct loaded_domain *domain, u32 idx )
116 +get_string (struct loaded_domain *domain, u32 idx)
117  {
118    struct overflow_space_s *os;
119    char *p;
120  
121 -  p = domain->data + SWAPIT(domain->must_swap, domain->trans_tab[idx].offset);
122 -  if (!domain->mapped[idx]) 
123 +  if (want_utf8)
124 +    {
125 +      p = (domain->data 
126 +           + SWAPIT(domain->must_swap, domain->trans_tab[idx].offset));
127 +    }
128 +  else if (!domain->mapped[idx]) 
129      {
130 +      /* Not yet mapped - map utf-8 to native encoding.  */
131 +      const char *p_orig;
132        size_t plen, buflen;
133        char *buf;
134  
135 -      domain->mapped[idx] = 1;
136 +      p_orig = (domain->data 
137 +                + SWAPIT(domain->must_swap, domain->trans_tab[idx].offset));
138 +      p = (domain->data_native 
139 +           + SWAPIT(domain->must_swap, domain->trans_tab[idx].offset));
140  
141 -      plen = strlen (p);
142 -      buf = utf8_to_native (p, plen, -1);
143 +      plen = strlen (p_orig);
144 +      buf = utf8_to_native (p_orig, plen, -1);
145        buflen = strlen (buf);
146        if (buflen <= plen)
147 -        strcpy (p, buf);
148 +        {
149 +          /* Copy into the DATA_NATIVE area. */
150 +          strcpy (p, buf);
151 +          domain->mapped[idx] = 1;
152 +        }
153        else
154          {
155            /* There is not enough space for the translation - store it
156 -             in the overflow_space else and mark that in the mapped
157 -             array.  Because we expect that this won't happen too
158 -             often, we use a simple linked list.  */
159 +             in the overflow_space and mark that in the mapped array.
160 +             Because UTF-8 strings are in general longer than the
161 +             Windows 2 byte encodings, we expect that this won't
162 +             happen too often (if at all) and thus we use a linked
163 +             list to manage this space. */
164            os = jnlib_malloc (sizeof *os + buflen);
165            if (os)
166              {
167 @@ -1545,9 +1565,16 @@
168              }
169            else
170              p = "ERROR in GETTEXT MALLOC";
171 +          domain->mapped[idx] = 2;
172          }
173        jnlib_free (buf);
174      }
175 +  else if (domain->mapped[idx] == 1) 
176 +    {
177 +      p = (domain->data_native
178 +           + SWAPIT(domain->must_swap, domain->trans_tab[idx].offset));
179 +
180 +    }
181    else if (domain->mapped[idx] == 2) 
182      { /* We need to get the string from the overflow_space. */
183        for (os=domain->overflow_space; os; os = os->next)
184 @@ -1555,6 +1582,9 @@
185            return (const char*)os->d;
186        p = "ERROR in GETTEXT\n";
187      }
188 +  else
189 +    p = "ERROR in GETEXT mapping";
190 +
191    return (const char*)p;
192  }
193  
194 @@ -1660,5 +1690,12 @@
195  }
196  
197  
198 +void
199 +gettext_select_utf8 (int value)
200 +{
201 +  want_utf8 = value;
202 +}
203 +
204 +
205  #endif /* USE_SIMPLE_GETTEXT */
206
207
208 --- gnupg-2.0.9/jnlib/w32help.h 2008-03-25 19:38:22.000000000 +0100
209 +++ jnlib/w32help.h     2008-04-08 15:16:54.000000000 +0200
210 @@ -33,7 +33,8 @@
211  const char *ngettext (const char *msgid1, const char *msgid2,
212                        unsigned long int n);
213  const char *gettext_localename (void);
214 +void gettext_select_utf8 (int value);
215  #endif /*USE_SIMPLE_GETTEXT*/
216  
217  
218
219
220 --- gnupg-2.0.9/common/i18n.c   2007-12-04 14:15:10.000000000 +0100
221 +++ common/i18n.c       2008-04-08 15:31:20.000000000 +0200
222 @@ -45,17 +45,19 @@
223  
224  
225  /* The Assuan agent protocol requires us to transmit utf-8 strings
226 -   thus we need a fuctnion to temporary switch gettext from native to
227 +   thus we need a way to temporary switch gettext from native to
228     utf8.  */
229  char *
230  i18n_switchto_utf8 (void)
231  {
232 -#ifdef ENABLE_NLS
233 +#ifdef USE_SIMPLE_GETTEXT
234 +  gettext_select_utf8 (1);
235 +#elif defined(ENABLE_NLS)
236    char *orig_codeset = bind_textdomain_codeset (PACKAGE_GT, NULL);
237 -#ifdef HAVE_LANGINFO_CODESET
238 +# ifdef HAVE_LANGINFO_CODESET
239    if (!orig_codeset)
240      orig_codeset = nl_langinfo (CODESET);
241 -#endif
242 +# endif
243    if (orig_codeset)
244      { /* We only switch when we are able to restore the codeset later.
245           Note that bind_textdomain_codeset does only return on memory
246 @@ -78,8 +80,10 @@
247  void
248  i18n_switchback (char *saved_codeset)
249  {
250 -#ifdef ENABLE_NLS
251 +#ifdef USE_SIMPLE_GETTEXT
252 +  gettext_select_utf8 (0);
253 +#elif defined(ENABLE_NLS)
254    if (saved_codeset)
255      {
256        bind_textdomain_codeset (PACKAGE_GT, saved_codeset);
257
258
259 --- gnupg-2.0.9/g10/gpg.c       2008-03-17 17:59:54.000000000 +0100
260 +++ g10/gpg.c   2008-04-08 16:11:03.000000000 +0200
261 @@ -704,6 +704,7 @@
262         I'm returning the favor. */
263      { oLocalUser, "sign-with", 2, "@" },
264      { oRecipient, "user", 2, "@" },
265 +
266      { oRequireCrossCert, "require-backsigs", 0, "@"},
267      { oRequireCrossCert, "require-cross-certification", 0, "@"},
268      { oNoRequireCrossCert, "no-require-backsigs", 0, "@"},
269 @@ -1549,6 +1550,11 @@
270    printf ("reader-port:%lu:\n", GC_OPT_FLAG_NONE);
271    printf ("default-key:%lu:\n", GC_OPT_FLAG_NONE);
272    printf ("encrypt-to:%lu:\n", GC_OPT_FLAG_NONE);
273 +  printf ("auto-key-locate:%lu:\n", GC_OPT_FLAG_NONE);
274 +  printf ("allow-pka-lookup:%lu:\n", GC_OPT_FLAG_NONE);
275 +  printf ("log-file:%lu:\n", GC_OPT_FLAG_NONE);
276 +  printf ("debug-level:%lu:\"none:\n", GC_OPT_FLAG_DEFAULT);
277 +
278  
279    xfree (configfile_esc);
280  }
281 @@ -2932,6 +2938,15 @@
282                "use!\n");
283  #endif
284  
285 +    /* Older Libgcrypts fail with an assertion during DSA key
286 +       generation.  Better disable DSA2 entirely. */
287 +    if (opt.flags.dsa2 && !gcry_check_version ("1.4.0") )
288 +      {
289 +        log_info ("WARNING: "
290 +                  "DSA2 is only available with Libgcrypt 1.4 and later\n");
291 +        opt.flags.dsa2 = 0;
292 +      }
293 +
294      if (opt.verbose > 2)
295          log_info ("using character set `%s'\n", get_native_charset ());
296  
297