Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.c > #60235

Re: strtoll discussion

From Tim Rentsch <txr@alumni.caltech.edu>
Newsgroups comp.lang.c
Subject Re: strtoll discussion
Date 2015-04-17 07:59 -0700
Organization A noiseless patient Spider
Message-ID <kfnoammyf59.fsf@x-alumni2.alumni.caltech.edu> (permalink)
References <mfm0uu$i18$1@dont-email.me> <kfnsicf3bk4.fsf@x-alumni2.alumni.caltech.edu> <87619by0zj.fsf@kst-u.example.com> <kfnmw28yrkb.fsf@x-alumni2.alumni.caltech.edu> <87y4lsq887.fsf@kst-u.example.com>

Show all headers | View raw


Keith Thompson <kst-u@mib.org> writes:

> Tim Rentsch <txr@alumni.caltech.edu> writes:
>> Keith Thompson <kst-u@mib.org> writes:
>>> Tim Rentsch <txr@alumni.caltech.edu> writes:
>>> [...]
>>>>                   Related to that, the value ERANGE for errno
>>>> on line 51 is not really the best choice here, since the
>>>> problem is not a range error but a domain error.  Using EINVAL
>>>> is a better match to the actual circumstance, and also is more
>>>> in keeping (again AIUI) with POSIX and with other
>>>> implementations.
>>>
>>> But EINVAL is not one of the 3 errno values defined in the
>>> standard for <errno.h>, so you can't portably assume that it
>>> exists.  (The portable values are EDOM, EILSEQ, and ERANGE;
>>> EDOM is used only in <math.h>.)
>>
>> Right, I should have mentioned that.  I would hope that the
>> environment for his implementation includes EINVAL, but to
>> protect against the eventuality that it does not the error
>> code used can be based on a preprocessor test, eg,
>>
>>     #include <errno.h>
>>
>>     #ifdef EINVAL
>>     #  define  BAD_ARGUMENT  EINVAL
>>     #else
>>     #  define  BAD_ARGUMENT  EDOM
>>     #endif
>>
>>     /* Then use 'BAD_ARGUMENT' to set 'errno' */
>>
>> Alternatively the defined-ness of EINVAL can be tested and if it
>> is not present then a #error used to end the compilation.  There
>> is value in punishing implementations that don't have at least
>> minimal support for Posix.  :)
>
> I thought about that, but it means calling code potentially has to
> check for two different errno values.  The benefits of using a
> more sensible value on systems where it exists is outweighed,
> IMHO, by the benefits of consistency.
>
> If we want to make the C standard depend on the POSIX standard,
> then I suppose that could be done -- but I don't think it would
> fly.

I don't understand where you're coming from with these comments.
My suggestion is about one implemenation of the strto[u][l]l()
functions, not about the Standard.  As for consistency, it is IMO
far more important to be consistent with POSIX, where possible,
than it is to be consistent across all C implementations (ie, in
this particular situation).  Ideally enough systems will support
POSIX compliance so that EINVAL would be added as an required
macro in <errno.h> in the C standard;  that possibility does not
strike me at all as far-fetched, and would be a good result.


>> Incidentally, I see nothing wrong with re-using EDOM for this
>> purpose in the case when there is no EINVAL (and EDOM is a
>> better choice than ERANGE).
>
> Agreed.  Setting errno to EDOM in a case where the standard doesn't
> define the behavior is (a) conforming and (b) IMHO reasonable.

Another idea occurred to me.  Slightly modifying my earlier
suggestion, we could do something like this:

    #ifdef EINVAL
        return  errno = EINVAL,  0;
    #else
        fprintf( stderr, "Hey there..  you should get a better OS, "
                         "or run better programs "
                         "(or preferably both!).\n" );
        exit( EXIT_FAILURE );
    #endif

Now we have code that runs on all (hosted) implementations,
behaves reasonably on all systems that count, but still gives
predictable and useful results on those other systems.  :)


> The current discussion is about how to implement strtoll as
> specified by the current standard.

My impression is slightly different, in that the discussion is
only about one particular implementation of strtoll(), not
necessarily one suitable for all C implementations.  This may
explain the difference in our perspectives above.


