Three IO library related problems

Robert Virding rv@REDACTED
Fri Sep 7 11:29:59 CEST 2001

matthias@REDACTED writes:
>Robert wrote
> > No, this is perfectly correct.  io_lib:fread/2 takes a format string
> > and an input string and tries to extract ALL the specified fields.  It
> > is not re-entrant!
>If it's not intended to be re-entrant, why does fread/2 return {more, ...}
>in some cases? Consider these two cases:
>  io_lib:fread("~d.~d", "22")        crashes the process (function_clause)
>  io_lib:fread("~d~d", "22")         returns {more,"~d",2,[22]}
>If this is perfectly correct, then (a) how can I guess whether the
>fread/2 is going to crash or return {more, ...} for a particular input
>which only satisfies part of the format string and (b) why is it
>crashing with function_clause as a reason instead of badarg?

This is definitely a bug and I will fix it.  If I can still remember
how the code works. :-)  As you have already noticed the format of the
{more,...} tuple is different:

5> io_lib:fread("~d~d", "22").    
6> io_lib:fread([],"~d~d", "22").

Which "proves" that there is a bug.  Actually it seems quite buggy.


More information about the erlang-questions mailing list