[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