]> Zhao Yanbai Git Server - minix.git/commitdiff
Giovanni's symlink patches (includes only)
authorBen Gras <ben@minix3.org>
Mon, 31 Oct 2005 14:14:54 +0000 (14:14 +0000)
committerBen Gras <ben@minix3.org>
Mon, 31 Oct 2005 14:14:54 +0000 (14:14 +0000)
include/errno.h
include/fcntl.h
include/minix/callnr.h
include/minix/const.h
include/sys/stat.h
include/unistd.h

index 7bd2284b97255f2143096db997bc0d798307d3ed..4762f3d4e6e8725f63b18696097170d130baf7f7 100755 (executable)
@@ -73,6 +73,7 @@ extern int errno;               /* place where the error numbers go */
 #define ENOLCK        (_SIGN 37)  /* no locks available */
 #define ENOSYS        (_SIGN 38)  /* function not implemented */
 #define ENOTEMPTY     (_SIGN 39)  /* directory not empty */
+#define ELOOP         (_SIGN 40)  /* too many levels of symlinks detected */
 
 /* The following errors relate to networking. */
 #define EPACKSIZE     (_SIGN 50)  /* invalid packet size for some protocol */
index 78d511beb286c2a676197958072af3eb89676f36..2aa7cce6987258f7878a4874fca627a4642a607a 100755 (executable)
@@ -64,4 +64,12 @@ _PROTOTYPE( int creat, (const char *_path, _mnx_Mode_t _mode)                );
 _PROTOTYPE( int fcntl, (int _filedes, int _cmd, ...)                   );
 _PROTOTYPE( int open,  (const char *_path, int _oflag, ...)            );
 
+/* For locking files. */
+#define LOCK_SH                F_RDLCK         /* Shared lock */
+#define LOCK_EX                F_WRLCK         /* Exclusive lock */
+#define LOCK_NB                0x0080          /* Do not block when locking */
+#define LOCK_UN                F_UNLCK         /* Unlock */
+
+_PROTOTYPE(  int flock, (int fd, int mode)                             );
+
 #endif /* _FCNTL_H */
index c8af59c2e0e03181a5fed0cca0ff87372ef3149c..cb9891b690a82e288d7723a8dc99a3d93111232d 100755 (executable)
 #define DUP              41 
 #define PIPE             42 
 #define TIMES            43
+#define SYMLINK                  45
 #define SETGID           46
 #define GETGID           47
 #define SIGNAL           48
+#define RDLNK            49
+#define LSTAT            50
 #define IOCTL            54
 #define FCNTL            55
 #define EXEC             59
index 3814621a366ce9f3cb7d660e2666f668fdc35cb5..6c9e1792acb5d60ee5b64e506bccb905e7c2c41c 100755 (executable)
@@ -96,6 +96,7 @@
 
 /* Flag bits for i_mode in the inode. */
 #define I_TYPE          0170000        /* this field gives inode type */
+#define I_SYMBOLIC_LINK 0120000        /* file is a symbolic link */
 #define I_REGULAR       0100000        /* regular file, not dir or special */
 #define I_BLOCK_SPECIAL 0060000        /* block special file */
 #define I_DIRECTORY     0040000        /* file is a directory */
 #define MAX_INODE_NR ((ino_t) 037777777777)    /* largest inode number */
 #define MAX_FILE_POS ((off_t) 037777777777)    /* largest legal file offset */
 
+#define MAX_SYM_LOOPS  8       /* how many symbolic links are recursed */
+
 #define NO_BLOCK              ((block_t) 0)    /* absence of a block number */
 #define NO_ENTRY                ((ino_t) 0)    /* absence of a dir entry */
 #define NO_ZONE                ((zone_t) 0)    /* absence of a zone number */
index f586e459f2091693c15a3a3b0a567e3724910b64..b08df5020763f5e4a93d05cd15be78de20f11d70 100755 (executable)
@@ -29,14 +29,14 @@ struct stat {
  * extensions such as S_IFREG != (mode_t) S_IFREG when ints are 32 bits.
  */
 #define S_IFMT  ((mode_t) 0170000)     /* type of file */
-#define S_IFLNK ((mode_t) 0120000)     /* symbolic link, not implemented */
+#define S_IFLNK ((mode_t) 0120000)     /* symbolic link */
 #define S_IFREG ((mode_t) 0100000)     /* regular */
-#define S_IFBLK 0060000                /* block special */
-#define S_IFDIR 0040000        /* directory */
-#define S_IFCHR 0020000                /* character special */
-#define S_IFIFO 0010000                /* this is a FIFO */
-#define S_ISUID 0004000                /* set user id on execution */
-#define S_ISGID 0002000                /* set group id on execution */
+#define S_IFBLK ((mode_t) 0060000)     /* block special */
+#define S_IFDIR ((mode_t) 0040000)     /* directory */
+#define S_IFCHR ((mode_t) 0020000)     /* character special */
+#define S_IFIFO ((mode_t) 0010000)     /* this is a FIFO */
+#define S_ISUID ((mode_t) 0004000)     /* set user id on execution */
+#define S_ISGID ((mode_t) 0002000)     /* set group id on execution */
                                /* next is reserved for future use */
 #define S_ISVTX   01000                /* save swapped text even after use */
 
@@ -61,6 +61,7 @@ struct stat {
 #define S_ISDIR(m)     (((m) & S_IFMT) == S_IFDIR)     /* is a directory */
 #define S_ISCHR(m)     (((m) & S_IFMT) == S_IFCHR)     /* is a char spec */
 #define S_ISBLK(m)     (((m) & S_IFMT) == S_IFBLK)     /* is a block spec */
+#define S_ISLNK(m)     (((m) & S_IFMT) == S_IFLNK)     /* is a symlink */
 #define S_ISFIFO(m)    (((m) & S_IFMT) == S_IFIFO)     /* is a pipe/FIFO */
 #define S_ISLNK(m)      (((m) & S_IFMT) == S_IFLNK)     /* is a sym link */
 
index 629ab534cc667e20c98b1098f932b4b6c8d707ae..f05e94add4f9c99c36cf2033a69c51d99a0c3309 100755 (executable)
@@ -182,8 +182,4 @@ _PROTOTYPE( int setgroups, (int ngroups, const gid_t *gidset)               );
 
 #endif
 
-_PROTOTYPE( int readlink, (const char *, char *, int));
-_PROTOTYPE( int getopt, (int, char **, char *));
-extern int optind, opterr, optopt;
-
 #endif /* _UNISTD_H */