source: mainline/uspace/lib/posix/sys/stat.h@ 4f4b4e7

lfn serial ticket/834-toolchain-update topic/msim-upgrade topic/simplify-dev-export
Last change on this file since 4f4b4e7 was 4f4b4e7, checked in by Petr Koupy <petr.koupy@…>, 15 years ago

Coding style and file structure unified.
_exit moved to unistd.h.

  • Property mode set to 100644
File size: 4.8 KB
Line 
1/*
2 * Copyright (c) 2011 Jiri Zarevucky
3 * Copyright (c) 2011 Petr Koupy
4 * All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
8 * are met:
9 *
10 * - Redistributions of source code must retain the above copyright
11 * notice, this list of conditions and the following disclaimer.
12 * - Redistributions in binary form must reproduce the above copyright
13 * notice, this list of conditions and the following disclaimer in the
14 * documentation and/or other materials provided with the distribution.
15 * - The name of the author may not be used to endorse or promote products
16 * derived from this software without specific prior written permission.
17 *
18 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
19 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
20 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
21 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
22 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
23 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
24 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
25 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
27 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28 */
29
30/** @addtogroup libposix
31 * @{
32 */
33/** @file
34 */
35
36#ifndef POSIX_SYS_STAT_H_
37#define POSIX_SYS_STAT_H_
38
39#include "../libc/sys/stat.h"
40#include "time.h"
41
42/* values are the same as on Linux */
43
44#undef S_IFMT
45#undef S_IFSOCK
46#undef S_IFLNK
47#undef S_IFREG
48#undef S_IFBLK
49#undef S_IFDIR
50#undef S_IFCHR
51#undef S_IFIFO
52#define S_IFMT 0170000 /* all file types */
53#define S_IFSOCK 0140000 /* socket */
54#define S_IFLNK 0120000 /* symbolic link */
55#define S_IFREG 0100000 /* regular file */
56#define S_IFBLK 0060000 /* block device */
57#define S_IFDIR 0040000 /* directory */
58#define S_IFCHR 0020000 /* character device */
59#define S_IFIFO 0010000 /* FIFO */
60
61#undef S_ISUID
62#undef S_ISGID
63#undef S_ISVTX
64#define S_ISUID 0004000 /* SUID */
65#define S_ISGID 0002000 /* SGID */
66#define S_ISVTX 0001000 /* sticky */
67
68#undef S_IRWXU
69#undef S_IRUSR
70#undef S_IWUSR
71#undef S_IXUSR
72#define S_IRWXU 00700 /* owner permissions */
73#define S_IRUSR 00400
74#define S_IWUSR 00200
75#define S_IXUSR 00100
76
77#undef S_IRWXG
78#undef S_IRGRP
79#undef S_IWGRP
80#undef S_IXGRP
81#define S_IRWXG 00070 /* group permissions */
82#define S_IRGRP 00040
83#define S_IWGRP 00020
84#define S_IXGRP 00010
85
86#undef S_IRWXO
87#undef S_IROTH
88#undef S_IWOTH
89#undef S_IXOTH
90#define S_IRWXO 00007 /* other permissions */
91#define S_IROTH 00004
92#define S_IWOTH 00002
93#define S_IXOTH 00001
94
95#undef S_ISREG
96#undef S_ISDIR
97#undef S_ISCHR
98#undef S_ISBLK
99#undef S_ISFIFO
100#undef S_ISLNK
101#undef S_ISSOCK
102#define S_ISREG(m) ((m & S_IFREG) != 0)
103#define S_ISDIR(m) ((m & S_IFDIR) != 0)
104#define S_ISCHR(m) ((m & S_IFCHR) != 0)
105#define S_ISBLK(m) ((m & S_IFBLK) != 0)
106#define S_ISFIFO(m) ((m & S_IFIFO) != 0)
107#define S_ISLNK(m) ((m & S_IFLNK) != 0) /* symbolic link? (Not in POSIX.1-1996.) */
108#define S_ISSOCK(m) ((m & S_IFSOCK) != 0) /* socket? (Not in POSIX.1-1996.) */
109
110typedef devmap_handle_t posix_dev_t;
111typedef unsigned int posix_ino_t;
112typedef unsigned int posix_nlink_t;
113typedef unsigned int posix_uid_t;
114typedef unsigned int posix_gid_t;
115typedef aoff64_t posix_off_t;
116typedef unsigned int posix_blksize_t;
117typedef unsigned int posix_blkcnt_t;
118
119struct posix_stat {
120 struct stat sys_stat;
121
122 posix_dev_t st_dev; /* ID of device containing file */
123 posix_ino_t st_ino; /* inode number */
124 mode_t st_mode; /* protection */
125 posix_nlink_t st_nlink; /* number of hard links */
126 posix_uid_t st_uid; /* user ID of owner */
127 posix_gid_t st_gid; /* group ID of owner */
128 posix_dev_t st_rdev; /* device ID (if special file) */
129 posix_off_t st_size; /* total size, in bytes */
130 posix_blksize_t st_blksize; /* blocksize for file system I/O */
131 posix_blkcnt_t st_blocks; /* number of 512B blocks allocated */
132 time_t st_atime; /* time of last access */
133 time_t st_mtime; /* time of last modification */
134 time_t st_ctime; /* time of last status change */
135};
136
137extern int posix_fstat(int fd, struct posix_stat *st);
138extern int posix_stat(const char *path, struct posix_stat *st);
139
140#ifndef LIBPOSIX_INTERNAL
141 #define dev_t posix_dev_t
142 #define nlink_t posix_nlink_t
143 #define uid_t posix_uid_t
144 #define gid_t posix_gid_t
145 #define off_t posix_off_t
146 #define blksize_t posix_blksize_t
147 #define blkcnt_t posix_blkcnt_t
148
149 #define fstat posix_fstat
150 #define stat posix_stat
151#endif
152
153#endif /* POSIX_SYS_STAT_H */
154
155/** @}
156 */
Note: See TracBrowser for help on using the repository browser.