[PATCH weston v3 4/5] Add safe_strtoint() helper

Peter Hutterer peter.hutterer at who-t.net
Mon Aug 1 02:48:21 UTC 2016


On Fri, Jul 29, 2016 at 09:43:59AM -0700, Bryce Harrington wrote:
> Adds a safe strtol helper function, modeled loosely after Wayland
> scanner's strtouint.  This encapsulates the various quirks of strtol
> behavior, and streamlines the interface to just handling base-10 numbers
> with a simple true/false error indicator and a uint32_t return by
> reference.
> 
> Signed-off-by: Bryce Harrington <bryce at osg.samsung.com>
> Reviewed-by: Thiago Macieira <thiago.macieira at intel.com>
> ---
>  shared/string-helpers.h | 78 +++++++++++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 78 insertions(+)
>  create mode 100644 shared/string-helpers.h
> 
> diff --git a/shared/string-helpers.h b/shared/string-helpers.h
> new file mode 100644
> index 0000000..0617229
> --- /dev/null
> +++ b/shared/string-helpers.h
> @@ -0,0 +1,78 @@
> +/*
> + * 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
> +
> +#ifdef	__cplusplus
> +extern "C" {
> +#endif

do we need this in an internal helper?

> +
> +#include <stdbool.h>
> +#include <stdlib.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 -INT_MAX to INT_MAX.  If the validation is
> + * successful the result is stored in *value; otherwise *value is
> + * unchanged and errno is set appropriately.
> + *
> + * \return true if number parsed successfully, false on error

"if the number". IMO you should squash the safe_strtoint() tests into this
patch and have a separate patch for switching the existing calls over. 5/5
looks like a rebase gone wrong.

with that, Reviewed-by: Peter Hutterer <peter.hutterer at who-t.net>

Cheers,
   Peter

> + */
> +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;
> +	}
> +
> +	*value = (int32_t)ret;
> +	if ((long)*value != ret) {
> +		errno = ERANGE;
> +		return false;
> +	}
> +
> +	return true;
> +}
> +
> +#ifdef	__cplusplus
> +}
> +#endif
> +
> +#endif /* WESTON_STRING_HELPERS_H */
> -- 
> 1.9.1
> 


More information about the wayland-devel mailing list