home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / unix / volume17 / e2 / part01 / dir_check.c < prev    next >
C/C++ Source or Header  |  1989-02-08  |  987b  |  40 lines

  1. #include "e.h"
  2.  
  3. /*
  4.  * dir_check()
  5.  *
  6.  * Checks to see if the name 'target' can be found in the directory 'dir'.
  7.  * Make sure you are able to read it and that it is in fact a regular file.
  8.  * Return 1 if it can, 0 if not.
  9.  * 
  10.  */
  11. int 
  12. dir_check(target, dir)
  13. char *target;
  14. char *dir;
  15. {
  16.     char filename[MAXPATHLEN];
  17.     struct stat sbuf;
  18.  
  19.     ok_sprintf(filename, "%s/%s", dir, target);
  20.     if (stat(filename, &sbuf) == -1){
  21.         return 0;
  22.     }
  23.     /* 
  24.      *  If it is not a directory and EITHER you own it and can
  25.      *  read it OR you don't own it and it is readable by others, 
  26.      *  OR you are in the group of the owner and it's group readable
  27.      *      - then this is it.
  28.      */
  29.  
  30.     if (((sbuf.st_mode & S_IFMT) == S_IFREG)  &&  
  31.         ((sbuf.st_uid == (short)uid && sbuf.st_mode & S_IREAD) ||
  32.         (sbuf.st_gid == (short)getgid() && sbuf.st_mode & G_READ) ||
  33.         (sbuf.st_uid != (short)uid && sbuf.st_mode & O_READ))){
  34.  
  35.         return 1;
  36.     }
  37.  
  38.     return 0;
  39. }
  40.