From mboxrd@z Thu Jan 1 00:00:00 1970 Delivery-date: Fri, 02 Jun 2023 15:16:17 +0200 Received: from metis.ext.pengutronix.de ([2001:67c:670:201:290:27ff:fe1d:cc33]) by lore.white.stw.pengutronix.de with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1q54df-007N1q-3p for lore@lore.pengutronix.de; Fri, 02 Jun 2023 15:16:17 +0200 Received: from localhost ([127.0.0.1] helo=metis.ext.pengutronix.de) by metis.ext.pengutronix.de with esmtp (Exim 4.92) (envelope-from ) id 1q54db-0006eO-Rp; Fri, 02 Jun 2023 15:16:15 +0200 Received: from ptx.hi.pengutronix.de ([2001:67c:670:100:1d::c0]) by metis.ext.pengutronix.de with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1q54da-0006e8-4f; Fri, 02 Jun 2023 15:16:14 +0200 Received: from rhi by ptx.hi.pengutronix.de with local (Exim 4.92) (envelope-from ) id 1q54dZ-00049E-St; Fri, 02 Jun 2023 15:16:13 +0200 Date: Fri, 2 Jun 2023 15:16:13 +0200 From: Roland Hieber To: Ahmad Fatoum Message-ID: <20230602131613.n3iluklnm5onp5br@pengutronix.de> References: <20230531152253.1407395-1-a.fatoum@pengutronix.de> <20230531152253.1407395-3-a.fatoum@pengutronix.de> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline In-Reply-To: <20230531152253.1407395-3-a.fatoum@pengutronix.de> User-Agent: NeoMutt/20180716 Subject: Re: [OSS-Tools] [PATCH 2/8] libdt: factor out u64 sysattr parsing into helper X-BeenThere: oss-tools@pengutronix.de X-Mailman-Version: 2.1.29 Precedence: list List-Id: Pengutronix Public Open-Source-Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: oss-tools@pengutronix.de Sender: "OSS-Tools" X-SA-Exim-Connect-IP: 127.0.0.1 X-SA-Exim-Mail-From: oss-tools-bounces@pengutronix.de X-SA-Exim-Scanned: No (on metis.ext.pengutronix.de); SAEximRunCond expanded to false On Wed, May 31, 2023 at 05:22:47PM +0200, Ahmad Fatoum wrote: > We will need to parse two more sysattrs in a follow-up patch, so factor > this out for reuse. While at it switch to 64-bit strtoull: This may > be more useful for future users and unlike atol doesn't invoke undefined > behavior when parsing fails. > > Signed-off-by: Ahmad Fatoum > --- > src/libdt.c | 42 +++++++++++++++++++++++++++++++++++------- > 1 file changed, 35 insertions(+), 7 deletions(-) > > diff --git a/src/libdt.c b/src/libdt.c > index 2c994c647ac9..580b0b0ba769 100644 > --- a/src/libdt.c > +++ b/src/libdt.c > @@ -2179,6 +2179,33 @@ static struct udev_device *device_find_mtd_partition(struct udev_device *dev, > return NULL; > } > > +/* Use /** here so API doc generators could potentially pick it up (even if we don't build API docs right now, but all other functions are documented the same way). - Roland > + * udev_device_parse_sysattr_u64 - parse sysattr value as unsigned 64-bit integer > + * @dev: the udev_device to extract the attribute from > + * @attr: name of the attribute to lookup > + * @outvalue: returns the value parsed out of the attribute > + * > + * returns 0 for success or negative error value on failure. > + */ > +static int udev_device_parse_sysattr_u64(struct udev_device *dev, const char *attr, > + u64 *outvalue) > +{ > + char *endptr; > + u64 value; > + const char *str; > + > + str = udev_device_get_sysattr_value(dev, attr); > + if (!str) > + return -EINVAL; > + > + value = strtoull(str, &endptr, 0); > + if (!*str || *endptr) > + return -EINVAL; > + > + *outvalue = value; > + return 0; > +} > + > /* > * device_find_block_device - extract device path from udev block device > * > @@ -2305,24 +2332,25 @@ static int udev_device_is_eeprom(struct udev_device *dev) > * udev_parse_mtd - get information from a mtd udev_device > * @dev: the udev_device to extract information from > * @devpath: returns the devicepath under which the mtd device is accessible > - * @size: returns the size of the mtd device > + * @outsize: returns the size of the mtd device > * > * returns 0 for success or negative error value on failure. *devpath > * will be valid on success and must be freed after usage. > */ > -static int udev_parse_mtd(struct udev_device *dev, char **devpath, size_t *size) > +static int udev_parse_mtd(struct udev_device *dev, char **devpath, size_t *outsize) > { > - const char *sizestr; > const char *outpath; > + u64 size; > + int ret; > > if (!udev_device_is_mtd(dev)) > return -EINVAL; > > - sizestr = udev_device_get_sysattr_value(dev, "size"); > - if (!sizestr) > - return -EINVAL; > + ret = udev_device_parse_sysattr_u64(dev, "size", &size); > + if (ret) > + return ret; > > - *size = atol(sizestr); > + *outsize = size; > > outpath = udev_device_get_devnode(dev); > if (!outpath) > -- > 2.39.2 > > > -- Roland Hieber, Pengutronix e.K. | r.hieber@pengutronix.de | Steuerwalder Str. 21 | https://www.pengutronix.de/ | 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 | Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |