Mercurial > dovecot > core-2.2
annotate src/lib/hex-binary.c @ 22664:fea53c2725c0
director: Fix director_max_parallel_moves/kicks type
Should be uint, not time.
author | Timo Sirainen <timo.sirainen@dovecot.fi> |
---|---|
date | Thu, 09 Nov 2017 12:24:16 +0200 |
parents | 2e2563132d5f |
children | cb108f786fb4 |
rev | line source |
---|---|
21390
2e2563132d5f
Updated copyright notices to include the year 2017.
Stephan Bosch <stephan.bosch@dovecot.fi>
parents:
21323
diff
changeset
|
1 /* Copyright (c) 2002-2017 Dovecot authors, see the included COPYING file */ |
0 | 2 |
3 #include "lib.h" | |
765
553f050c8313
Added buffer API. Point is to hide all buffer writing behind this API which
Timo Sirainen <tss@iki.fi>
parents:
183
diff
changeset
|
4 #include "buffer.h" |
0 | 5 #include "hex-binary.h" |
6 | |
9634 | 7 static void |
8 binary_to_hex_case(unsigned char *dest, const unsigned char *data, | |
9 size_t size, bool ucase) | |
0 | 10 { |
9634 | 11 unsigned char *p; |
12 char base_char; | |
183
4a7ab9e94f25
size_t fixes for lib/. Changed OFF_T_FORMAT to PRIuOFF_T which is more
Timo Sirainen <tss@iki.fi>
parents:
0
diff
changeset
|
13 size_t i; |
4a7ab9e94f25
size_t fixes for lib/. Changed OFF_T_FORMAT to PRIuOFF_T which is more
Timo Sirainen <tss@iki.fi>
parents:
0
diff
changeset
|
14 int value; |
0 | 15 |
805
5ac361acb316
Marked all non-trivial buffer modifications with @UNSAFE tag. Several
Timo Sirainen <tss@iki.fi>
parents:
765
diff
changeset
|
16 /* @UNSAFE */ |
2376 | 17 base_char = ucase ? 'A' : 'a'; |
805
5ac361acb316
Marked all non-trivial buffer modifications with @UNSAFE tag. Several
Timo Sirainen <tss@iki.fi>
parents:
765
diff
changeset
|
18 |
9634 | 19 p = dest; |
0 | 20 for (i = 0; i < size; i++) { |
21 value = data[i] >> 4; | |
2376 | 22 *p++ = value < 10 ? value + '0' : value - 10 + base_char; |
0 | 23 |
24 value = data[i] & 0x0f; | |
2376 | 25 *p++ = value < 10 ? value + '0' : value - 10 + base_char; |
0 | 26 } |
27 } | |
28 | |
2376 | 29 const char *binary_to_hex(const unsigned char *data, size_t size) |
30 { | |
21323
d223fad9767f
global: Make sure *_malloc() calculations won't cause integer overflows.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
19552
diff
changeset
|
31 unsigned char *dest = t_malloc(MALLOC_MULTIPLY(size, 2) + 1); |
9634 | 32 |
33 binary_to_hex_case(dest, data, size, FALSE); | |
34 dest[size*2] = '\0'; | |
35 return (char *)dest; | |
2376 | 36 } |
37 | |
38 const char *binary_to_hex_ucase(const unsigned char *data, size_t size) | |
39 { | |
21323
d223fad9767f
global: Make sure *_malloc() calculations won't cause integer overflows.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
19552
diff
changeset
|
40 unsigned char *dest = t_malloc(MALLOC_MULTIPLY(size, 2) + 1); |
9634 | 41 |
42 binary_to_hex_case(dest, data, size, TRUE); | |
43 dest[size*2] = '\0'; | |
44 return (char *)dest; | |
45 } | |
46 | |
47 void binary_to_hex_append(string_t *dest, const unsigned char *data, | |
48 size_t size) | |
49 { | |
50 unsigned char *buf; | |
51 | |
52 buf = buffer_append_space_unsafe(dest, size * 2); | |
53 binary_to_hex_case(buf, data, size, FALSE); | |
2376 | 54 } |
55 | |
903
fd8888f6f037
Naming style changes, finally got tired of most of the typedefs. Also the
Timo Sirainen <tss@iki.fi>
parents:
805
diff
changeset
|
56 int hex_to_binary(const char *data, buffer_t *dest) |
0 | 57 { |
183
4a7ab9e94f25
size_t fixes for lib/. Changed OFF_T_FORMAT to PRIuOFF_T which is more
Timo Sirainen <tss@iki.fi>
parents:
0
diff
changeset
|
58 int value; |
0 | 59 |
60 while (*data != '\0') { | |
61 if (*data >= '0' && *data <= '9') | |
62 value = (*data - '0') << 4; | |
63 else if (*data >= 'a' && *data <= 'f') | |
64 value = (*data - 'a' + 10) << 4; | |
65 else if (*data >= 'A' && *data <= 'F') | |
66 value = (*data - 'A' + 10) << 4; | |
67 else | |
68 return -1; | |
69 | |
70 data++; | |
71 if (*data >= '0' && *data <= '9') | |
72 value |= *data - '0'; | |
73 else if (*data >= 'a' && *data <= 'f') | |
74 value |= *data - 'a' + 10; | |
75 else if (*data >= 'A' && *data <= 'F') | |
76 value |= *data - 'A' + 10; | |
77 else | |
78 return -1; | |
79 | |
2708
f1e9f3ec8135
Buffer API change: we no longer support limited sized buffers where
Timo Sirainen <tss@iki.fi>
parents:
2376
diff
changeset
|
80 buffer_append_c(dest, value); |
0 | 81 data++; |
82 } | |
83 | |
2708
f1e9f3ec8135
Buffer API change: we no longer support limited sized buffers where
Timo Sirainen <tss@iki.fi>
parents:
2376
diff
changeset
|
84 return 0; |
0 | 85 } |