* again errno usage, today: strutils.c
@ 2016-02-19 11:06 Ruediger Meier
2016-02-19 16:02 ` Karel Zak
0 siblings, 1 reply; 2+ messages in thread
From: Ruediger Meier @ 2016-02-19 11:06 UTC (permalink / raw)
To: util-linux
Hi,
There are many functions in strutils.c where we don't reset errno
before using it. For example this one:
unsigned long strtoul_or_err(const char *str, const char *errmesg)
{
unsigned long num;
char *end = NULL;
if (str == NULL || *str == '\0')
goto err;
errno = 0;
num = strtoul(str, &end, 10);
if (errno || str == end || (end && *end))
goto err;
return num;
err:
if (errno)
err(STRTOXX_EXIT_CODE, "%s: '%s'", errmesg, str);
errx(STRTOXX_EXIT_CODE, "%s: '%s'", errmesg, str);
}
You can make the problem visible:
$ ./logger --no-act -t "wtf" --id="XX" message
logger: failed to parse id: 'XX'
$ ./logger --no-act -t "wtf" --id="" message
logger: failed to parse id: '': No such file or directory
It's easy to fix:
+ errno = 0;
if (str == NULL || *str == '\0')
goto err;
- errno = 0;
But I want to ask whether it would be a good idea to make the message
generally less verbose:
- if (errno)
+ if (errno == ERANGE)
On other systems strtoul(3p) would return EINVAL too for case --id="XX"
but EINVAL has no useful information here:
test_logger: failed to parse id: 'XX': Invalid argument
This would not change anything on Linux/c99 as strtoul(3) only set
ERANGE there.
Opinions?
cu,
Rudi
^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: again errno usage, today: strutils.c
2016-02-19 11:06 again errno usage, today: strutils.c Ruediger Meier
@ 2016-02-19 16:02 ` Karel Zak
0 siblings, 0 replies; 2+ messages in thread
From: Karel Zak @ 2016-02-19 16:02 UTC (permalink / raw)
To: Ruediger Meier; +Cc: util-linux
On Fri, Feb 19, 2016 at 12:06:36PM +0100, Ruediger Meier wrote:
> But I want to ask whether it would be a good idea to make the message
> generally less verbose:
>
> - if (errno)
> + if (errno == ERANGE)
>
> On other systems strtoul(3p) would return EINVAL too for case --id="XX"
> but EINVAL has no useful information here:
>
> test_logger: failed to parse id: 'XX': Invalid argument
>
> This would not change anything on Linux/c99 as strtoul(3) only set
> ERANGE there.
Sound good. Go ahead, thanks!
Karel
--
Karel Zak <kzak@redhat.com>
http://karelzak.blogspot.com
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2016-02-19 16:02 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-02-19 11:06 again errno usage, today: strutils.c Ruediger Meier
2016-02-19 16:02 ` Karel Zak
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox