home *** CD-ROM | disk | FTP | other *** search
/ Programmer 7500 / MAX_PROGRAMMERS.iso / CLIPPER / MISC / EMXLIB8F.ZIP / EMX / LIB / SYS / CHMOD.C < prev    next >
Encoding:
C/C++ Source or Header  |  1993-01-02  |  953 b   |  42 lines

  1. /* sys/chmod.c (emx+gcc) -- Copyright (c) 1992-1993 by Eberhard Mattes */
  2.  
  3. #include <sys/emx.h>
  4. #include <string.h>
  5. #include <errno.h>
  6. #include <os2emx.h>
  7. #include "syscalls.h"
  8.  
  9. int __chmod (const char *name, int flag, int attr)
  10. {
  11.   ULONG rc;
  12.   FILESTATUS3 info;
  13.  
  14.   if (flag < 0 || flag > 1)
  15.     {
  16.       errno = EINVAL;
  17.       return (-1);
  18.     }
  19.   if ((name[0] == '/' || name[0] == '\\') && strlen (name) >= 6 &&
  20.       memicmp (name+1, "pipe", 4) == 0 && (name[5] == '/' || name[5] == '\\'))
  21.     {
  22.       errno = ENOENT;
  23.       return (-1);
  24.     }
  25.   rc = DosQueryPathInfo (name, FIL_STANDARD, &info, sizeof (info));
  26.   if (rc != 0)
  27.     {
  28.       _sys_set_errno (rc);
  29.       return (-1);
  30.     }
  31.   if (flag == 0)
  32.     return (info.attrFile);
  33.   info.attrFile = attr;
  34.   rc = DosSetPathInfo (name, FIL_STANDARD, &info, sizeof (info), 0);
  35.   if (rc != 0)
  36.     {
  37.       _sys_set_errno (rc);
  38.       return (-1);
  39.     }
  40.   return (0);
  41. }
  42.