Mercurial > dovecot > original-hg > dovecot-1.2
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 |
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 | 2 |
3 #include "lib.h" | |
4 #include "mmap-util.h" | |
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 | 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 | 13 return MAP_FAILED; |
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 | 22 if (*length == 0) |
23 return NULL; | |
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 | 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 | 28 } |
29 | |
30 void *mmap_ro_file(int fd, size_t *length) | |
31 { | |
32 return mmap_file(fd, length, PROT_READ); | |
33 } | |
34 | |
35 void *mmap_rw_file(int fd, size_t *length) | |
36 { | |
37 return mmap_file(fd, length, PROT_READ | PROT_WRITE); | |
38 } | |
39 | |
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 | 43 { |
2998
7e1fdbdaf465
my_madvise() wasn't returning anything.
Timo Sirainen <tss@iki.fi>
parents:
2439
diff
changeset
|
44 return 0; |
0 | 45 } |
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 } |