ftp.nice.ch/pub/next/unix/editor/e2.N.bs.tar.gz#/e2.N.bs/dir_check.c

This is dir_check.c in view mode; [Download] [Up]

#include "e.h"

/*
 * dir_check()
 *
 * Checks to see if the name 'target' can be found in the directory 'dir'.
 * Make sure you are able to read it and that it is in fact a regular file.
 * Return 1 if it can, 0 if not.
 * 
 */
int 
dir_check(target, dir)
char *target;
char *dir;
{
    char filename[MAXPATHLEN];
    struct stat sbuf;

    ok_sprintf(filename, "%s/%s", dir, target);
    if (stat(filename, &sbuf) == -1){
        return 0;
    }
    /* 
     *  If it is not a directory and EITHER you own it and can
     *  read it OR you don't own it and it is readable by others, 
     *  OR you are in the group of the owner and it's group readable
     *      - then this is it.
     */

    if (((sbuf.st_mode & S_IFMT) == S_IFREG)  &&  
        ((sbuf.st_uid == (short)uid && sbuf.st_mode & S_IREAD) ||
        (sbuf.st_gid == (short)getgid() && sbuf.st_mode & G_READ) ||
        (sbuf.st_uid != (short)uid && sbuf.st_mode & O_READ))){

        return 1;
    }

    return 0;
}

These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.