Mercurial > trustbridge
annotate common/strhelp.c @ 1371:23df332b2a4c
(issue179) Read install signature timestamp from config
This also changes the way the sigDt is propgated to the
MainWindow. It no longer uses the settings but hands
it over as a parameter directly.
author | Andre Heinecke <andre.heinecke@intevation.de> |
---|---|
date | Mon, 24 Nov 2014 15:48:49 +0100 |
parents | ffdc8cba139a |
children |
rev | line source |
---|---|
404 | 1 /* Copyright (C) 2014 by Bundesamt für Sicherheit in der Informationstechnik |
2 * Software engineering by Intevation GmbH | |
3 * | |
4 * This file is Free Software under the GNU GPL (v>=2) | |
5 * and comes with ABSOLUTELY NO WARRANTY! | |
6 * See LICENSE.txt for details. | |
7 */ | |
319
4077eff1dd39
Added terminateing version of asprintf.
Sascha Wilde <wilde@intevation.de>
parents:
288
diff
changeset
|
8 /* Needed to get asprintf */ |
4077eff1dd39
Added terminateing version of asprintf.
Sascha Wilde <wilde@intevation.de>
parents:
288
diff
changeset
|
9 #define _GNU_SOURCE 1 |
4077eff1dd39
Added terminateing version of asprintf.
Sascha Wilde <wilde@intevation.de>
parents:
288
diff
changeset
|
10 |
134 | 11 #include <ctype.h> |
319
4077eff1dd39
Added terminateing version of asprintf.
Sascha Wilde <wilde@intevation.de>
parents:
288
diff
changeset
|
12 #include <stdarg.h> |
131
9104b1b2e4da
Added string comparison functions.
Sascha Wilde <wilde@intevation.de>
parents:
116
diff
changeset
|
13 #include <stdbool.h> |
59
3f6378647371
Start work on cinst. Strhelp new helpers to work with C String
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
14 #include <stdio.h> |
3f6378647371
Start work on cinst. Strhelp new helpers to work with C String
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
15 #include <stdlib.h> |
3f6378647371
Start work on cinst. Strhelp new helpers to work with C String
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
16 #include <string.h> |
3f6378647371
Start work on cinst. Strhelp new helpers to work with C String
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
17 #include <assert.h> |
3f6378647371
Start work on cinst. Strhelp new helpers to work with C String
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
18 |
160
bf4bfd8843bd
Add memory allocating base64 decode function
Andre Heinecke <aheinecke@intevation.de>
parents:
143
diff
changeset
|
19 #include <polarssl/base64.h> |
bf4bfd8843bd
Add memory allocating base64 decode function
Andre Heinecke <aheinecke@intevation.de>
parents:
143
diff
changeset
|
20 |
251
c596568fa45b
Add utf16 conversion functions for Windows.
Andre Heinecke <aheinecke@intevation.de>
parents:
183
diff
changeset
|
21 #ifdef WIN32 |
c596568fa45b
Add utf16 conversion functions for Windows.
Andre Heinecke <aheinecke@intevation.de>
parents:
183
diff
changeset
|
22 #include <windows.h> |
c596568fa45b
Add utf16 conversion functions for Windows.
Andre Heinecke <aheinecke@intevation.de>
parents:
183
diff
changeset
|
23 #endif |
c596568fa45b
Add utf16 conversion functions for Windows.
Andre Heinecke <aheinecke@intevation.de>
parents:
183
diff
changeset
|
24 |
143
b026e6d2a161
Make flawfinder (a bit more) happy.
Sascha Wilde <wilde@intevation.de>
parents:
136
diff
changeset
|
25 /* Remarks regarding the "Flawfinder: ignore" comments in this file: |
b026e6d2a161
Make flawfinder (a bit more) happy.
Sascha Wilde <wilde@intevation.de>
parents:
136
diff
changeset
|
26 * |
b026e6d2a161
Make flawfinder (a bit more) happy.
Sascha Wilde <wilde@intevation.de>
parents:
136
diff
changeset
|
27 * - strlen: |
b026e6d2a161
Make flawfinder (a bit more) happy.
Sascha Wilde <wilde@intevation.de>
parents:
136
diff
changeset
|
28 * |
b026e6d2a161
Make flawfinder (a bit more) happy.
Sascha Wilde <wilde@intevation.de>
parents:
136
diff
changeset
|
29 * It's true that strlen might crash if input is not null |
b026e6d2a161
Make flawfinder (a bit more) happy.
Sascha Wilde <wilde@intevation.de>
parents:
136
diff
changeset
|
30 * terminated. But by design there is not safe way to get the |
b026e6d2a161
Make flawfinder (a bit more) happy.
Sascha Wilde <wilde@intevation.de>
parents:
136
diff
changeset
|
31 * length of an string in C, and defining an additional length |
b026e6d2a161
Make flawfinder (a bit more) happy.
Sascha Wilde <wilde@intevation.de>
parents:
136
diff
changeset
|
32 * parameter for string parameter will only transfere the problem to |
b026e6d2a161
Make flawfinder (a bit more) happy.
Sascha Wilde <wilde@intevation.de>
parents:
136
diff
changeset
|
33 * the caller. |
b026e6d2a161
Make flawfinder (a bit more) happy.
Sascha Wilde <wilde@intevation.de>
parents:
136
diff
changeset
|
34 */ |
b026e6d2a161
Make flawfinder (a bit more) happy.
Sascha Wilde <wilde@intevation.de>
parents:
136
diff
changeset
|
35 |
59
3f6378647371
Start work on cinst. Strhelp new helpers to work with C String
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
36 static void |
3f6378647371
Start work on cinst. Strhelp new helpers to work with C String
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
37 out_of_core(void) |
3f6378647371
Start work on cinst. Strhelp new helpers to work with C String
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
38 { |
905
698b6a9bd75e
Fix coding style for C code
Andre Heinecke <andre.heinecke@intevation.de>
parents:
404
diff
changeset
|
39 fputs("\nfatal: out of memory\n", stderr); |
698b6a9bd75e
Fix coding style for C code
Andre Heinecke <andre.heinecke@intevation.de>
parents:
404
diff
changeset
|
40 exit(2); |
59
3f6378647371
Start work on cinst. Strhelp new helpers to work with C String
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
41 } |
3f6378647371
Start work on cinst. Strhelp new helpers to work with C String
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
42 void * |
3f6378647371
Start work on cinst. Strhelp new helpers to work with C String
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
43 xmalloc( size_t n ) |
3f6378647371
Start work on cinst. Strhelp new helpers to work with C String
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
44 { |
905
698b6a9bd75e
Fix coding style for C code
Andre Heinecke <andre.heinecke@intevation.de>
parents:
404
diff
changeset
|
45 void *p = malloc( n ); |
698b6a9bd75e
Fix coding style for C code
Andre Heinecke <andre.heinecke@intevation.de>
parents:
404
diff
changeset
|
46 if( !p ) |
698b6a9bd75e
Fix coding style for C code
Andre Heinecke <andre.heinecke@intevation.de>
parents:
404
diff
changeset
|
47 out_of_core(); |
698b6a9bd75e
Fix coding style for C code
Andre Heinecke <andre.heinecke@intevation.de>
parents:
404
diff
changeset
|
48 return p; |
59
3f6378647371
Start work on cinst. Strhelp new helpers to work with C String
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
49 } |
3f6378647371
Start work on cinst. Strhelp new helpers to work with C String
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
50 |
3f6378647371
Start work on cinst. Strhelp new helpers to work with C String
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
51 void * |
3f6378647371
Start work on cinst. Strhelp new helpers to work with C String
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
52 xrealloc( void *a, size_t n ) |
3f6378647371
Start work on cinst. Strhelp new helpers to work with C String
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
53 { |
905
698b6a9bd75e
Fix coding style for C code
Andre Heinecke <andre.heinecke@intevation.de>
parents:
404
diff
changeset
|
54 void *p = realloc( a, n ); |
698b6a9bd75e
Fix coding style for C code
Andre Heinecke <andre.heinecke@intevation.de>
parents:
404
diff
changeset
|
55 if( !p ) |
698b6a9bd75e
Fix coding style for C code
Andre Heinecke <andre.heinecke@intevation.de>
parents:
404
diff
changeset
|
56 out_of_core(); |
698b6a9bd75e
Fix coding style for C code
Andre Heinecke <andre.heinecke@intevation.de>
parents:
404
diff
changeset
|
57 return p; |
59
3f6378647371
Start work on cinst. Strhelp new helpers to work with C String
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
58 } |
3f6378647371
Start work on cinst. Strhelp new helpers to work with C String
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
59 |
3f6378647371
Start work on cinst. Strhelp new helpers to work with C String
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
60 char * |
60
6acb1dae6185
Use strn functions and improve error handling.
Andre Heinecke <aheinecke@intevation.de>
parents:
59
diff
changeset
|
61 xstrndup( const char *string, const size_t len ) |
59
3f6378647371
Start work on cinst. Strhelp new helpers to work with C String
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
62 { |
905
698b6a9bd75e
Fix coding style for C code
Andre Heinecke <andre.heinecke@intevation.de>
parents:
404
diff
changeset
|
63 char *p = xmalloc( len + 1 ); |
698b6a9bd75e
Fix coding style for C code
Andre Heinecke <andre.heinecke@intevation.de>
parents:
404
diff
changeset
|
64 memcpy( p, string, len ); |
698b6a9bd75e
Fix coding style for C code
Andre Heinecke <andre.heinecke@intevation.de>
parents:
404
diff
changeset
|
65 p[len] = '\0'; |
698b6a9bd75e
Fix coding style for C code
Andre Heinecke <andre.heinecke@intevation.de>
parents:
404
diff
changeset
|
66 return p; |
59
3f6378647371
Start work on cinst. Strhelp new helpers to work with C String
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
67 } |
3f6378647371
Start work on cinst. Strhelp new helpers to work with C String
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
68 |
3f6378647371
Start work on cinst. Strhelp new helpers to work with C String
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
69 unsigned int |
3f6378647371
Start work on cinst. Strhelp new helpers to work with C String
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
70 strv_length (char **str_array) |
3f6378647371
Start work on cinst. Strhelp new helpers to work with C String
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
71 { |
905
698b6a9bd75e
Fix coding style for C code
Andre Heinecke <andre.heinecke@intevation.de>
parents:
404
diff
changeset
|
72 unsigned int i = 0; |
59
3f6378647371
Start work on cinst. Strhelp new helpers to work with C String
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
73 |
905
698b6a9bd75e
Fix coding style for C code
Andre Heinecke <andre.heinecke@intevation.de>
parents:
404
diff
changeset
|
74 if (!str_array) |
698b6a9bd75e
Fix coding style for C code
Andre Heinecke <andre.heinecke@intevation.de>
parents:
404
diff
changeset
|
75 return 0; |
59
3f6378647371
Start work on cinst. Strhelp new helpers to work with C String
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
76 |
905
698b6a9bd75e
Fix coding style for C code
Andre Heinecke <andre.heinecke@intevation.de>
parents:
404
diff
changeset
|
77 while (str_array[i]) |
698b6a9bd75e
Fix coding style for C code
Andre Heinecke <andre.heinecke@intevation.de>
parents:
404
diff
changeset
|
78 ++i; |
59
3f6378647371
Start work on cinst. Strhelp new helpers to work with C String
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
79 |
905
698b6a9bd75e
Fix coding style for C code
Andre Heinecke <andre.heinecke@intevation.de>
parents:
404
diff
changeset
|
80 return i; |
59
3f6378647371
Start work on cinst. Strhelp new helpers to work with C String
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
81 } |
3f6378647371
Start work on cinst. Strhelp new helpers to work with C String
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
82 |
116
c602d8cfa619
Refactoring: unified naming of string vector functions.
Sascha Wilde <wilde@intevation.de>
parents:
91
diff
changeset
|
83 void strv_append (char ***pArray, const char *string, const size_t len) |
59
3f6378647371
Start work on cinst. Strhelp new helpers to work with C String
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
84 { |
905
698b6a9bd75e
Fix coding style for C code
Andre Heinecke <andre.heinecke@intevation.de>
parents:
404
diff
changeset
|
85 unsigned int old_len = 0; |
60
6acb1dae6185
Use strn functions and improve error handling.
Andre Heinecke <aheinecke@intevation.de>
parents:
59
diff
changeset
|
86 |
905
698b6a9bd75e
Fix coding style for C code
Andre Heinecke <andre.heinecke@intevation.de>
parents:
404
diff
changeset
|
87 if (!*pArray) |
698b6a9bd75e
Fix coding style for C code
Andre Heinecke <andre.heinecke@intevation.de>
parents:
404
diff
changeset
|
88 { |
698b6a9bd75e
Fix coding style for C code
Andre Heinecke <andre.heinecke@intevation.de>
parents:
404
diff
changeset
|
89 *pArray = xmalloc(2 * sizeof(char*)); |
698b6a9bd75e
Fix coding style for C code
Andre Heinecke <andre.heinecke@intevation.de>
parents:
404
diff
changeset
|
90 (*pArray)[0] = xstrndup(string, len); |
698b6a9bd75e
Fix coding style for C code
Andre Heinecke <andre.heinecke@intevation.de>
parents:
404
diff
changeset
|
91 (*pArray)[1] = NULL; |
698b6a9bd75e
Fix coding style for C code
Andre Heinecke <andre.heinecke@intevation.de>
parents:
404
diff
changeset
|
92 return; |
60
6acb1dae6185
Use strn functions and improve error handling.
Andre Heinecke <aheinecke@intevation.de>
parents:
59
diff
changeset
|
93 } |
905
698b6a9bd75e
Fix coding style for C code
Andre Heinecke <andre.heinecke@intevation.de>
parents:
404
diff
changeset
|
94 old_len = strv_length(*pArray); |
698b6a9bd75e
Fix coding style for C code
Andre Heinecke <andre.heinecke@intevation.de>
parents:
404
diff
changeset
|
95 *pArray = xrealloc(*pArray, sizeof(char**) * (old_len + 2)); |
59
3f6378647371
Start work on cinst. Strhelp new helpers to work with C String
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
96 |
905
698b6a9bd75e
Fix coding style for C code
Andre Heinecke <andre.heinecke@intevation.de>
parents:
404
diff
changeset
|
97 (*pArray)[old_len] = xstrndup(string, len); |
698b6a9bd75e
Fix coding style for C code
Andre Heinecke <andre.heinecke@intevation.de>
parents:
404
diff
changeset
|
98 (*pArray)[old_len + 1] = NULL; |
59
3f6378647371
Start work on cinst. Strhelp new helpers to work with C String
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
99 } |
3f6378647371
Start work on cinst. Strhelp new helpers to work with C String
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
100 |
91
80ab2168760f
Also add output size handling to str_append_str
Andre Heinecke <aheinecke@intevation.de>
parents:
63
diff
changeset
|
101 void |
80ab2168760f
Also add output size handling to str_append_str
Andre Heinecke <aheinecke@intevation.de>
parents:
63
diff
changeset
|
102 str_append_str(char **pDst, size_t *dst_len, const char *appendage, const size_t len) |
59
3f6378647371
Start work on cinst. Strhelp new helpers to work with C String
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
103 { |
905
698b6a9bd75e
Fix coding style for C code
Andre Heinecke <andre.heinecke@intevation.de>
parents:
404
diff
changeset
|
104 if (!appendage) |
698b6a9bd75e
Fix coding style for C code
Andre Heinecke <andre.heinecke@intevation.de>
parents:
404
diff
changeset
|
105 return; |
59
3f6378647371
Start work on cinst. Strhelp new helpers to work with C String
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
106 |
905
698b6a9bd75e
Fix coding style for C code
Andre Heinecke <andre.heinecke@intevation.de>
parents:
404
diff
changeset
|
107 if (!(*pDst)) |
698b6a9bd75e
Fix coding style for C code
Andre Heinecke <andre.heinecke@intevation.de>
parents:
404
diff
changeset
|
108 { |
698b6a9bd75e
Fix coding style for C code
Andre Heinecke <andre.heinecke@intevation.de>
parents:
404
diff
changeset
|
109 *pDst = xstrndup(appendage, len); |
698b6a9bd75e
Fix coding style for C code
Andre Heinecke <andre.heinecke@intevation.de>
parents:
404
diff
changeset
|
110 *dst_len = len; |
698b6a9bd75e
Fix coding style for C code
Andre Heinecke <andre.heinecke@intevation.de>
parents:
404
diff
changeset
|
111 } |
698b6a9bd75e
Fix coding style for C code
Andre Heinecke <andre.heinecke@intevation.de>
parents:
404
diff
changeset
|
112 else |
698b6a9bd75e
Fix coding style for C code
Andre Heinecke <andre.heinecke@intevation.de>
parents:
404
diff
changeset
|
113 { |
698b6a9bd75e
Fix coding style for C code
Andre Heinecke <andre.heinecke@intevation.de>
parents:
404
diff
changeset
|
114 size_t new_size = (*dst_len) + len + 1; |
698b6a9bd75e
Fix coding style for C code
Andre Heinecke <andre.heinecke@intevation.de>
parents:
404
diff
changeset
|
115 char *p_old = *pDst; |
698b6a9bd75e
Fix coding style for C code
Andre Heinecke <andre.heinecke@intevation.de>
parents:
404
diff
changeset
|
116 *pDst = xmalloc(new_size); |
698b6a9bd75e
Fix coding style for C code
Andre Heinecke <andre.heinecke@intevation.de>
parents:
404
diff
changeset
|
117 strncpy(*pDst, p_old, *dst_len); |
698b6a9bd75e
Fix coding style for C code
Andre Heinecke <andre.heinecke@intevation.de>
parents:
404
diff
changeset
|
118 strncpy(*pDst + *dst_len, appendage, len); |
698b6a9bd75e
Fix coding style for C code
Andre Heinecke <andre.heinecke@intevation.de>
parents:
404
diff
changeset
|
119 *dst_len = new_size - 1; |
698b6a9bd75e
Fix coding style for C code
Andre Heinecke <andre.heinecke@intevation.de>
parents:
404
diff
changeset
|
120 (*pDst)[*dst_len] = '\0'; |
698b6a9bd75e
Fix coding style for C code
Andre Heinecke <andre.heinecke@intevation.de>
parents:
404
diff
changeset
|
121 free (p_old); |
60
6acb1dae6185
Use strn functions and improve error handling.
Andre Heinecke <aheinecke@intevation.de>
parents:
59
diff
changeset
|
122 } |
59
3f6378647371
Start work on cinst. Strhelp new helpers to work with C String
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
123 } |
3f6378647371
Start work on cinst. Strhelp new helpers to work with C String
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
124 |
3f6378647371
Start work on cinst. Strhelp new helpers to work with C String
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
125 void |
116
c602d8cfa619
Refactoring: unified naming of string vector functions.
Sascha Wilde <wilde@intevation.de>
parents:
91
diff
changeset
|
126 strv_free (char **str_array) |
59
3f6378647371
Start work on cinst. Strhelp new helpers to work with C String
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
127 { |
3f6378647371
Start work on cinst. Strhelp new helpers to work with C String
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
128 if (str_array) |
3f6378647371
Start work on cinst. Strhelp new helpers to work with C String
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
129 { |
3f6378647371
Start work on cinst. Strhelp new helpers to work with C String
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
130 int i; |
3f6378647371
Start work on cinst. Strhelp new helpers to work with C String
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
131 |
3f6378647371
Start work on cinst. Strhelp new helpers to work with C String
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
132 for (i = 0; str_array[i] != NULL; i++) |
3f6378647371
Start work on cinst. Strhelp new helpers to work with C String
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
133 free (str_array[i]); |
3f6378647371
Start work on cinst. Strhelp new helpers to work with C String
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
134 |
3f6378647371
Start work on cinst. Strhelp new helpers to work with C String
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
135 free (str_array); |
3f6378647371
Start work on cinst. Strhelp new helpers to work with C String
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
136 } |
3f6378647371
Start work on cinst. Strhelp new helpers to work with C String
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
137 } |
131
9104b1b2e4da
Added string comparison functions.
Sascha Wilde <wilde@intevation.de>
parents:
116
diff
changeset
|
138 |
9104b1b2e4da
Added string comparison functions.
Sascha Wilde <wilde@intevation.de>
parents:
116
diff
changeset
|
139 bool |
9104b1b2e4da
Added string comparison functions.
Sascha Wilde <wilde@intevation.de>
parents:
116
diff
changeset
|
140 str_equal (char *s1, char *s2) |
9104b1b2e4da
Added string comparison functions.
Sascha Wilde <wilde@intevation.de>
parents:
116
diff
changeset
|
141 { |
143
b026e6d2a161
Make flawfinder (a bit more) happy.
Sascha Wilde <wilde@intevation.de>
parents:
136
diff
changeset
|
142 size_t l1 = strlen(s1); /* Flawfinder: ignore */ |
b026e6d2a161
Make flawfinder (a bit more) happy.
Sascha Wilde <wilde@intevation.de>
parents:
136
diff
changeset
|
143 size_t l2 = strlen(s2); /* Flawfinder: ignore */ |
131
9104b1b2e4da
Added string comparison functions.
Sascha Wilde <wilde@intevation.de>
parents:
116
diff
changeset
|
144 if ((l1 == l2) && |
136
5fa4791d6d0e
Replaced unnecessary strncmp with strcmp.
Sascha Wilde <wilde@intevation.de>
parents:
135
diff
changeset
|
145 (strcmp(s1, s2) == 0)) |
131
9104b1b2e4da
Added string comparison functions.
Sascha Wilde <wilde@intevation.de>
parents:
116
diff
changeset
|
146 return true; |
9104b1b2e4da
Added string comparison functions.
Sascha Wilde <wilde@intevation.de>
parents:
116
diff
changeset
|
147 else |
9104b1b2e4da
Added string comparison functions.
Sascha Wilde <wilde@intevation.de>
parents:
116
diff
changeset
|
148 return false; |
9104b1b2e4da
Added string comparison functions.
Sascha Wilde <wilde@intevation.de>
parents:
116
diff
changeset
|
149 } |
9104b1b2e4da
Added string comparison functions.
Sascha Wilde <wilde@intevation.de>
parents:
116
diff
changeset
|
150 |
9104b1b2e4da
Added string comparison functions.
Sascha Wilde <wilde@intevation.de>
parents:
116
diff
changeset
|
151 bool |
9104b1b2e4da
Added string comparison functions.
Sascha Wilde <wilde@intevation.de>
parents:
116
diff
changeset
|
152 str_starts_with (char *s1, char *s2) |
9104b1b2e4da
Added string comparison functions.
Sascha Wilde <wilde@intevation.de>
parents:
116
diff
changeset
|
153 { |
143
b026e6d2a161
Make flawfinder (a bit more) happy.
Sascha Wilde <wilde@intevation.de>
parents:
136
diff
changeset
|
154 size_t l2 = strlen(s2); /* Flawfinder: ignore */ |
b026e6d2a161
Make flawfinder (a bit more) happy.
Sascha Wilde <wilde@intevation.de>
parents:
136
diff
changeset
|
155 if (strncmp(s1, s2, l2) == 0) |
131
9104b1b2e4da
Added string comparison functions.
Sascha Wilde <wilde@intevation.de>
parents:
116
diff
changeset
|
156 return true; |
9104b1b2e4da
Added string comparison functions.
Sascha Wilde <wilde@intevation.de>
parents:
116
diff
changeset
|
157 else |
9104b1b2e4da
Added string comparison functions.
Sascha Wilde <wilde@intevation.de>
parents:
116
diff
changeset
|
158 return false; |
9104b1b2e4da
Added string comparison functions.
Sascha Wilde <wilde@intevation.de>
parents:
116
diff
changeset
|
159 } |
133
c719d3fdbc15
Added functrion to trim white space from string.
Sascha Wilde <wilde@intevation.de>
parents:
131
diff
changeset
|
160 |
c719d3fdbc15
Added functrion to trim white space from string.
Sascha Wilde <wilde@intevation.de>
parents:
131
diff
changeset
|
161 void |
c719d3fdbc15
Added functrion to trim white space from string.
Sascha Wilde <wilde@intevation.de>
parents:
131
diff
changeset
|
162 str_trim (char **s) |
c719d3fdbc15
Added functrion to trim white space from string.
Sascha Wilde <wilde@intevation.de>
parents:
131
diff
changeset
|
163 { |
c719d3fdbc15
Added functrion to trim white space from string.
Sascha Wilde <wilde@intevation.de>
parents:
131
diff
changeset
|
164 size_t i; |
135
3fb6ddd6b70d
str_trim: do nothing if *s is NULL.
Sascha Wilde <wilde@intevation.de>
parents:
134
diff
changeset
|
165 if (*s != NULL) |
3fb6ddd6b70d
str_trim: do nothing if *s is NULL.
Sascha Wilde <wilde@intevation.de>
parents:
134
diff
changeset
|
166 { |
3fb6ddd6b70d
str_trim: do nothing if *s is NULL.
Sascha Wilde <wilde@intevation.de>
parents:
134
diff
changeset
|
167 while (isspace(**s)) |
3fb6ddd6b70d
str_trim: do nothing if *s is NULL.
Sascha Wilde <wilde@intevation.de>
parents:
134
diff
changeset
|
168 (*s)++; |
143
b026e6d2a161
Make flawfinder (a bit more) happy.
Sascha Wilde <wilde@intevation.de>
parents:
136
diff
changeset
|
169 i = strlen(*s); /* Flawfinder: ignore */ |
135
3fb6ddd6b70d
str_trim: do nothing if *s is NULL.
Sascha Wilde <wilde@intevation.de>
parents:
134
diff
changeset
|
170 while (isspace((*s)[--i])) |
3fb6ddd6b70d
str_trim: do nothing if *s is NULL.
Sascha Wilde <wilde@intevation.de>
parents:
134
diff
changeset
|
171 (*s)[i] = '\0'; |
3fb6ddd6b70d
str_trim: do nothing if *s is NULL.
Sascha Wilde <wilde@intevation.de>
parents:
134
diff
changeset
|
172 } |
133
c719d3fdbc15
Added functrion to trim white space from string.
Sascha Wilde <wilde@intevation.de>
parents:
131
diff
changeset
|
173 } |
160
bf4bfd8843bd
Add memory allocating base64 decode function
Andre Heinecke <aheinecke@intevation.de>
parents:
143
diff
changeset
|
174 |
bf4bfd8843bd
Add memory allocating base64 decode function
Andre Heinecke <aheinecke@intevation.de>
parents:
143
diff
changeset
|
175 int str_base64_decode(char **dst, size_t *dst_size, char *src, |
bf4bfd8843bd
Add memory allocating base64 decode function
Andre Heinecke <aheinecke@intevation.de>
parents:
143
diff
changeset
|
176 size_t src_size) |
bf4bfd8843bd
Add memory allocating base64 decode function
Andre Heinecke <aheinecke@intevation.de>
parents:
143
diff
changeset
|
177 { |
905
698b6a9bd75e
Fix coding style for C code
Andre Heinecke <andre.heinecke@intevation.de>
parents:
404
diff
changeset
|
178 int ret = -1; |
160
bf4bfd8843bd
Add memory allocating base64 decode function
Andre Heinecke <aheinecke@intevation.de>
parents:
143
diff
changeset
|
179 |
905
698b6a9bd75e
Fix coding style for C code
Andre Heinecke <andre.heinecke@intevation.de>
parents:
404
diff
changeset
|
180 if (!dst || *dst) |
698b6a9bd75e
Fix coding style for C code
Andre Heinecke <andre.heinecke@intevation.de>
parents:
404
diff
changeset
|
181 { |
698b6a9bd75e
Fix coding style for C code
Andre Heinecke <andre.heinecke@intevation.de>
parents:
404
diff
changeset
|
182 return -1; |
160
bf4bfd8843bd
Add memory allocating base64 decode function
Andre Heinecke <aheinecke@intevation.de>
parents:
143
diff
changeset
|
183 } |
bf4bfd8843bd
Add memory allocating base64 decode function
Andre Heinecke <aheinecke@intevation.de>
parents:
143
diff
changeset
|
184 |
905
698b6a9bd75e
Fix coding style for C code
Andre Heinecke <andre.heinecke@intevation.de>
parents:
404
diff
changeset
|
185 /* Check the needed size for the buffer */ |
698b6a9bd75e
Fix coding style for C code
Andre Heinecke <andre.heinecke@intevation.de>
parents:
404
diff
changeset
|
186 ret = base64_decode(NULL, dst_size, |
698b6a9bd75e
Fix coding style for C code
Andre Heinecke <andre.heinecke@intevation.de>
parents:
404
diff
changeset
|
187 (unsigned char *)src, src_size); |
160
bf4bfd8843bd
Add memory allocating base64 decode function
Andre Heinecke <aheinecke@intevation.de>
parents:
143
diff
changeset
|
188 |
905
698b6a9bd75e
Fix coding style for C code
Andre Heinecke <andre.heinecke@intevation.de>
parents:
404
diff
changeset
|
189 if (ret != 0 && ret != POLARSSL_ERR_BASE64_BUFFER_TOO_SMALL) |
698b6a9bd75e
Fix coding style for C code
Andre Heinecke <andre.heinecke@intevation.de>
parents:
404
diff
changeset
|
190 { |
698b6a9bd75e
Fix coding style for C code
Andre Heinecke <andre.heinecke@intevation.de>
parents:
404
diff
changeset
|
191 return ret; |
160
bf4bfd8843bd
Add memory allocating base64 decode function
Andre Heinecke <aheinecke@intevation.de>
parents:
143
diff
changeset
|
192 } |
bf4bfd8843bd
Add memory allocating base64 decode function
Andre Heinecke <aheinecke@intevation.de>
parents:
143
diff
changeset
|
193 |
905
698b6a9bd75e
Fix coding style for C code
Andre Heinecke <andre.heinecke@intevation.de>
parents:
404
diff
changeset
|
194 *dst = xmalloc(*dst_size); |
698b6a9bd75e
Fix coding style for C code
Andre Heinecke <andre.heinecke@intevation.de>
parents:
404
diff
changeset
|
195 memset (*dst, 0, *dst_size); |
160
bf4bfd8843bd
Add memory allocating base64 decode function
Andre Heinecke <aheinecke@intevation.de>
parents:
143
diff
changeset
|
196 |
905
698b6a9bd75e
Fix coding style for C code
Andre Heinecke <andre.heinecke@intevation.de>
parents:
404
diff
changeset
|
197 ret = base64_decode((unsigned char *)*dst, dst_size, |
698b6a9bd75e
Fix coding style for C code
Andre Heinecke <andre.heinecke@intevation.de>
parents:
404
diff
changeset
|
198 (unsigned char *)src, src_size); |
698b6a9bd75e
Fix coding style for C code
Andre Heinecke <andre.heinecke@intevation.de>
parents:
404
diff
changeset
|
199 if (ret) |
698b6a9bd75e
Fix coding style for C code
Andre Heinecke <andre.heinecke@intevation.de>
parents:
404
diff
changeset
|
200 { |
698b6a9bd75e
Fix coding style for C code
Andre Heinecke <andre.heinecke@intevation.de>
parents:
404
diff
changeset
|
201 free (*dst); |
698b6a9bd75e
Fix coding style for C code
Andre Heinecke <andre.heinecke@intevation.de>
parents:
404
diff
changeset
|
202 *dst = NULL; |
698b6a9bd75e
Fix coding style for C code
Andre Heinecke <andre.heinecke@intevation.de>
parents:
404
diff
changeset
|
203 *dst_size = 0; |
160
bf4bfd8843bd
Add memory allocating base64 decode function
Andre Heinecke <aheinecke@intevation.de>
parents:
143
diff
changeset
|
204 } |
905
698b6a9bd75e
Fix coding style for C code
Andre Heinecke <andre.heinecke@intevation.de>
parents:
404
diff
changeset
|
205 return ret; |
160
bf4bfd8843bd
Add memory allocating base64 decode function
Andre Heinecke <aheinecke@intevation.de>
parents:
143
diff
changeset
|
206 } |
251
c596568fa45b
Add utf16 conversion functions for Windows.
Andre Heinecke <aheinecke@intevation.de>
parents:
183
diff
changeset
|
207 |
c596568fa45b
Add utf16 conversion functions for Windows.
Andre Heinecke <aheinecke@intevation.de>
parents:
183
diff
changeset
|
208 void |
c596568fa45b
Add utf16 conversion functions for Windows.
Andre Heinecke <aheinecke@intevation.de>
parents:
183
diff
changeset
|
209 xfree (void *p) |
c596568fa45b
Add utf16 conversion functions for Windows.
Andre Heinecke <aheinecke@intevation.de>
parents:
183
diff
changeset
|
210 { |
c596568fa45b
Add utf16 conversion functions for Windows.
Andre Heinecke <aheinecke@intevation.de>
parents:
183
diff
changeset
|
211 if (p) |
c596568fa45b
Add utf16 conversion functions for Windows.
Andre Heinecke <aheinecke@intevation.de>
parents:
183
diff
changeset
|
212 free (p); |
c596568fa45b
Add utf16 conversion functions for Windows.
Andre Heinecke <aheinecke@intevation.de>
parents:
183
diff
changeset
|
213 } |
c596568fa45b
Add utf16 conversion functions for Windows.
Andre Heinecke <aheinecke@intevation.de>
parents:
183
diff
changeset
|
214 |
319
4077eff1dd39
Added terminateing version of asprintf.
Sascha Wilde <wilde@intevation.de>
parents:
288
diff
changeset
|
215 int |
4077eff1dd39
Added terminateing version of asprintf.
Sascha Wilde <wilde@intevation.de>
parents:
288
diff
changeset
|
216 xasprintf (char **strp, const char *fmt, ...) |
4077eff1dd39
Added terminateing version of asprintf.
Sascha Wilde <wilde@intevation.de>
parents:
288
diff
changeset
|
217 { |
4077eff1dd39
Added terminateing version of asprintf.
Sascha Wilde <wilde@intevation.de>
parents:
288
diff
changeset
|
218 int ret; |
4077eff1dd39
Added terminateing version of asprintf.
Sascha Wilde <wilde@intevation.de>
parents:
288
diff
changeset
|
219 va_list ap; |
4077eff1dd39
Added terminateing version of asprintf.
Sascha Wilde <wilde@intevation.de>
parents:
288
diff
changeset
|
220 va_start(ap, fmt); |
4077eff1dd39
Added terminateing version of asprintf.
Sascha Wilde <wilde@intevation.de>
parents:
288
diff
changeset
|
221 ret = vasprintf(strp, fmt, ap); |
4077eff1dd39
Added terminateing version of asprintf.
Sascha Wilde <wilde@intevation.de>
parents:
288
diff
changeset
|
222 va_end(ap); |
4077eff1dd39
Added terminateing version of asprintf.
Sascha Wilde <wilde@intevation.de>
parents:
288
diff
changeset
|
223 |
4077eff1dd39
Added terminateing version of asprintf.
Sascha Wilde <wilde@intevation.de>
parents:
288
diff
changeset
|
224 if (ret == -1) |
4077eff1dd39
Added terminateing version of asprintf.
Sascha Wilde <wilde@intevation.de>
parents:
288
diff
changeset
|
225 out_of_core(); |
4077eff1dd39
Added terminateing version of asprintf.
Sascha Wilde <wilde@intevation.de>
parents:
288
diff
changeset
|
226 |
4077eff1dd39
Added terminateing version of asprintf.
Sascha Wilde <wilde@intevation.de>
parents:
288
diff
changeset
|
227 return ret; |
4077eff1dd39
Added terminateing version of asprintf.
Sascha Wilde <wilde@intevation.de>
parents:
288
diff
changeset
|
228 } |
4077eff1dd39
Added terminateing version of asprintf.
Sascha Wilde <wilde@intevation.de>
parents:
288
diff
changeset
|
229 |
251
c596568fa45b
Add utf16 conversion functions for Windows.
Andre Heinecke <aheinecke@intevation.de>
parents:
183
diff
changeset
|
230 #ifdef WIN32 |
c596568fa45b
Add utf16 conversion functions for Windows.
Andre Heinecke <aheinecke@intevation.de>
parents:
183
diff
changeset
|
231 /* Adapted from GPGOL rev. e512053 */ |
c596568fa45b
Add utf16 conversion functions for Windows.
Andre Heinecke <aheinecke@intevation.de>
parents:
183
diff
changeset
|
232 char * |
c596568fa45b
Add utf16 conversion functions for Windows.
Andre Heinecke <aheinecke@intevation.de>
parents:
183
diff
changeset
|
233 wchar_to_utf8 (const wchar_t *string, size_t len) |
c596568fa45b
Add utf16 conversion functions for Windows.
Andre Heinecke <aheinecke@intevation.de>
parents:
183
diff
changeset
|
234 { |
c596568fa45b
Add utf16 conversion functions for Windows.
Andre Heinecke <aheinecke@intevation.de>
parents:
183
diff
changeset
|
235 int n, ilen; |
c596568fa45b
Add utf16 conversion functions for Windows.
Andre Heinecke <aheinecke@intevation.de>
parents:
183
diff
changeset
|
236 char *result; |
c596568fa45b
Add utf16 conversion functions for Windows.
Andre Heinecke <aheinecke@intevation.de>
parents:
183
diff
changeset
|
237 |
c596568fa45b
Add utf16 conversion functions for Windows.
Andre Heinecke <aheinecke@intevation.de>
parents:
183
diff
changeset
|
238 ilen = (int) len; |
c596568fa45b
Add utf16 conversion functions for Windows.
Andre Heinecke <aheinecke@intevation.de>
parents:
183
diff
changeset
|
239 if (ilen < 0) |
c596568fa45b
Add utf16 conversion functions for Windows.
Andre Heinecke <aheinecke@intevation.de>
parents:
183
diff
changeset
|
240 return NULL; |
c596568fa45b
Add utf16 conversion functions for Windows.
Andre Heinecke <aheinecke@intevation.de>
parents:
183
diff
changeset
|
241 |
c596568fa45b
Add utf16 conversion functions for Windows.
Andre Heinecke <aheinecke@intevation.de>
parents:
183
diff
changeset
|
242 /* Note, that CP_UTF8 is not defined in Windows versions earlier |
c596568fa45b
Add utf16 conversion functions for Windows.
Andre Heinecke <aheinecke@intevation.de>
parents:
183
diff
changeset
|
243 than NT.*/ |
c596568fa45b
Add utf16 conversion functions for Windows.
Andre Heinecke <aheinecke@intevation.de>
parents:
183
diff
changeset
|
244 n = WideCharToMultiByte (CP_UTF8, 0, string, ilen, NULL, 0, NULL, NULL); |
c596568fa45b
Add utf16 conversion functions for Windows.
Andre Heinecke <aheinecke@intevation.de>
parents:
183
diff
changeset
|
245 if (n < 0) |
c596568fa45b
Add utf16 conversion functions for Windows.
Andre Heinecke <aheinecke@intevation.de>
parents:
183
diff
changeset
|
246 return NULL; |
c596568fa45b
Add utf16 conversion functions for Windows.
Andre Heinecke <aheinecke@intevation.de>
parents:
183
diff
changeset
|
247 |
c596568fa45b
Add utf16 conversion functions for Windows.
Andre Heinecke <aheinecke@intevation.de>
parents:
183
diff
changeset
|
248 result = xmalloc ((size_t)n+1); |
c596568fa45b
Add utf16 conversion functions for Windows.
Andre Heinecke <aheinecke@intevation.de>
parents:
183
diff
changeset
|
249 n = WideCharToMultiByte (CP_UTF8, 0, string, ilen, result, n, NULL, NULL); |
c596568fa45b
Add utf16 conversion functions for Windows.
Andre Heinecke <aheinecke@intevation.de>
parents:
183
diff
changeset
|
250 if (n < 0) |
c596568fa45b
Add utf16 conversion functions for Windows.
Andre Heinecke <aheinecke@intevation.de>
parents:
183
diff
changeset
|
251 { |
c596568fa45b
Add utf16 conversion functions for Windows.
Andre Heinecke <aheinecke@intevation.de>
parents:
183
diff
changeset
|
252 xfree (result); |
c596568fa45b
Add utf16 conversion functions for Windows.
Andre Heinecke <aheinecke@intevation.de>
parents:
183
diff
changeset
|
253 return NULL; |
c596568fa45b
Add utf16 conversion functions for Windows.
Andre Heinecke <aheinecke@intevation.de>
parents:
183
diff
changeset
|
254 } |
288
c4a989a0d6cf
Ensure that the utf8 string is always 0 terminated.
Andre Heinecke <aheinecke@intevation.de>
parents:
251
diff
changeset
|
255 result[n] = 0; |
251
c596568fa45b
Add utf16 conversion functions for Windows.
Andre Heinecke <aheinecke@intevation.de>
parents:
183
diff
changeset
|
256 return result; |
c596568fa45b
Add utf16 conversion functions for Windows.
Andre Heinecke <aheinecke@intevation.de>
parents:
183
diff
changeset
|
257 } |
c596568fa45b
Add utf16 conversion functions for Windows.
Andre Heinecke <aheinecke@intevation.de>
parents:
183
diff
changeset
|
258 |
c596568fa45b
Add utf16 conversion functions for Windows.
Andre Heinecke <aheinecke@intevation.de>
parents:
183
diff
changeset
|
259 /* Adapted from GPGOL rev. e512053 */ |
c596568fa45b
Add utf16 conversion functions for Windows.
Andre Heinecke <aheinecke@intevation.de>
parents:
183
diff
changeset
|
260 wchar_t * |
c596568fa45b
Add utf16 conversion functions for Windows.
Andre Heinecke <aheinecke@intevation.de>
parents:
183
diff
changeset
|
261 utf8_to_wchar (const char *string, size_t len) |
c596568fa45b
Add utf16 conversion functions for Windows.
Andre Heinecke <aheinecke@intevation.de>
parents:
183
diff
changeset
|
262 { |
c596568fa45b
Add utf16 conversion functions for Windows.
Andre Heinecke <aheinecke@intevation.de>
parents:
183
diff
changeset
|
263 int n, ilen; |
c596568fa45b
Add utf16 conversion functions for Windows.
Andre Heinecke <aheinecke@intevation.de>
parents:
183
diff
changeset
|
264 wchar_t *result; |
c596568fa45b
Add utf16 conversion functions for Windows.
Andre Heinecke <aheinecke@intevation.de>
parents:
183
diff
changeset
|
265 |
c596568fa45b
Add utf16 conversion functions for Windows.
Andre Heinecke <aheinecke@intevation.de>
parents:
183
diff
changeset
|
266 ilen = (int) len; |
c596568fa45b
Add utf16 conversion functions for Windows.
Andre Heinecke <aheinecke@intevation.de>
parents:
183
diff
changeset
|
267 if (ilen < 0) |
c596568fa45b
Add utf16 conversion functions for Windows.
Andre Heinecke <aheinecke@intevation.de>
parents:
183
diff
changeset
|
268 return NULL; |
c596568fa45b
Add utf16 conversion functions for Windows.
Andre Heinecke <aheinecke@intevation.de>
parents:
183
diff
changeset
|
269 |
c596568fa45b
Add utf16 conversion functions for Windows.
Andre Heinecke <aheinecke@intevation.de>
parents:
183
diff
changeset
|
270 n = MultiByteToWideChar (CP_UTF8, 0, string, ilen, NULL, 0); |
c596568fa45b
Add utf16 conversion functions for Windows.
Andre Heinecke <aheinecke@intevation.de>
parents:
183
diff
changeset
|
271 if (n < 0 || n + 1 < 0) |
c596568fa45b
Add utf16 conversion functions for Windows.
Andre Heinecke <aheinecke@intevation.de>
parents:
183
diff
changeset
|
272 return NULL; |
c596568fa45b
Add utf16 conversion functions for Windows.
Andre Heinecke <aheinecke@intevation.de>
parents:
183
diff
changeset
|
273 |
c596568fa45b
Add utf16 conversion functions for Windows.
Andre Heinecke <aheinecke@intevation.de>
parents:
183
diff
changeset
|
274 result = xmalloc ((size_t)(n+1) * sizeof *result); |
c596568fa45b
Add utf16 conversion functions for Windows.
Andre Heinecke <aheinecke@intevation.de>
parents:
183
diff
changeset
|
275 n = MultiByteToWideChar (CP_UTF8, 0, string, ilen, result, n); |
c596568fa45b
Add utf16 conversion functions for Windows.
Andre Heinecke <aheinecke@intevation.de>
parents:
183
diff
changeset
|
276 if (n < 0) |
c596568fa45b
Add utf16 conversion functions for Windows.
Andre Heinecke <aheinecke@intevation.de>
parents:
183
diff
changeset
|
277 { |
c596568fa45b
Add utf16 conversion functions for Windows.
Andre Heinecke <aheinecke@intevation.de>
parents:
183
diff
changeset
|
278 xfree (result); |
c596568fa45b
Add utf16 conversion functions for Windows.
Andre Heinecke <aheinecke@intevation.de>
parents:
183
diff
changeset
|
279 return NULL; |
c596568fa45b
Add utf16 conversion functions for Windows.
Andre Heinecke <aheinecke@intevation.de>
parents:
183
diff
changeset
|
280 } |
c596568fa45b
Add utf16 conversion functions for Windows.
Andre Heinecke <aheinecke@intevation.de>
parents:
183
diff
changeset
|
281 result[n] = 0; |
c596568fa45b
Add utf16 conversion functions for Windows.
Andre Heinecke <aheinecke@intevation.de>
parents:
183
diff
changeset
|
282 return result; |
c596568fa45b
Add utf16 conversion functions for Windows.
Andre Heinecke <aheinecke@intevation.de>
parents:
183
diff
changeset
|
283 } |
1158
ffdc8cba139a
(issue36) Add acp_to_wchar based on utf8_to_wchar
Andre Heinecke <andre.heinecke@intevation.de>
parents:
905
diff
changeset
|
284 |
ffdc8cba139a
(issue36) Add acp_to_wchar based on utf8_to_wchar
Andre Heinecke <andre.heinecke@intevation.de>
parents:
905
diff
changeset
|
285 wchar_t |
ffdc8cba139a
(issue36) Add acp_to_wchar based on utf8_to_wchar
Andre Heinecke <andre.heinecke@intevation.de>
parents:
905
diff
changeset
|
286 *acp_to_wchar (const char *string, size_t len) |
ffdc8cba139a
(issue36) Add acp_to_wchar based on utf8_to_wchar
Andre Heinecke <andre.heinecke@intevation.de>
parents:
905
diff
changeset
|
287 { |
ffdc8cba139a
(issue36) Add acp_to_wchar based on utf8_to_wchar
Andre Heinecke <andre.heinecke@intevation.de>
parents:
905
diff
changeset
|
288 int n, ilen; |
ffdc8cba139a
(issue36) Add acp_to_wchar based on utf8_to_wchar
Andre Heinecke <andre.heinecke@intevation.de>
parents:
905
diff
changeset
|
289 wchar_t *result; |
ffdc8cba139a
(issue36) Add acp_to_wchar based on utf8_to_wchar
Andre Heinecke <andre.heinecke@intevation.de>
parents:
905
diff
changeset
|
290 |
ffdc8cba139a
(issue36) Add acp_to_wchar based on utf8_to_wchar
Andre Heinecke <andre.heinecke@intevation.de>
parents:
905
diff
changeset
|
291 ilen = (int) len; |
ffdc8cba139a
(issue36) Add acp_to_wchar based on utf8_to_wchar
Andre Heinecke <andre.heinecke@intevation.de>
parents:
905
diff
changeset
|
292 if (ilen < 0) |
ffdc8cba139a
(issue36) Add acp_to_wchar based on utf8_to_wchar
Andre Heinecke <andre.heinecke@intevation.de>
parents:
905
diff
changeset
|
293 return NULL; |
ffdc8cba139a
(issue36) Add acp_to_wchar based on utf8_to_wchar
Andre Heinecke <andre.heinecke@intevation.de>
parents:
905
diff
changeset
|
294 |
ffdc8cba139a
(issue36) Add acp_to_wchar based on utf8_to_wchar
Andre Heinecke <andre.heinecke@intevation.de>
parents:
905
diff
changeset
|
295 n = MultiByteToWideChar (CP_ACP, 0, string, ilen, NULL, 0); |
ffdc8cba139a
(issue36) Add acp_to_wchar based on utf8_to_wchar
Andre Heinecke <andre.heinecke@intevation.de>
parents:
905
diff
changeset
|
296 if (n < 0 || n + 1 < 0) |
ffdc8cba139a
(issue36) Add acp_to_wchar based on utf8_to_wchar
Andre Heinecke <andre.heinecke@intevation.de>
parents:
905
diff
changeset
|
297 return NULL; |
ffdc8cba139a
(issue36) Add acp_to_wchar based on utf8_to_wchar
Andre Heinecke <andre.heinecke@intevation.de>
parents:
905
diff
changeset
|
298 |
ffdc8cba139a
(issue36) Add acp_to_wchar based on utf8_to_wchar
Andre Heinecke <andre.heinecke@intevation.de>
parents:
905
diff
changeset
|
299 result = xmalloc ((size_t)(n+1) * sizeof *result); |
ffdc8cba139a
(issue36) Add acp_to_wchar based on utf8_to_wchar
Andre Heinecke <andre.heinecke@intevation.de>
parents:
905
diff
changeset
|
300 n = MultiByteToWideChar (CP_ACP, 0, string, ilen, result, n); |
ffdc8cba139a
(issue36) Add acp_to_wchar based on utf8_to_wchar
Andre Heinecke <andre.heinecke@intevation.de>
parents:
905
diff
changeset
|
301 if (n < 0) |
ffdc8cba139a
(issue36) Add acp_to_wchar based on utf8_to_wchar
Andre Heinecke <andre.heinecke@intevation.de>
parents:
905
diff
changeset
|
302 { |
ffdc8cba139a
(issue36) Add acp_to_wchar based on utf8_to_wchar
Andre Heinecke <andre.heinecke@intevation.de>
parents:
905
diff
changeset
|
303 xfree (result); |
ffdc8cba139a
(issue36) Add acp_to_wchar based on utf8_to_wchar
Andre Heinecke <andre.heinecke@intevation.de>
parents:
905
diff
changeset
|
304 return NULL; |
ffdc8cba139a
(issue36) Add acp_to_wchar based on utf8_to_wchar
Andre Heinecke <andre.heinecke@intevation.de>
parents:
905
diff
changeset
|
305 } |
ffdc8cba139a
(issue36) Add acp_to_wchar based on utf8_to_wchar
Andre Heinecke <andre.heinecke@intevation.de>
parents:
905
diff
changeset
|
306 result[n] = 0; |
ffdc8cba139a
(issue36) Add acp_to_wchar based on utf8_to_wchar
Andre Heinecke <andre.heinecke@intevation.de>
parents:
905
diff
changeset
|
307 return result; |
ffdc8cba139a
(issue36) Add acp_to_wchar based on utf8_to_wchar
Andre Heinecke <andre.heinecke@intevation.de>
parents:
905
diff
changeset
|
308 } |
251
c596568fa45b
Add utf16 conversion functions for Windows.
Andre Heinecke <aheinecke@intevation.de>
parents:
183
diff
changeset
|
309 #endif |