[m-rev.] IO error type

Peter Wang novalazy at gmail.com
Fri Aug 19 11:57:36 AEST 2022


On Thu, 18 Aug 2022 19:09:12 +1000 Julien Fischer <jfischer at opturion.com> wrote:
> 
> On Thu, 18 Aug 2022, Peter Wang wrote:
> 
> >> 5. We also add the functions you listed below
> >>
> >>>>>    :- pred get_error_name(io.error::in, string::out)
> >>>>> 	is semidet.
> >>>>>
> >>>>> 	% As above, but takes a system_error instead.
> >>>>> 	%
> >>>>>    :- pred get_system_error_name(system_error::in, string::out)
> >>>>> 	is semidet.
> >>
> >> except that the signature of the latter one would be:
> >>
> >>      :- pred get_system_error_name(io.error::in, string::out)
> >>         is semidet.
> >
> > Right, if a system_error could be value from multiple sets of errors
> > then we can't have a predicate that converts an system_error (only) to a
> > string.
> >
> >> (I hope there's a way of getting Windows error code name, that doesn't
> >> involve switching over all 5000 or so Windows error codes; perhaps
> >> FormatMessage can do that?)
> >>
> >
> > I couldn't find one :(
> 
> Neither could I.
> 
> > The MinGW-w64 winerror.h defines ~1765 ERROR_* constants, which should
> > be far beyond what we need to recognise (practically).
> 
> At the moment the only ones we generate are those in the dir module.
> I think it would suffice to handle those plus the most common other
> cases and for every other value construct a string of the form:
> 
>      "System error: 0xNNNNNNN"
> 
> (That's no worse than what Microsoft does in various places; the number
> is hexadecimal since that what Microsoft's documentation does.)
> 
> > Both the switch for the POSIX and Windows errors would be
> > auto-generated, so it's just a matter of code size.
> 
> For "unrecognised" errno values, I suggest we create a string
> of the form:
> 
>      "errno: NNNNN"
> 
> (In decimal this time.)

I'm going to make a start.

Peter


More information about the reviews mailing list