[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH] Allow .load only on suitable file system entries

From: Jose E. Marchesi
Subject: Re: [PATCH] Allow .load only on suitable file system entries
Date: Fri, 29 Nov 2019 09:05:57 +0100
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/26.1 (gnu/linux)

             +static char *
             +pk_file_readable (const char *filename)
             +  static char errmsg[4096];
             +  struct stat statbuf;
             +  if (0 != stat (filename, &statbuf))
             +    {
             +      char *why = strerror (errno);
             +      snprintf (errmsg, 4096, _("Cannot stat %s: %s\n"), 
filename, why);
             +      return errmsg;
             +    }
             +  if (S_ISDIR (statbuf.st_mode))
             +    {
             +      snprintf (errmsg, 4096, _("%s is a directory\n"), filename);
             +      return errmsg;
             +    }
             +  if (access (filename, R_OK) != 0)
             +    {
             +      char *why = strerror (errno);
             +      snprintf (errmsg, 4096, _("%s: file cannot be read: %s\n"),
             +          filename, why);
             +      return errmsg;
             +    }
         The stat and check for S_ISDIR can be replaced with:
           if (fstat (fileno (stream), &st) == -1 || !S_ISREG (st.st_mode))
             sprintf (errmsg, 4096, _("%s: not a regular file"));
    No it can't;  Because we don't have a stream.

    I'm unsure if we want to insist on file being a "regular" file.  For
    example I can envisage a situation where somebody might want to use poke
    to examine (or write!) a filesystem or swapspace on /dev/sd??
    Also, if stat fails for any reason (eg the file doesn't exist), then the 
    would give a misleading error message.
         The check for readability can be done portably using another gnulib
         function, freadable:
           if (!freadable (stream))
             sprintf (errmsg, 4096, _("%s: file cannot be read"));
    Again, we don't have  a stream at this point, so that isn't going to
Hm ok.  Let's use stat and access instead.
But then, we don't need any additional gnulib module..

reply via email to

[Prev in Thread] Current Thread [Next in Thread]