From: Jonathan Cameron <jic23@kernel.org>
To: Hartmut Knaack <knaack.h@gmx.de>, linux-iio@vger.kernel.org
Cc: Lars-Peter Clausen <lars@metafoo.de>,
Peter Meerwald <pmeerw@pmeerw.net>,
Roberta Dobrescu <roberta.dobrescu@gmail.com>,
Daniel Baluta <daniel.baluta@intel.com>,
Irina Tirdea <irina.tirdea@intel.com>
Subject: Re: [PATCH 14/32] tools:iio:iio_utils: implement digit calculation
Date: Sun, 31 May 2015 19:19:19 +0100 [thread overview]
Message-ID: <556B50A7.9060205@kernel.org> (raw)
In-Reply-To: <70d40a8692e2f83fc72eb1d0ea9a011d5b62e37e.1433072539.git.knaack.h@gmx.de>
On 31/05/15 13:40, Hartmut Knaack wrote:
> Previously, the return value of sscanf() was treated as an indication of
> the digits it would have read. Yet, sscanf() only returns the amount of
> valid matches.
> Therefore, introduce a function to calculate the decimal digits of the
> read number and use this one to commence a colon search, as originally
> intended.
>
> Signed-off-by: Hartmut Knaack <knaack.h@gmx.de>
Applied. Ouch.
> ---
> tools/iio/iio_utils.c | 35 +++++++++++++++++++++++++++++++----
> 1 file changed, 31 insertions(+), 4 deletions(-)
>
> diff --git a/tools/iio/iio_utils.c b/tools/iio/iio_utils.c
> index c5b4136..60e5ec4 100644
> --- a/tools/iio/iio_utils.c
> +++ b/tools/iio/iio_utils.c
> @@ -431,6 +431,18 @@ error_ret:
> return ret;
> }
>
> +int calc_digits(int num)
> +{
> + int count = 0;
> +
> + while (num != 0) {
> + num /= 10;
> + count++;
> + }
> +
> + return count;
> +}
> +
> /**
> * find_type_by_name() - function to match top level types by name
> * @name: top level type instance name
> @@ -441,7 +453,7 @@ error_ret:
> int find_type_by_name(const char *name, const char *type)
> {
> const struct dirent *ent;
> - int number, numstrlen;
> + int number, numstrlen, ret;
>
> FILE *nameFile;
> DIR *dp;
> @@ -459,9 +471,19 @@ int find_type_by_name(const char *name, const char *type)
> strcmp(ent->d_name, "..") != 0 &&
> strlen(ent->d_name) > strlen(type) &&
> strncmp(ent->d_name, type, strlen(type)) == 0) {
> - numstrlen = sscanf(ent->d_name + strlen(type),
> - "%d",
> - &number);
> + errno = 0;
> + ret = sscanf(ent->d_name + strlen(type), "%d", &number);
> + if (ret < 0) {
> + ret = -errno;
> + printf("failed to read element number\n");
> + goto error_close_dir;
> + } else if (ret != 1) {
> + ret = -EIO;
> + printf("failed to match element number\n");
> + goto error_close_dir;
> + }
> +
> + numstrlen = calc_digits(number);
> /* verify the next character is not a colon */
> if (strncmp(ent->d_name + strlen(type) + numstrlen,
> ":",
> @@ -495,6 +517,11 @@ int find_type_by_name(const char *name, const char *type)
> }
> closedir(dp);
> return -ENODEV;
> +
> +error_close_dir:
> + if (closedir(dp) == -1)
> + perror("find_type_by_name(): Failed to close directory");
> + return ret;
> }
>
> int _write_sysfs_int(char *filename, char *basedir, int val, int verify)
>
next prev parent reply other threads:[~2015-06-01 21:16 UTC|newest]
Thread overview: 62+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-05-31 12:39 [PATCH 00/32] iio-tools out-of-staging cleanup Hartmut Knaack
2015-05-31 12:39 ` [PATCH 01/32] tools:iio:generic_buffer: fix order of freeing data Hartmut Knaack
2015-05-31 16:13 ` Jonathan Cameron
2015-05-31 12:39 ` [PATCH 02/32] tools:iio:generic_buffer: free dev_dir_name on exit Hartmut Knaack
2015-05-31 16:17 ` Jonathan Cameron
2015-05-31 12:39 ` [PATCH 03/32] tools:iio:iio_utils: free scan_el_dir " Hartmut Knaack
2015-05-31 16:19 ` Jonathan Cameron
2015-05-31 12:39 ` [PATCH 04/32] tools:iio: free channel-array completely Hartmut Knaack
2015-05-31 16:20 ` Jonathan Cameron
2015-05-31 12:39 ` [PATCH 05/32] tools:iio:iio_utils: fix allocation handling Hartmut Knaack
2015-05-31 16:23 ` Jonathan Cameron
2015-05-31 12:39 ` [PATCH 06/32] tools:iio:generic_buffer: add check before free Hartmut Knaack
2015-05-31 16:29 ` Jonathan Cameron
2015-05-31 12:39 ` [PATCH 07/32] tools:iio:lsiio: add closedir before exit Hartmut Knaack
2015-05-31 16:30 ` Jonathan Cameron
2015-05-31 12:39 ` [PATCH 08/32] tools:iio: save errno first Hartmut Knaack
2015-05-31 16:33 ` Jonathan Cameron
2015-05-31 12:39 ` [PATCH 09/32] tools:iio:iio_event_monitor: save right errno Hartmut Knaack
2015-05-31 16:34 ` Jonathan Cameron
2015-05-31 12:39 ` [PATCH 10/32] tools:iio:generic_buffer: fix check of errno Hartmut Knaack
2015-05-31 16:35 ` Jonathan Cameron
2015-05-31 12:39 ` [PATCH 11/32] tools:iio:generic_buffer: pass up right error code Hartmut Knaack
2015-05-31 16:36 ` Jonathan Cameron
2015-05-31 12:39 ` [PATCH 12/32] tools:iio:generic_buffer: sign-extend and shift data Hartmut Knaack
2015-05-31 16:41 ` Jonathan Cameron
2015-05-31 12:39 ` [PATCH 13/32] tools:iio:iio_utils: check amount of matches Hartmut Knaack
2015-05-31 16:41 ` Jonathan Cameron
2015-05-31 12:40 ` [PATCH 14/32] tools:iio:iio_utils: implement digit calculation Hartmut Knaack
2015-05-31 18:19 ` Jonathan Cameron [this message]
2015-05-31 12:40 ` [PATCH 15/32] tools:iio:iio_utils: mark private function static Hartmut Knaack
2015-05-31 12:40 ` [PATCH 16/32] tools:iio: catch errors in string allocation Hartmut Knaack
2015-05-31 18:21 ` Jonathan Cameron
2015-05-31 12:40 ` [PATCH 17/32] tools:iio:generic_buffer: catch errors for arguments conversion Hartmut Knaack
2015-05-31 12:40 ` [PATCH 18/32] tools:iio:generic_buffer: add error handling Hartmut Knaack
2015-05-31 12:40 ` [PATCH 19/32] tools:iio:iio_event_monitor: " Hartmut Knaack
2015-05-31 18:25 ` Jonathan Cameron
2015-05-31 12:40 ` [PATCH 20/32] tools:iio:iio_event_monitor: check if event is fully read Hartmut Knaack
2015-05-31 18:36 ` Jonathan Cameron
2015-06-01 22:00 ` Hartmut Knaack
2015-05-31 12:40 ` [PATCH 21/32] tools:iio:iio_utils: add error handling Hartmut Knaack
2015-05-31 18:44 ` Jonathan Cameron
2015-05-31 12:40 ` [PATCH 22/32] tools:iio:lsiio: " Hartmut Knaack
2015-05-31 18:45 ` Jonathan Cameron
2015-05-31 12:40 ` [PATCH 23/32] tools:iio:iio_utils: add missing documentation Hartmut Knaack
2015-06-01 7:33 ` Jonathan Cameron
2015-05-31 12:40 ` [PATCH 24/32] tools:iio: return values directly Hartmut Knaack
2015-06-01 7:34 ` Jonathan Cameron
2015-05-31 12:40 ` [PATCH 25/32] tools:iio:iio_event_monitor: refactor events output Hartmut Knaack
2015-06-01 7:34 ` Jonathan Cameron
2015-05-31 12:40 ` [PATCH 26/32] tools:iio:iio_utils: refactor assignment of is_signed Hartmut Knaack
2015-06-01 7:35 ` Jonathan Cameron
2015-05-31 12:40 ` [PATCH 27/32] tools:iio:iio_utils: move up reset of sysfsfp Hartmut Knaack
2015-06-01 7:37 ` Jonathan Cameron
2015-05-31 12:40 ` [PATCH 28/32] tools:iio:iio_utils: initialize count during declaration Hartmut Knaack
2015-06-01 7:38 ` Jonathan Cameron
2015-05-31 12:40 ` [PATCH 29/32] tools:iio: rework program parameters Hartmut Knaack
2015-06-01 7:40 ` Jonathan Cameron
2015-05-31 12:40 ` [PATCH 30/32] tools:iio:iio_utils: pass strings as const Hartmut Knaack
2015-06-01 7:40 ` Jonathan Cameron
2015-05-31 12:40 ` [PATCH 31/32] tools:iio: adjust coding style Hartmut Knaack
2015-06-01 7:46 ` Jonathan Cameron
2015-05-31 12:40 ` [PATCH 32/32] tools:iio: rename variables Hartmut Knaack
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=556B50A7.9060205@kernel.org \
--to=jic23@kernel.org \
--cc=daniel.baluta@intel.com \
--cc=irina.tirdea@intel.com \
--cc=knaack.h@gmx.de \
--cc=lars@metafoo.de \
--cc=linux-iio@vger.kernel.org \
--cc=pmeerw@pmeerw.net \
--cc=roberta.dobrescu@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.