diff options
author | Daniel Stone <daniels@collabora.com> | 2019-11-25 12:26:36 +0000 |
---|---|---|
committer | Daniel Stone <daniels@collabora.com> | 2019-11-25 14:41:45 +0000 |
commit | aa4ba5d283d641da25722af7a966c31d61a9686b (patch) | |
tree | e48b6b43b8b119640ae4d9452eb77e561698f2ca /shared/string-helpers.h | |
parent | 9c29d2c7870a617bbb9eb521bc1ab8757934e536 (diff) |
Import source, backport to libweston 6.0icefish_8.99.5icefish_8.99.4icefish_8.99.3icefish_8.99.2icefish/8.99.5icefish/8.99.4icefish/8.99.3icefish/8.99.28.99.58.99.48.99.38.99.2
Signed-off-by: Daniel Stone <daniels@collabora.com>
Change-Id: I7705fa82dab29a27e4913cd548a2f5c3247dc5ad
Diffstat (limited to 'shared/string-helpers.h')
-rw-r--r-- | shared/string-helpers.h | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/shared/string-helpers.h b/shared/string-helpers.h new file mode 100644 index 0000000..c8ce449 --- /dev/null +++ b/shared/string-helpers.h @@ -0,0 +1,71 @@ +/* + * Copyright © 2016 Samsung Electronics Co., Ltd + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial + * portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS + * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +#ifndef WESTON_STRING_HELPERS_H +#define WESTON_STRING_HELPERS_H + +#include <stdbool.h> +#include <stdlib.h> +#include <stdint.h> +#include <errno.h> +#include <assert.h> + +/* Convert string to integer + * + * Parses a base-10 number from the given string. Checks that the + * string is not blank, contains only numerical characters, and is + * within the range of INT32_MIN to INT32_MAX. If the validation is + * successful the result is stored in *value; otherwise *value is + * unchanged and errno is set appropriately. + * + * \return true if the number parsed successfully, false on error + */ +static inline bool +safe_strtoint(const char *str, int32_t *value) +{ + long ret; + char *end; + + assert(str != NULL); + + errno = 0; + ret = strtol(str, &end, 10); + if (errno != 0) { + return false; + } else if (end == str || *end != '\0') { + errno = EINVAL; + return false; + } + + if ((long)((int32_t)ret) != ret) { + errno = ERANGE; + return false; + } + *value = (int32_t)ret; + + return true; +} + +#endif /* WESTON_STRING_HELPERS_H */ |