mirror of
https://github.com/jemalloc/jemalloc.git
synced 2026-04-15 07:01:42 +03:00
48 lines
1 KiB
C
48 lines
1 KiB
C
#include "jemalloc/internal/jemalloc_preamble.h"
|
|
#include "jemalloc/internal/jemalloc_internal_includes.h"
|
|
|
|
#include "jemalloc/internal/util.h"
|
|
|
|
/* Reads the next size pair in a multi-sized option. */
|
|
bool
|
|
multi_setting_parse_next(const char **setting_segment_cur, size_t *len_left,
|
|
size_t *key_start, size_t *key_end, size_t *value) {
|
|
const char *cur = *setting_segment_cur;
|
|
char *end;
|
|
uintmax_t um;
|
|
|
|
set_errno(0);
|
|
|
|
/* First number, then '-' */
|
|
um = malloc_strtoumax(cur, &end, 0);
|
|
if (get_errno() != 0 || *end != '-') {
|
|
return true;
|
|
}
|
|
*key_start = (size_t)um;
|
|
cur = end + 1;
|
|
|
|
/* Second number, then ':' */
|
|
um = malloc_strtoumax(cur, &end, 0);
|
|
if (get_errno() != 0 || *end != ':') {
|
|
return true;
|
|
}
|
|
*key_end = (size_t)um;
|
|
cur = end + 1;
|
|
|
|
/* Last number */
|
|
um = malloc_strtoumax(cur, &end, 0);
|
|
if (get_errno() != 0) {
|
|
return true;
|
|
}
|
|
*value = (size_t)um;
|
|
|
|
/* Consume the separator if there is one. */
|
|
if (*end == '|') {
|
|
end++;
|
|
}
|
|
|
|
*len_left -= end - *setting_segment_cur;
|
|
*setting_segment_cur = end;
|
|
|
|
return false;
|
|
}
|