> But I wouldn't mind seeing the standard updated to (a) define the
> behavior of stroll for an invalid base (I think that's the case
> we're talking about) and perhaps (b) to add EINVAL as one of the
> standard errno values.
>
> On the other hand, I strongly suspect that the value passed for
> base is almost always a constant, so defining the behavior for an
> incorrect value isn't a huge priority.

I agree on (b).  The more important undefined behavior is when
the first argument is null, which I expect both occurs more often
and is likely to have more severe consequences.

Back to comp.lang.c | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread


Thread

strtoll discussion jacobnavia <jacob@jacob.remcomp.fr> - 2015-04-03 14:28 +0200
  Re: strtoll discussion Richard Heathfield <rjh@cpax.org.uk> - 2015-04-03 14:46 +0100
  Re: strtoll discussion Keith Thompson <kst-u@mib.org> - 2015-04-03 11:08 -0700
  Re: strtoll discussion James Kuyper <jameskuyper@verizon.net> - 2015-04-03 15:23 -0400
    Re: strtoll discussion Richard Heathfield <rjh@cpax.org.uk> - 2015-04-03 20:55 +0100
      Re: strtoll discussion glen herrmannsfeldt <gah@ugcs.caltech.edu> - 2015-04-03 20:41 +0000
        Re: strtoll discussion Malcolm McLean <malcolm.mclean5@btinternet.com> - 2015-04-03 13:52 -0700
          Re: strtoll discussion Richard Heathfield <rjh@cpax.org.uk> - 2015-04-03 22:25 +0100
            Re: strtoll discussion Bartc <bc@freeuk.com> - 2015-04-04 00:17 +0100
              Re: strtoll discussion Malcolm McLean <malcolm.mclean5@btinternet.com> - 2015-04-03 16:27 -0700
            Re: strtoll discussion Ben Bacarisse <ben.usenet@bsb.me.uk> - 2015-04-04 02:07 +0100
              Re: strtoll discussion Malcolm McLean <malcolm.mclean5@btinternet.com> - 2015-04-04 03:44 -0700
                Re: strtoll discussion Richard Heathfield <rjh@cpax.org.uk> - 2015-04-04 12:13 +0100
    Re: strtoll discussion James Kuyper <jameskuyper@verizon.net> - 2015-04-03 16:11 -0400
    Re: strtoll discussion Keith Thompson <kst-u@mib.org> - 2015-04-03 14:12 -0700
    Re: strtoll discussion jacobnavia <jacob@jacob.remcomp.fr> - 2015-04-03 23:56 +0200
  Re: strtoll discussion Ian Collins <ian-news@hotmail.com> - 2015-04-04 08:41 +1300
    Re: strtoll discussion jacobnavia <jacob@jacob.remcomp.fr> - 2015-04-03 23:33 +0200
  Re: strtoll discussion James Lothian <james@firstnamelastname.freeserve.co.uk> - 2015-04-03 20:51 +0100
    Re: strtoll discussion asetofsymbols@gmail.com - 2015-04-03 13:09 -0700
      Re: strtoll discussion asetofsymbols@gmail.com - 2015-04-03 13:16 -0700
      Re: strtoll discussion Richard Heathfield <rjh@cpax.org.uk> - 2015-04-03 21:19 +0100
        Re: strtoll discussion asetofsymbols@gmail.com - 2015-04-03 13:28 -0700
          Re: strtoll discussion Richard Heathfield <rjh@cpax.org.uk> - 2015-04-03 22:29 +0100
          Re: strtoll discussion jacobnavia <jacob@jacob.remcomp.fr> - 2015-04-03 23:33 +0200
      Re: strtoll discussion jacobnavia <jacob@jacob.remcomp.fr> - 2015-04-03 23:34 +0200
        Re: strtoll discussion Richard Heathfield <rjh@cpax.org.uk> - 2015-04-03 22:42 +0100
          Re: strtoll discussion Keith Thompson <kst-u@mib.org> - 2015-04-03 15:08 -0700
          Re: strtoll discussion jacobnavia <jacob@jacob.remcomp.fr> - 2015-04-04 00:13 +0200
            Re: strtoll discussion Richard Heathfield <rjh@cpax.org.uk> - 2015-04-03 23:44 +0100
              Re: strtoll discussion jacobnavia <jacob@jacob.remcomp.fr> - 2015-04-04 00:48 +0200
                Re: strtoll discussion Richard Heathfield <rjh@cpax.org.uk> - 2015-04-04 00:03 +0100
                Re: strtoll discussion Lew Pitcher <lew.pitcher@digitalfreehold.ca> - 2015-04-03 19:31 -0400
                Re: strtoll discussion Richard Heathfield <rjh@cpax.org.uk> - 2015-04-04 00:37 +0100
                Re: strtoll discussion Lew Pitcher <lew.pitcher@digitalfreehold.ca> - 2015-04-04 10:29 -0400
                Re: strtoll discussion Richard Heathfield <rjh@cpax.org.uk> - 2015-04-04 15:54 +0100
                Re: strtoll discussion Malcolm McLean <malcolm.mclean5@btinternet.com> - 2015-04-04 08:07 -0700
                Re: strtoll discussion Bartc <bc@freeuk.com> - 2015-04-04 16:28 +0100
                Re: strtoll discussion Malcolm McLean <malcolm.mclean5@btinternet.com> - 2015-04-04 08:57 -0700
                Re: strtoll discussion Bartc <bc@freeuk.com> - 2015-04-04 17:03 +0100
                Re: strtoll discussion Malcolm McLean <malcolm.mclean5@btinternet.com> - 2015-04-04 09:44 -0700
                Re: strtoll discussion Richard Heathfield <rjh@cpax.org.uk> - 2015-04-04 18:05 +0100
                Re: strtoll discussion Malcolm McLean <malcolm.mclean5@btinternet.com> - 2015-04-04 23:32 -0700
                Re: strtoll discussion Richard Heathfield <rjh@cpax.org.uk> - 2015-04-05 11:00 +0100
                Re: strtoll discussion Malcolm McLean <malcolm.mclean5@btinternet.com> - 2015-04-05 13:18 -0700
                Re: strtoll discussion Richard Damon <Richard@Damon-Family.org> - 2015-04-05 17:37 -0400
                Re: strtoll discussion Malcolm McLean <malcolm.mclean5@btinternet.com> - 2015-04-05 15:00 -0700
                Re: strtoll discussion Robert Wessel <robertwessel2@yahoo.com> - 2015-04-05 22:17 -0500
                Re: strtoll discussion Richard Damon <Richard@Damon-Family.org> - 2015-04-04 18:54 -0400
                Re: strtoll discussion Bartc <bc@freeuk.com> - 2015-04-05 12:14 +0100
                Re: strtoll discussion glen herrmannsfeldt <gah@ugcs.caltech.edu> - 2015-04-04 00:19 +0000
                Re: strtoll discussion Keith Thompson <kst-u@mib.org> - 2015-04-03 17:48 -0700
                Re: strtoll discussion James Kuyper <jameskuyper@verizon.net> - 2015-04-08 11:23 -0400
                Re: strtoll discussion jacobnavia <jacob@jacob.remcomp.fr> - 2015-04-08 19:35 +0200
                Re: strtoll discussion Keith Thompson <kst-u@mib.org> - 2015-04-08 10:47 -0700
                Re: strtoll discussion James Kuyper <jameskuyper@verizon.net> - 2015-04-08 14:22 -0400
  lltostr/ulltostr jacobnavia <jacob@jacob.remcomp.fr> - 2015-04-04 13:56 +0200
    Re: lltostr/ulltostr Richard Heathfield <rjh@cpax.org.uk> - 2015-04-04 13:36 +0100
    Re: lltostr/ulltostr Barry Schwarz <schwarzb@dqel.com> - 2015-04-04 18:54 -0700
      Re: lltostr/ulltostr Ian Collins <ian-news@hotmail.com> - 2015-04-05 14:29 +1200
    Re: lltostr/ulltostr Ralf Damaschke <rwspam@gmx.de> - 2015-04-05 16:58 +0000
      Re: lltostr/ulltostr jacobnavia <jacob@jacob.remcomp.fr> - 2015-04-05 20:39 +0200
        Re: lltostr/ulltostr glen herrmannsfeldt <gah@ugcs.caltech.edu> - 2015-04-05 20:19 +0000
      Re: lltostr/ulltostr Keith Thompson <kst-u@mib.org> - 2015-04-05 13:18 -0700
        Re: lltostr/ulltostr Ralf Damaschke <rwspam@gmx.de> - 2015-04-06 14:28 +0000
          Re: lltostr/ulltostr Keith Thompson <kst-u@mib.org> - 2015-04-06 08:40 -0700
  Re: strtoll discussion Tim Rentsch <txr@alumni.caltech.edu> - 2015-04-04 13:04 -0700
    Re: strtoll discussion jacobnavia <jacob@jacob.remcomp.fr> - 2015-04-04 22:52 +0200
      Re: strtoll discussion Richard Heathfield <rjh@cpax.org.uk> - 2015-04-04 22:14 +0100
      Re: strtoll discussion Ben Bacarisse <ben.usenet@bsb.me.uk> - 2015-04-05 00:24 +0100
      Re: strtoll discussion Geoff <geoff@invalid.invalid> - 2015-04-04 16:51 -0700
      Re: strtoll discussion jacobnavia <jacob@jacob.remcomp.fr> - 2015-04-05 23:32 +0200
        Re: strtoll discussion Tim Rentsch <txr@alumni.caltech.edu> - 2015-04-16 09:21 -0700
      Re: strtoll discussion Tim Rentsch <txr@alumni.caltech.edu> - 2015-04-17 02:21 -0700
    Re: strtoll discussion Keith Thompson <kst-u@mib.org> - 2015-04-04 15:36 -0700
      Re: strtoll discussion Tim Rentsch <txr@alumni.caltech.edu> - 2015-04-16 09:19 -0700
        Re: strtoll discussion Keith Thompson <kst-u@mib.org> - 2015-04-16 10:43 -0700
          Re: strtoll discussion Tim Rentsch <txr@alumni.caltech.edu> - 2015-04-17 07:59 -0700
  Re: strtoll discussion Philipp Klaus Krause <pkk@spth.de> - 2015-04-07 11:46 +0200

csiph-web