2 Copyright 2020 Google LLC
4 Use of this source code is governed by a BSD-style
5 license that can be found in the LICENSE file or at
6 https://developers.google.com/open-source/licenses/bsd
11 void put_be24(uint8_t *out
, uint32_t i
)
13 out
[0] = (uint8_t)((i
>> 16) & 0xff);
14 out
[1] = (uint8_t)((i
>> 8) & 0xff);
15 out
[2] = (uint8_t)(i
& 0xff);
18 uint32_t get_be24(uint8_t *in
)
20 return (uint32_t)(in
[0]) << 16 | (uint32_t)(in
[1]) << 8 |
24 void put_be16(uint8_t *out
, uint16_t i
)
26 out
[0] = (uint8_t)((i
>> 8) & 0xff);
27 out
[1] = (uint8_t)(i
& 0xff);
30 int binsearch(size_t sz
, int (*f
)(size_t k
, void *args
), void *args
)
37 * (hi == sz) || f(hi) == true
38 * (lo == 0 && f(0) == true) || fi(lo) == false
41 size_t mid
= lo
+ (hi
- lo
) / 2;
52 return f(0, args
) ? 0 : 1;
55 void free_names(char **a
)
61 for (p
= a
; *p
; p
++) {
67 int names_length(char **names
)
76 void parse_names(char *buf
, int size
, char ***namesp
)
83 char *end
= buf
+ size
;
85 char *next
= strchr(p
, '\n');
86 if (next
&& next
< end
) {
92 if (names_len
== names_cap
) {
93 names_cap
= 2 * names_cap
+ 1;
94 names
= reftable_realloc(
95 names
, names_cap
* sizeof(*names
));
97 names
[names_len
++] = xstrdup(p
);
102 names
= reftable_realloc(names
, (names_len
+ 1) * sizeof(*names
));
103 names
[names_len
] = NULL
;
107 int names_equal(char **a
, char **b
)
110 for (; a
[i
] && b
[i
]; i
++) {
111 if (strcmp(a
[i
], b
[i
])) {
119 int common_prefix_size(struct strbuf
*a
, struct strbuf
*b
)
122 for (; p
< a
->len
&& p
< b
->len
; p
++) {
123 if (a
->buf
[p
] != b
->buf
[p
])