On Tue, Oct 30, 2012 at 04:44:36PM +0100, rustyBSD wrote:
> Le 30/10/2012 15:32, Christiano F. Haesbaert a ?crit :
> > That should be an access(2) call.
> Yes.Something like this - also moved len to size_t,
> as strlen() is size_t:
> 
> 
> --- dired.c    Wed Mar 14 14:56:35 2012
> +++ dired.c    Tue Oct 30 16:23:00 2012
> @@ -724,9 +724,10 @@
>  dired_(char *dname)
>  {
>      struct buffer    *bp;
> -    int         len, i;
> +    int i;
> +    size_t len;
>  
> -    if ((fopen(dname,"r")) == NULL) {
> +    if (access(dname, R_OK) == -1) {
>          if (errno == EACCES)
>              ewprintf("Permission denied");
>          return (NULL);
> 

Your diff got mangled, it replaced tabs for spaces, anyway, I think we
should also check for X_OK, otherwise we can't list the directory
anyway. 

We still get the message "File is not readable", but I believe it's more
useful than showing an empty directory.

Index: dired.c
===================================================================
RCS file: /cvs/src/usr.bin/mg/dired.c,v
retrieving revision 1.51
diff -d -u -p -r1.51 dired.c
--- dired.c     14 Mar 2012 13:56:35 -0000      1.51
+++ dired.c     3 Nov 2012 14:47:18 -0000
@@ -724,9 +724,10 @@ struct buffer *
 dired_(char *dname)
 {
        struct buffer   *bp;
-       int              len, i;
+       int              i;
+       size_t           len;
 
-       if ((fopen(dname,"r")) == NULL) {
+       if ((access(dname, R_OK | X_OK)) == -1) {
                if (errno == EACCES)
                        ewprintf("Permission denied");
                return (NULL);

Reply via email to