]> mj.ucw.cz Git - libucw.git/blob - ucw/lfs.h
Doc. system: Add type sections to definition list
[libucw.git] / ucw / lfs.h
1 /*
2  *      UCW Library -- Large File Support
3  *
4  *      (c) 1999--2002 Martin Mares <mj@ucw.cz>
5  *
6  *      This software may be freely distributed and used according to the terms
7  *      of the GNU Lesser General Public License.
8  */
9
10 #ifndef _UCW_LFS_H
11 #define _UCW_LFS_H
12
13 #include <fcntl.h>
14 #include <unistd.h>
15
16 #ifdef CONFIG_LFS
17
18 #define ucw_open open64
19 #define ucw_seek lseek64
20 #define ucw_pread pread64
21 #define ucw_pwrite pwrite64
22 #define ucw_ftruncate ftruncate64
23 #define ucw_mmap(a,l,p,f,d,o) mmap64(a,l,p,f,d,o)
24 #define ucw_pread pread64
25 #define ucw_pwrite pwrite64
26 #define ucw_stat stat64
27 #define ucw_fstat fstat64
28 typedef struct stat64 ucw_stat_t;
29
30 #else   /* !CONFIG_LFS */
31
32 #define ucw_open open
33 #define ucw_seek(f,o,w) lseek(f,o,w)
34 #define ucw_ftruncate(f,o) ftruncate(f,o)
35 #define ucw_mmap(a,l,p,f,d,o) mmap(a,l,p,f,d,o)
36 #define ucw_pread pread
37 #define ucw_pwrite pwrite
38 #define ucw_stat stat
39 #define ucw_fstat fstat
40 typedef struct stat ucw_stat_t;
41
42 #endif  /* !CONFIG_LFS */
43
44 #if defined(_POSIX_SYNCHRONIZED_IO) && (_POSIX_SYNCHRONIZED_IO > 0)
45 #define ucw_fdatasync fdatasync
46 #else
47 #define ucw_fdatasync fsync
48 #endif
49
50 #define HAVE_PREAD
51
52 static inline ucw_off_t
53 ucw_file_size(const char *name)
54 {
55   int fd = ucw_open(name, O_RDONLY);
56   if (fd < 0)
57     die("Cannot open %s: %m", name);
58   ucw_off_t len = ucw_seek(fd, 0, SEEK_END);
59   close(fd);
60   return len;
61 }
62
63 #endif  /* !_UCW_LFS_H */