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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
2
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
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
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
5 #include "hex-binary.h"
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
6
9634
7fc9e93fe745 Added binary_to_hex_append().
Timo Sirainen <tss@iki.fi>
parents: 8590
diff changeset
7 static void
7fc9e93fe745 Added binary_to_hex_append().
Timo Sirainen <tss@iki.fi>
parents: 8590
diff changeset
8 binary_to_hex_case(unsigned char *dest, const unsigned char *data,
7fc9e93fe745 Added binary_to_hex_append().
Timo Sirainen <tss@iki.fi>
parents: 8590
diff changeset
9 size_t size, bool ucase)
0
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
10 {
9634
7fc9e93fe745 Added binary_to_hex_append().
Timo Sirainen <tss@iki.fi>
parents: 8590
diff changeset
11 unsigned char *p;
7fc9e93fe745 Added binary_to_hex_append().
Timo Sirainen <tss@iki.fi>
parents: 8590
diff changeset
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
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
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
05b8b6963b02 Added binary_to_hex_ucase()
Timo Sirainen <tss@iki.fi>
parents: 1741
diff changeset
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
7fc9e93fe745 Added binary_to_hex_append().
Timo Sirainen <tss@iki.fi>
parents: 8590
diff changeset
19 p = dest;
0
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
20 for (i = 0; i < size; i++) {
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
21 value = data[i] >> 4;
2376
05b8b6963b02 Added binary_to_hex_ucase()
Timo Sirainen <tss@iki.fi>
parents: 1741
diff changeset
22 *p++ = value < 10 ? value + '0' : value - 10 + base_char;
0
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
23
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
24 value = data[i] & 0x0f;
2376
05b8b6963b02 Added binary_to_hex_ucase()
Timo Sirainen <tss@iki.fi>
parents: 1741
diff changeset
25 *p++ = value < 10 ? value + '0' : value - 10 + base_char;
0
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
26 }
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
27 }
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
28
2376
05b8b6963b02 Added binary_to_hex_ucase()
Timo Sirainen <tss@iki.fi>
parents: 1741
diff changeset
29 const char *binary_to_hex(const unsigned char *data, size_t size)
05b8b6963b02 Added binary_to_hex_ucase()
Timo Sirainen <tss@iki.fi>
parents: 1741
diff changeset
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
7fc9e93fe745 Added binary_to_hex_append().
Timo Sirainen <tss@iki.fi>
parents: 8590
diff changeset
32
7fc9e93fe745 Added binary_to_hex_append().
Timo Sirainen <tss@iki.fi>
parents: 8590
diff changeset
33 binary_to_hex_case(dest, data, size, FALSE);
7fc9e93fe745 Added binary_to_hex_append().
Timo Sirainen <tss@iki.fi>
parents: 8590
diff changeset
34 dest[size*2] = '\0';
7fc9e93fe745 Added binary_to_hex_append().
Timo Sirainen <tss@iki.fi>
parents: 8590
diff changeset
35 return (char *)dest;
2376
05b8b6963b02 Added binary_to_hex_ucase()
Timo Sirainen <tss@iki.fi>
parents: 1741
diff changeset
36 }
05b8b6963b02 Added binary_to_hex_ucase()
Timo Sirainen <tss@iki.fi>
parents: 1741
diff changeset
37
05b8b6963b02 Added binary_to_hex_ucase()
Timo Sirainen <tss@iki.fi>
parents: 1741
diff changeset
38 const char *binary_to_hex_ucase(const unsigned char *data, size_t size)
05b8b6963b02 Added binary_to_hex_ucase()
Timo Sirainen <tss@iki.fi>
parents: 1741
diff changeset
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
7fc9e93fe745 Added binary_to_hex_append().
Timo Sirainen <tss@iki.fi>
parents: 8590
diff changeset
41
7fc9e93fe745 Added binary_to_hex_append().
Timo Sirainen <tss@iki.fi>
parents: 8590
diff changeset
42 binary_to_hex_case(dest, data, size, TRUE);
7fc9e93fe745 Added binary_to_hex_append().
Timo Sirainen <tss@iki.fi>
parents: 8590
diff changeset
43 dest[size*2] = '\0';
7fc9e93fe745 Added binary_to_hex_append().
Timo Sirainen <tss@iki.fi>
parents: 8590
diff changeset
44 return (char *)dest;
7fc9e93fe745 Added binary_to_hex_append().
Timo Sirainen <tss@iki.fi>
parents: 8590
diff changeset
45 }
7fc9e93fe745 Added binary_to_hex_append().
Timo Sirainen <tss@iki.fi>
parents: 8590
diff changeset
46
7fc9e93fe745 Added binary_to_hex_append().
Timo Sirainen <tss@iki.fi>
parents: 8590
diff changeset
47 void binary_to_hex_append(string_t *dest, const unsigned char *data,
7fc9e93fe745 Added binary_to_hex_append().
Timo Sirainen <tss@iki.fi>
parents: 8590
diff changeset
48 size_t size)
7fc9e93fe745 Added binary_to_hex_append().
Timo Sirainen <tss@iki.fi>
parents: 8590
diff changeset
49 {
7fc9e93fe745 Added binary_to_hex_append().
Timo Sirainen <tss@iki.fi>
parents: 8590
diff changeset
50 unsigned char *buf;
7fc9e93fe745 Added binary_to_hex_append().
Timo Sirainen <tss@iki.fi>
parents: 8590
diff changeset
51
7fc9e93fe745 Added binary_to_hex_append().
Timo Sirainen <tss@iki.fi>
parents: 8590
diff changeset
52 buf = buffer_append_space_unsafe(dest, size * 2);
7fc9e93fe745 Added binary_to_hex_append().
Timo Sirainen <tss@iki.fi>
parents: 8590
diff changeset
53 binary_to_hex_case(buf, data, size, FALSE);
2376
05b8b6963b02 Added binary_to_hex_ucase()
Timo Sirainen <tss@iki.fi>
parents: 1741
diff changeset
54 }
05b8b6963b02 Added binary_to_hex_ucase()
Timo Sirainen <tss@iki.fi>
parents: 1741
diff changeset
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
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
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
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
59
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
60 while (*data != '\0') {
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
61 if (*data >= '0' && *data <= '9')
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
62 value = (*data - '0') << 4;
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
63 else if (*data >= 'a' && *data <= 'f')
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
64 value = (*data - 'a' + 10) << 4;
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
65 else if (*data >= 'A' && *data <= 'F')
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
66 value = (*data - 'A' + 10) << 4;
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
67 else
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
68 return -1;
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
69
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
70 data++;
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
71 if (*data >= '0' && *data <= '9')
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
72 value |= *data - '0';
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
73 else if (*data >= 'a' && *data <= 'f')
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
74 value |= *data - 'a' + 10;
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
75 else if (*data >= 'A' && *data <= 'F')
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
76 value |= *data - 'A' + 10;
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
77 else
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
78 return -1;
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
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
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
81 data++;
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
82 }
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
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
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
85 }