annotate src/lib/mmap-util.c @ 6411:6a64e64fa3a3 HEAD

Renamed __attr_*__ to ATTR_*. Renamed __attrs_used__ to ATTRS_DEFINED.
author Timo Sirainen <tss@iki.fi>
date Sun, 16 Sep 2007 11:40:56 +0300
parents 7e1fdbdaf465
children 65c69a53a7be
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1741
9df02b1533b3 Removed most of the license comments from src/lib/*.c. It's just fine to
Timo Sirainen <tss@iki.fi>
parents: 1430
diff changeset
1 /* Copyright (c) 2002-2003 Timo Sirainen */
0
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
2
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
3 #include "lib.h"
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
4 #include "mmap-util.h"
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
5
543
52fd3d82e59a Removed mmap_aligned() which isn't used anywhere. Added mmap_file() which
Timo Sirainen <tss@iki.fi>
parents: 222
diff changeset
6 #include <sys/stat.h>
52fd3d82e59a Removed mmap_aligned() which isn't used anywhere. Added mmap_file() which
Timo Sirainen <tss@iki.fi>
parents: 222
diff changeset
7
52fd3d82e59a Removed mmap_aligned() which isn't used anywhere. Added mmap_file() which
Timo Sirainen <tss@iki.fi>
parents: 222
diff changeset
8 void *mmap_file(int fd, size_t *length, int prot)
0
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
9 {
543
52fd3d82e59a Removed mmap_aligned() which isn't used anywhere. Added mmap_file() which
Timo Sirainen <tss@iki.fi>
parents: 222
diff changeset
10 struct stat st;
43
526284657da7 Fail if we try to mmap() files larger than 2G fully to memory
Timo Sirainen <tss@iki.fi>
parents: 6
diff changeset
11
543
52fd3d82e59a Removed mmap_aligned() which isn't used anywhere. Added mmap_file() which
Timo Sirainen <tss@iki.fi>
parents: 222
diff changeset
12 if (fstat(fd, &st) < 0)
0
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
13 return MAP_FAILED;
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
14
543
52fd3d82e59a Removed mmap_aligned() which isn't used anywhere. Added mmap_file() which
Timo Sirainen <tss@iki.fi>
parents: 222
diff changeset
15 if (st.st_size > SSIZE_T_MAX) {
43
526284657da7 Fail if we try to mmap() files larger than 2G fully to memory
Timo Sirainen <tss@iki.fi>
parents: 6
diff changeset
16 /* too large file to map into memory */
526284657da7 Fail if we try to mmap() files larger than 2G fully to memory
Timo Sirainen <tss@iki.fi>
parents: 6
diff changeset
17 errno = EFBIG;
526284657da7 Fail if we try to mmap() files larger than 2G fully to memory
Timo Sirainen <tss@iki.fi>
parents: 6
diff changeset
18 return MAP_FAILED;
526284657da7 Fail if we try to mmap() files larger than 2G fully to memory
Timo Sirainen <tss@iki.fi>
parents: 6
diff changeset
19 }
526284657da7 Fail if we try to mmap() files larger than 2G fully to memory
Timo Sirainen <tss@iki.fi>
parents: 6
diff changeset
20
543
52fd3d82e59a Removed mmap_aligned() which isn't used anywhere. Added mmap_file() which
Timo Sirainen <tss@iki.fi>
parents: 222
diff changeset
21 *length = (size_t)st.st_size;
0
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
22 if (*length == 0)
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
23 return NULL;
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
24
183
4a7ab9e94f25 size_t fixes for lib/. Changed OFF_T_FORMAT to PRIuOFF_T which is more
Timo Sirainen <tss@iki.fi>
parents: 43
diff changeset
25 i_assert(*length > 0 && *length < SSIZE_T_MAX);
0
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
26
543
52fd3d82e59a Removed mmap_aligned() which isn't used anywhere. Added mmap_file() which
Timo Sirainen <tss@iki.fi>
parents: 222
diff changeset
27 return mmap(NULL, *length, prot, MAP_SHARED, fd, 0);
0
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
28 }
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
29
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
30 void *mmap_ro_file(int fd, size_t *length)
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
31 {
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
32 return mmap_file(fd, length, PROT_READ);
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
33 }
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
34
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
35 void *mmap_rw_file(int fd, size_t *length)
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
36 {
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
37 return mmap_file(fd, length, PROT_READ | PROT_WRITE);
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
38 }
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
39
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
40 #ifndef HAVE_MADVISE
6411
6a64e64fa3a3 Renamed __attr_*__ to ATTR_*. Renamed __attrs_used__ to ATTRS_DEFINED.
Timo Sirainen <tss@iki.fi>
parents: 2998
diff changeset
41 int my_madvise(void *start ATTR_UNUSED, size_t length ATTR_UNUSED,
6a64e64fa3a3 Renamed __attr_*__ to ATTR_*. Renamed __attrs_used__ to ATTRS_DEFINED.
Timo Sirainen <tss@iki.fi>
parents: 2998
diff changeset
42 int advice ATTR_UNUSED)
0
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
43 {
2998
7e1fdbdaf465 my_madvise() wasn't returning anything.
Timo Sirainen <tss@iki.fi>
parents: 2439
diff changeset
44 return 0;
0
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
45 }
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
46 #endif
2439
7d6ca38c8c37 Added mmap_get_page_size() call which basically returns getpagesize() but
Timo Sirainen <tss@iki.fi>
parents: 1793
diff changeset
47
7d6ca38c8c37 Added mmap_get_page_size() call which basically returns getpagesize() but
Timo Sirainen <tss@iki.fi>
parents: 1793
diff changeset
48 size_t mmap_get_page_size(void)
7d6ca38c8c37 Added mmap_get_page_size() call which basically returns getpagesize() but
Timo Sirainen <tss@iki.fi>
parents: 1793
diff changeset
49 {
7d6ca38c8c37 Added mmap_get_page_size() call which basically returns getpagesize() but
Timo Sirainen <tss@iki.fi>
parents: 1793
diff changeset
50 static size_t size = 0;
7d6ca38c8c37 Added mmap_get_page_size() call which basically returns getpagesize() but
Timo Sirainen <tss@iki.fi>
parents: 1793
diff changeset
51
7d6ca38c8c37 Added mmap_get_page_size() call which basically returns getpagesize() but
Timo Sirainen <tss@iki.fi>
parents: 1793
diff changeset
52 if (size != 0)
7d6ca38c8c37 Added mmap_get_page_size() call which basically returns getpagesize() but
Timo Sirainen <tss@iki.fi>
parents: 1793
diff changeset
53 return size;
7d6ca38c8c37 Added mmap_get_page_size() call which basically returns getpagesize() but
Timo Sirainen <tss@iki.fi>
parents: 1793
diff changeset
54 size = getpagesize();
7d6ca38c8c37 Added mmap_get_page_size() call which basically returns getpagesize() but
Timo Sirainen <tss@iki.fi>
parents: 1793
diff changeset
55 return size;
7d6ca38c8c37 Added mmap_get_page_size() call which basically returns getpagesize() but
Timo Sirainen <tss@iki.fi>
parents: 1793
diff changeset
56 }