[Rd] load.R patch suggestion

Martin Maechler
Wed, 28 Sep 2011 10:18:12 -0000

>>>>> Ben Bolker <bbolker at gmail.com>
>>>>>     on Thu, 15 Sep 2011 11:03:26 +0200 writes:

    > Inspired by

    >
http://stackoverflow.com/questions/7487778/could-you-tell-me-what-this-error-means

    > I wrote the following very small (one-line) patch which
    > returns an *informative* error message when R tries to
    > load a zero-byte file rather than

    > Error in if (!grepl("RD[AX]2\n", magic)) { : argument is
    > of length zero

    >   I would guess that error messages with the word "magic"
    > in them would be disturbing to new users, who are probably
    > worried already that R is magic ...

:-)  indeed...

While it would not be a good idea to program around such error
messages in general, as each extra if(...) is executed everytime
the function is called, i.e. has a (albeit *very small*) penalty for
every correct call just for the sake of that message in the
erronous call case,
I do agree that it is worth here and so have added it (for
R-devel only).

Thank you, Ben.

    >   Ben Bolker


> ----------------------------------------------------------------------
> Index: load.R
> ==================================================================> ---
load.R	(revision 56743)
> +++ load.R	(working copy)
> @@ -25,6 +25,7 @@
>          ## Since the connection is not open this opens it in binary mode
>          ## and closes it again.
>          magic <- readChar(con, 5L, useBytes = TRUE)
> +        if (length(magic)==0) stop("empty (zero-byte) file")
>          if (!grepl("RD[AX]2\n", magic)) {
>              ## a check while we still know the call to load()
>              if(grepl("RD[ABX][12]\r", magic))
>
> ----------------------------------------------------------------------