Mercurial > cpython-lru_cache-weakref
annotate Modules/mmapmodule.c @ 87690:66c1c9f32567 default tip
Add use_weakref option to functools.lru_cache
The use_weakref option makes lru_cache create weak references to the function
arguments when creating the cache key, which prevents them from staying in the
memory forever even after all other references to them are gone.
This is a proof of concept for http://bugs.python.org/issue19859
| author | Radomir Dopieralski <devel@sheep.art.pl> |
|---|---|
| date | Tue, 03 Dec 2013 16:02:48 +0100 |
| parents | ef889c3d5dc6 |
| children |
| rev | line source |
|---|---|
|
12146
e8c30e69666b
Hacked for Win32 by Mark Hammond.
Guido van Rossum <guido@python.org>
parents:
12120
diff
changeset
|
1 /* |
|
e8c30e69666b
Hacked for Win32 by Mark Hammond.
Guido van Rossum <guido@python.org>
parents:
12120
diff
changeset
|
2 / Author: Sam Rushing <rushing@nightmare.com> |
|
20888
2cd2ae4de30d
Remove obsolete e-mail address
Andrew M. Kuchling <amk@amk.ca>
parents:
18626
diff
changeset
|
3 / Hacked for Unix by AMK |
|
12146
e8c30e69666b
Hacked for Win32 by Mark Hammond.
Guido van Rossum <guido@python.org>
parents:
12120
diff
changeset
|
4 / $Id$ |
|
12120
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
5 |
|
43734
3e5edf19d5f0
Merged revisions 58221-58741 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
43423
diff
changeset
|
6 / Modified to support mmap with offset - to map a 'window' of a file |
|
3e5edf19d5f0
Merged revisions 58221-58741 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
43423
diff
changeset
|
7 / Author: Yotam Medini yotamm@mellanox.co.il |
|
3e5edf19d5f0
Merged revisions 58221-58741 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
43423
diff
changeset
|
8 / |
|
12120
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
9 / mmapmodule.cpp -- map a view of a file into memory |
|
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
10 / |
|
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
11 / todo: need permission flags, perhaps a 'chsize' analog |
|
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
12 / not all functions check range yet!!! |
|
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
13 / |
|
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
14 / |
|
13758
bc37e6a335f2
More Windows changes.
Mark Hammond <mhammond@skippinet.com.au>
parents:
13757
diff
changeset
|
15 / This version of mmapmodule.c has been changed significantly |
|
bc37e6a335f2
More Windows changes.
Mark Hammond <mhammond@skippinet.com.au>
parents:
13757
diff
changeset
|
16 / from the original mmapfile.c on which it was based. |
|
bc37e6a335f2
More Windows changes.
Mark Hammond <mhammond@skippinet.com.au>
parents:
13757
diff
changeset
|
17 / The original version of mmapfile is maintained by Sam at |
|
12120
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
18 / ftp://squirl.nightmare.com/pub/python/python-ext. |
|
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
19 */ |
|
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
20 |
|
36541
f7f0d2a5b20b
Remove size restrictions.
Martin v. Löwis <martin@v.loewis.de>
parents:
36540
diff
changeset
|
21 #define PY_SSIZE_T_CLEAN |
|
12146
e8c30e69666b
Hacked for Win32 by Mark Hammond.
Guido van Rossum <guido@python.org>
parents:
12120
diff
changeset
|
22 #include <Python.h> |
|
85045
1754b7900da1
Issue #4885: Add weakref support to mmap objects. Patch by Valerie Lambert.
Antoine Pitrou <solipsis@pitrou.net>
parents:
82200
diff
changeset
|
23 #include "structmember.h" |
|
12146
e8c30e69666b
Hacked for Win32 by Mark Hammond.
Guido van Rossum <guido@python.org>
parents:
12120
diff
changeset
|
24 |
|
24071
8142f8d668a0
Patch #569753: Remove support for WIN16.
Martin v. Löwis <martin@v.loewis.de>
parents:
22177
diff
changeset
|
25 #ifndef MS_WINDOWS |
|
12120
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
26 #define UNIX |
|
69753
cb464f8fb3a1
Issue #11277: mmap calls fcntl(fd, F_FULLFSYNC) on Mac OS X to get around a
Victor Stinner <victor.stinner@haypocalc.com>
parents:
68268
diff
changeset
|
27 # ifdef __APPLE__ |
|
cb464f8fb3a1
Issue #11277: mmap calls fcntl(fd, F_FULLFSYNC) on Mac OS X to get around a
Victor Stinner <victor.stinner@haypocalc.com>
parents:
68268
diff
changeset
|
28 # include <fcntl.h> |
|
cb464f8fb3a1
Issue #11277: mmap calls fcntl(fd, F_FULLFSYNC) on Mac OS X to get around a
Victor Stinner <victor.stinner@haypocalc.com>
parents:
68268
diff
changeset
|
29 # endif |
|
12120
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
30 #endif |
|
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
31 |
|
24071
8142f8d668a0
Patch #569753: Remove support for WIN16.
Martin v. Löwis <martin@v.loewis.de>
parents:
22177
diff
changeset
|
32 #ifdef MS_WINDOWS |
|
12120
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
33 #include <windows.h> |
|
14956
c78e76a571b6
my_getpagesize(): New function; returns the size of a page of memory.
Fred Drake <fdrake@acm.org>
parents:
14836
diff
changeset
|
34 static int |
|
c78e76a571b6
my_getpagesize(): New function; returns the size of a page of memory.
Fred Drake <fdrake@acm.org>
parents:
14836
diff
changeset
|
35 my_getpagesize(void) |
|
c78e76a571b6
my_getpagesize(): New function; returns the size of a page of memory.
Fred Drake <fdrake@acm.org>
parents:
14836
diff
changeset
|
36 { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
37 SYSTEM_INFO si; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
38 GetSystemInfo(&si); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
39 return si.dwPageSize; |
|
14956
c78e76a571b6
my_getpagesize(): New function; returns the size of a page of memory.
Fred Drake <fdrake@acm.org>
parents:
14836
diff
changeset
|
40 } |
|
43734
3e5edf19d5f0
Merged revisions 58221-58741 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
43423
diff
changeset
|
41 |
|
3e5edf19d5f0
Merged revisions 58221-58741 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
43423
diff
changeset
|
42 static int |
|
3e5edf19d5f0
Merged revisions 58221-58741 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
43423
diff
changeset
|
43 my_getallocationgranularity (void) |
|
3e5edf19d5f0
Merged revisions 58221-58741 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
43423
diff
changeset
|
44 { |
|
3e5edf19d5f0
Merged revisions 58221-58741 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
43423
diff
changeset
|
45 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
46 SYSTEM_INFO si; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
47 GetSystemInfo(&si); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
48 return si.dwAllocationGranularity; |
|
43734
3e5edf19d5f0
Merged revisions 58221-58741 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
43423
diff
changeset
|
49 } |
|
3e5edf19d5f0
Merged revisions 58221-58741 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
43423
diff
changeset
|
50 |
|
12120
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
51 #endif |
|
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
52 |
|
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
53 #ifdef UNIX |
|
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
54 #include <sys/mman.h> |
|
12941
8c9554edbebb
Fix the size() method to return the size of the file on Unix, not the
Andrew M. Kuchling <amk@amk.ca>
parents:
12846
diff
changeset
|
55 #include <sys/stat.h> |
|
14836
67e0ff4aa7b9
For the benefit of SunOS 4.1.4, define MS_SYNC as 0 when it's
Guido van Rossum <guido@python.org>
parents:
13758
diff
changeset
|
56 |
|
14956
c78e76a571b6
my_getpagesize(): New function; returns the size of a page of memory.
Fred Drake <fdrake@acm.org>
parents:
14836
diff
changeset
|
57 #if defined(HAVE_SYSCONF) && defined(_SC_PAGESIZE) |
|
c78e76a571b6
my_getpagesize(): New function; returns the size of a page of memory.
Fred Drake <fdrake@acm.org>
parents:
14836
diff
changeset
|
58 static int |
|
c78e76a571b6
my_getpagesize(): New function; returns the size of a page of memory.
Fred Drake <fdrake@acm.org>
parents:
14836
diff
changeset
|
59 my_getpagesize(void) |
|
c78e76a571b6
my_getpagesize(): New function; returns the size of a page of memory.
Fred Drake <fdrake@acm.org>
parents:
14836
diff
changeset
|
60 { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
61 return sysconf(_SC_PAGESIZE); |
|
14956
c78e76a571b6
my_getpagesize(): New function; returns the size of a page of memory.
Fred Drake <fdrake@acm.org>
parents:
14836
diff
changeset
|
62 } |
|
43734
3e5edf19d5f0
Merged revisions 58221-58741 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
43423
diff
changeset
|
63 |
|
3e5edf19d5f0
Merged revisions 58221-58741 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
43423
diff
changeset
|
64 #define my_getallocationgranularity my_getpagesize |
|
14956
c78e76a571b6
my_getpagesize(): New function; returns the size of a page of memory.
Fred Drake <fdrake@acm.org>
parents:
14836
diff
changeset
|
65 #else |
|
c78e76a571b6
my_getpagesize(): New function; returns the size of a page of memory.
Fred Drake <fdrake@acm.org>
parents:
14836
diff
changeset
|
66 #define my_getpagesize getpagesize |
|
c78e76a571b6
my_getpagesize(): New function; returns the size of a page of memory.
Fred Drake <fdrake@acm.org>
parents:
14836
diff
changeset
|
67 #endif |
|
c78e76a571b6
my_getpagesize(): New function; returns the size of a page of memory.
Fred Drake <fdrake@acm.org>
parents:
14836
diff
changeset
|
68 |
|
14836
67e0ff4aa7b9
For the benefit of SunOS 4.1.4, define MS_SYNC as 0 when it's
Guido van Rossum <guido@python.org>
parents:
13758
diff
changeset
|
69 #endif /* UNIX */ |
|
67e0ff4aa7b9
For the benefit of SunOS 4.1.4, define MS_SYNC as 0 when it's
Guido van Rossum <guido@python.org>
parents:
13758
diff
changeset
|
70 |
|
12120
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
71 #include <string.h> |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
39222
diff
changeset
|
72 |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
39222
diff
changeset
|
73 #ifdef HAVE_SYS_TYPES_H |
|
12120
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
74 #include <sys/types.h> |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
39222
diff
changeset
|
75 #endif /* HAVE_SYS_TYPES_H */ |
|
12120
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
76 |
|
36515
7c9cfd3b5d0f
Update comment and make accurate.
Neal Norwitz <nnorwitz@gmail.com>
parents:
36501
diff
changeset
|
77 /* Prefer MAP_ANONYMOUS since MAP_ANON is deprecated according to man page. */ |
|
36446
02f0744a9cd0
Patch #1407135, bug #1424041, make mmap.mmap(-1, length) work the same
Neal Norwitz <nnorwitz@gmail.com>
parents:
36445
diff
changeset
|
78 #if !defined(MAP_ANONYMOUS) && defined(MAP_ANON) |
|
02f0744a9cd0
Patch #1407135, bug #1424041, make mmap.mmap(-1, length) work the same
Neal Norwitz <nnorwitz@gmail.com>
parents:
36445
diff
changeset
|
79 # define MAP_ANONYMOUS MAP_ANON |
|
02f0744a9cd0
Patch #1407135, bug #1424041, make mmap.mmap(-1, length) work the same
Neal Norwitz <nnorwitz@gmail.com>
parents:
36445
diff
changeset
|
80 #endif |
|
02f0744a9cd0
Patch #1407135, bug #1424041, make mmap.mmap(-1, length) work the same
Neal Norwitz <nnorwitz@gmail.com>
parents:
36445
diff
changeset
|
81 |
|
20970
e167b82c6444
CVS patch #477161: New "access" keyword for mmap, from Jay T Miller.
Tim Peters <tim.peters@gmail.com>
parents:
20888
diff
changeset
|
82 typedef enum |
|
e167b82c6444
CVS patch #477161: New "access" keyword for mmap, from Jay T Miller.
Tim Peters <tim.peters@gmail.com>
parents:
20888
diff
changeset
|
83 { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
84 ACCESS_DEFAULT, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
85 ACCESS_READ, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
86 ACCESS_WRITE, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
87 ACCESS_COPY |
|
20970
e167b82c6444
CVS patch #477161: New "access" keyword for mmap, from Jay T Miller.
Tim Peters <tim.peters@gmail.com>
parents:
20888
diff
changeset
|
88 } access_mode; |
|
e167b82c6444
CVS patch #477161: New "access" keyword for mmap, from Jay T Miller.
Tim Peters <tim.peters@gmail.com>
parents:
20888
diff
changeset
|
89 |
|
12120
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
90 typedef struct { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
91 PyObject_HEAD |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
92 char * data; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
93 size_t size; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
94 size_t pos; /* relative to offset */ |
|
68054
f8a77fd675f5
Merged revisions 88460,88464,88466,88486,88511,88652 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67707
diff
changeset
|
95 #ifdef MS_WINDOWS |
|
f8a77fd675f5
Merged revisions 88460,88464,88466,88486,88511,88652 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67707
diff
changeset
|
96 PY_LONG_LONG offset; |
|
f8a77fd675f5
Merged revisions 88460,88464,88466,88486,88511,88652 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67707
diff
changeset
|
97 #else |
|
f8a77fd675f5
Merged revisions 88460,88464,88466,88486,88511,88652 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67707
diff
changeset
|
98 off_t offset; |
|
f8a77fd675f5
Merged revisions 88460,88464,88466,88486,88511,88652 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67707
diff
changeset
|
99 #endif |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
100 int exports; |
|
12120
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
101 |
|
24071
8142f8d668a0
Patch #569753: Remove support for WIN16.
Martin v. Löwis <martin@v.loewis.de>
parents:
22177
diff
changeset
|
102 #ifdef MS_WINDOWS |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
103 HANDLE map_handle; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
104 HANDLE file_handle; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
105 char * tagname; |
|
12120
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
106 #endif |
|
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
107 |
|
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
108 #ifdef UNIX |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
109 int fd; |
|
12120
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
110 #endif |
|
20970
e167b82c6444
CVS patch #477161: New "access" keyword for mmap, from Jay T Miller.
Tim Peters <tim.peters@gmail.com>
parents:
20888
diff
changeset
|
111 |
|
85045
1754b7900da1
Issue #4885: Add weakref support to mmap objects. Patch by Valerie Lambert.
Antoine Pitrou <solipsis@pitrou.net>
parents:
82200
diff
changeset
|
112 PyObject *weakreflist; |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
113 access_mode access; |
|
12120
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
114 } mmap_object; |
|
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
115 |
|
20970
e167b82c6444
CVS patch #477161: New "access" keyword for mmap, from Jay T Miller.
Tim Peters <tim.peters@gmail.com>
parents:
20888
diff
changeset
|
116 |
|
12120
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
117 static void |
|
13441
5edee6878943
-- ANSI-fying, names
Fredrik Lundh <fredrik@pythonware.com>
parents:
13359
diff
changeset
|
118 mmap_object_dealloc(mmap_object *m_obj) |
|
12120
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
119 { |
|
24071
8142f8d668a0
Patch #569753: Remove support for WIN16.
Martin v. Löwis <martin@v.loewis.de>
parents:
22177
diff
changeset
|
120 #ifdef MS_WINDOWS |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
121 if (m_obj->data != NULL) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
122 UnmapViewOfFile (m_obj->data); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
123 if (m_obj->map_handle != NULL) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
124 CloseHandle (m_obj->map_handle); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
125 if (m_obj->file_handle != INVALID_HANDLE_VALUE) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
126 CloseHandle (m_obj->file_handle); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
127 if (m_obj->tagname) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
128 PyMem_Free(m_obj->tagname); |
|
24071
8142f8d668a0
Patch #569753: Remove support for WIN16.
Martin v. Löwis <martin@v.loewis.de>
parents:
22177
diff
changeset
|
129 #endif /* MS_WINDOWS */ |
|
12120
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
130 |
|
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
131 #ifdef UNIX |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
132 if (m_obj->fd >= 0) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
133 (void) close(m_obj->fd); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
134 if (m_obj->data!=NULL) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
135 munmap(m_obj->data, m_obj->size); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
136 } |
|
12120
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
137 #endif /* UNIX */ |
|
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
138 |
|
85045
1754b7900da1
Issue #4885: Add weakref support to mmap objects. Patch by Valerie Lambert.
Antoine Pitrou <solipsis@pitrou.net>
parents:
82200
diff
changeset
|
139 if (m_obj->weakreflist != NULL) |
|
1754b7900da1
Issue #4885: Add weakref support to mmap objects. Patch by Valerie Lambert.
Antoine Pitrou <solipsis@pitrou.net>
parents:
82200
diff
changeset
|
140 PyObject_ClearWeakRefs((PyObject *) m_obj); |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
141 Py_TYPE(m_obj)->tp_free((PyObject*)m_obj); |
|
12120
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
142 } |
|
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
143 |
|
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
144 static PyObject * |
|
38669
19fd6141940d
Partially merge trunk into p3yk. The removal of Mac/Tools is confusing svn
Thomas Wouters <thomas@python.org>
parents:
36882
diff
changeset
|
145 mmap_close_method(mmap_object *self, PyObject *unused) |
|
12120
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
146 { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
147 if (self->exports > 0) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
148 PyErr_SetString(PyExc_BufferError, "cannot close "\ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
149 "exported pointers exist"); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
150 return NULL; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
151 } |
|
24071
8142f8d668a0
Patch #569753: Remove support for WIN16.
Martin v. Löwis <martin@v.loewis.de>
parents:
22177
diff
changeset
|
152 #ifdef MS_WINDOWS |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
153 /* For each resource we maintain, we need to check |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
154 the value is valid, and if so, free the resource |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
155 and set the member value to an invalid value so |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
156 the dealloc does not attempt to resource clearing |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
157 again. |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
158 TODO - should we check for errors in the close operations??? |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
159 */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
160 if (self->data != NULL) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
161 UnmapViewOfFile(self->data); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
162 self->data = NULL; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
163 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
164 if (self->map_handle != NULL) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
165 CloseHandle(self->map_handle); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
166 self->map_handle = NULL; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
167 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
168 if (self->file_handle != INVALID_HANDLE_VALUE) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
169 CloseHandle(self->file_handle); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
170 self->file_handle = INVALID_HANDLE_VALUE; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
171 } |
|
24071
8142f8d668a0
Patch #569753: Remove support for WIN16.
Martin v. Löwis <martin@v.loewis.de>
parents:
22177
diff
changeset
|
172 #endif /* MS_WINDOWS */ |
|
12120
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
173 |
|
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
174 #ifdef UNIX |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
175 if (0 <= self->fd) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
176 (void) close(self->fd); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
177 self->fd = -1; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
178 if (self->data != NULL) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
179 munmap(self->data, self->size); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
180 self->data = NULL; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
181 } |
|
12120
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
182 #endif |
|
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
183 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
184 Py_INCREF(Py_None); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
185 return Py_None; |
|
12120
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
186 } |
|
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
187 |
|
24071
8142f8d668a0
Patch #569753: Remove support for WIN16.
Martin v. Löwis <martin@v.loewis.de>
parents:
22177
diff
changeset
|
188 #ifdef MS_WINDOWS |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
189 #define CHECK_VALID(err) \ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
190 do { \ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
191 if (self->map_handle == NULL) { \ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
192 PyErr_SetString(PyExc_ValueError, "mmap closed or invalid"); \ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
193 return err; \ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
194 } \ |
|
12120
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
195 } while (0) |
|
24071
8142f8d668a0
Patch #569753: Remove support for WIN16.
Martin v. Löwis <martin@v.loewis.de>
parents:
22177
diff
changeset
|
196 #endif /* MS_WINDOWS */ |
|
12120
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
197 |
|
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
198 #ifdef UNIX |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
199 #define CHECK_VALID(err) \ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
200 do { \ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
201 if (self->data == NULL) { \ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
202 PyErr_SetString(PyExc_ValueError, "mmap closed or invalid"); \ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
203 return err; \ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
204 } \ |
|
12120
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
205 } while (0) |
|
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
206 #endif /* UNIX */ |
|
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
207 |
|
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
208 static PyObject * |
|
13441
5edee6878943
-- ANSI-fying, names
Fredrik Lundh <fredrik@pythonware.com>
parents:
13359
diff
changeset
|
209 mmap_read_byte_method(mmap_object *self, |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
210 PyObject *unused) |
|
12120
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
211 { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
212 CHECK_VALID(NULL); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
213 if (self->pos < self->size) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
214 char value = self->data[self->pos]; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
215 self->pos += 1; |
|
65932
1e4d46a61fbe
Merged revisions 86159 via svnmerge from
Hirokazu Yamamoto <ocean-city@m2.ccsnet.ne.jp>
parents:
64047
diff
changeset
|
216 return Py_BuildValue("B", (unsigned char)value); |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
217 } else { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
218 PyErr_SetString(PyExc_ValueError, "read byte out of range"); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
219 return NULL; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
220 } |
|
12120
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
221 } |
|
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
222 |
|
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
223 static PyObject * |
|
13441
5edee6878943
-- ANSI-fying, names
Fredrik Lundh <fredrik@pythonware.com>
parents:
13359
diff
changeset
|
224 mmap_read_line_method(mmap_object *self, |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
225 PyObject *unused) |
|
12120
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
226 { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
227 char *start = self->data+self->pos; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
228 char *eof = self->data+self->size; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
229 char *eol; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
230 PyObject *result; |
|
12120
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
231 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
232 CHECK_VALID(NULL); |
|
12120
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
233 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
234 eol = memchr(start, '\n', self->size - self->pos); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
235 if (!eol) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
236 eol = eof; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
237 else |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
238 ++eol; /* we're interested in the position after the |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
239 newline. */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
240 result = PyBytes_FromStringAndSize(start, (eol - start)); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
241 self->pos += (eol - start); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
242 return result; |
|
12120
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
243 } |
|
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
244 |
|
70712
964d0d65a2a9
Issue #12021: Make mmap's read() method argument optional. Patch by Petri
Charles-François Natali <neologix@free.fr>
parents:
70696
diff
changeset
|
245 /* Basically the "n" format code with the ability to turn None into -1. */ |
|
964d0d65a2a9
Issue #12021: Make mmap's read() method argument optional. Patch by Petri
Charles-François Natali <neologix@free.fr>
parents:
70696
diff
changeset
|
246 static int |
|
964d0d65a2a9
Issue #12021: Make mmap's read() method argument optional. Patch by Petri
Charles-François Natali <neologix@free.fr>
parents:
70696
diff
changeset
|
247 mmap_convert_ssize_t(PyObject *obj, void *result) { |
|
964d0d65a2a9
Issue #12021: Make mmap's read() method argument optional. Patch by Petri
Charles-François Natali <neologix@free.fr>
parents:
70696
diff
changeset
|
248 Py_ssize_t limit; |
|
964d0d65a2a9
Issue #12021: Make mmap's read() method argument optional. Patch by Petri
Charles-François Natali <neologix@free.fr>
parents:
70696
diff
changeset
|
249 if (obj == Py_None) { |
|
964d0d65a2a9
Issue #12021: Make mmap's read() method argument optional. Patch by Petri
Charles-François Natali <neologix@free.fr>
parents:
70696
diff
changeset
|
250 limit = -1; |
|
964d0d65a2a9
Issue #12021: Make mmap's read() method argument optional. Patch by Petri
Charles-François Natali <neologix@free.fr>
parents:
70696
diff
changeset
|
251 } |
|
964d0d65a2a9
Issue #12021: Make mmap's read() method argument optional. Patch by Petri
Charles-François Natali <neologix@free.fr>
parents:
70696
diff
changeset
|
252 else if (PyNumber_Check(obj)) { |
|
964d0d65a2a9
Issue #12021: Make mmap's read() method argument optional. Patch by Petri
Charles-François Natali <neologix@free.fr>
parents:
70696
diff
changeset
|
253 limit = PyNumber_AsSsize_t(obj, PyExc_OverflowError); |
|
964d0d65a2a9
Issue #12021: Make mmap's read() method argument optional. Patch by Petri
Charles-François Natali <neologix@free.fr>
parents:
70696
diff
changeset
|
254 if (limit == -1 && PyErr_Occurred()) |
|
964d0d65a2a9
Issue #12021: Make mmap's read() method argument optional. Patch by Petri
Charles-François Natali <neologix@free.fr>
parents:
70696
diff
changeset
|
255 return 0; |
|
964d0d65a2a9
Issue #12021: Make mmap's read() method argument optional. Patch by Petri
Charles-François Natali <neologix@free.fr>
parents:
70696
diff
changeset
|
256 } |
|
964d0d65a2a9
Issue #12021: Make mmap's read() method argument optional. Patch by Petri
Charles-François Natali <neologix@free.fr>
parents:
70696
diff
changeset
|
257 else { |
|
964d0d65a2a9
Issue #12021: Make mmap's read() method argument optional. Patch by Petri
Charles-François Natali <neologix@free.fr>
parents:
70696
diff
changeset
|
258 PyErr_Format(PyExc_TypeError, |
|
964d0d65a2a9
Issue #12021: Make mmap's read() method argument optional. Patch by Petri
Charles-François Natali <neologix@free.fr>
parents:
70696
diff
changeset
|
259 "integer argument expected, got '%.200s'", |
|
964d0d65a2a9
Issue #12021: Make mmap's read() method argument optional. Patch by Petri
Charles-François Natali <neologix@free.fr>
parents:
70696
diff
changeset
|
260 Py_TYPE(obj)->tp_name); |
|
964d0d65a2a9
Issue #12021: Make mmap's read() method argument optional. Patch by Petri
Charles-François Natali <neologix@free.fr>
parents:
70696
diff
changeset
|
261 return 0; |
|
964d0d65a2a9
Issue #12021: Make mmap's read() method argument optional. Patch by Petri
Charles-François Natali <neologix@free.fr>
parents:
70696
diff
changeset
|
262 } |
|
964d0d65a2a9
Issue #12021: Make mmap's read() method argument optional. Patch by Petri
Charles-François Natali <neologix@free.fr>
parents:
70696
diff
changeset
|
263 *((Py_ssize_t *)result) = limit; |
|
964d0d65a2a9
Issue #12021: Make mmap's read() method argument optional. Patch by Petri
Charles-François Natali <neologix@free.fr>
parents:
70696
diff
changeset
|
264 return 1; |
|
964d0d65a2a9
Issue #12021: Make mmap's read() method argument optional. Patch by Petri
Charles-François Natali <neologix@free.fr>
parents:
70696
diff
changeset
|
265 } |
|
964d0d65a2a9
Issue #12021: Make mmap's read() method argument optional. Patch by Petri
Charles-François Natali <neologix@free.fr>
parents:
70696
diff
changeset
|
266 |
|
12120
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
267 static PyObject * |
|
13441
5edee6878943
-- ANSI-fying, names
Fredrik Lundh <fredrik@pythonware.com>
parents:
13359
diff
changeset
|
268 mmap_read_method(mmap_object *self, |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
269 PyObject *args) |
|
12120
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
270 { |
|
70712
964d0d65a2a9
Issue #12021: Make mmap's read() method argument optional. Patch by Petri
Charles-François Natali <neologix@free.fr>
parents:
70696
diff
changeset
|
271 Py_ssize_t num_bytes = -1, n; |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
272 PyObject *result; |
|
12120
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
273 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
274 CHECK_VALID(NULL); |
|
70712
964d0d65a2a9
Issue #12021: Make mmap's read() method argument optional. Patch by Petri
Charles-François Natali <neologix@free.fr>
parents:
70696
diff
changeset
|
275 if (!PyArg_ParseTuple(args, "|O&:read", mmap_convert_ssize_t, &num_bytes)) |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
276 return(NULL); |
|
12120
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
277 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
278 /* silently 'adjust' out-of-range requests */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
279 assert(self->size >= self->pos); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
280 n = self->size - self->pos; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
281 /* The difference can overflow, only if self->size is greater than |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
282 * PY_SSIZE_T_MAX. But then the operation cannot possibly succeed, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
283 * because the mapped area and the returned string each need more |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
284 * than half of the addressable memory. So we clip the size, and let |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
285 * the code below raise MemoryError. |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
286 */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
287 if (n < 0) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
288 n = PY_SSIZE_T_MAX; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
289 if (num_bytes < 0 || num_bytes > n) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
290 num_bytes = n; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
291 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
292 result = PyBytes_FromStringAndSize(self->data+self->pos, num_bytes); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
293 self->pos += num_bytes; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
294 return result; |
|
12120
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
295 } |
|
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
296 |
|
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
297 static PyObject * |
|
44782
ca2683a67943
Merged revisions 60080-60089,60091-60093 via svnmerge from
Georg Brandl <georg@python.org>
parents:
44643
diff
changeset
|
298 mmap_gfind(mmap_object *self, |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
299 PyObject *args, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
300 int reverse) |
|
12120
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
301 { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
302 Py_ssize_t start = self->pos; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
303 Py_ssize_t end = self->size; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
304 const char *needle; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
305 Py_ssize_t len; |
|
12120
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
306 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
307 CHECK_VALID(NULL); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
308 if (!PyArg_ParseTuple(args, reverse ? "y#|nn:rfind" : "y#|nn:find", |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
309 &needle, &len, &start, &end)) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
310 return NULL; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
311 } else { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
312 const char *p, *start_p, *end_p; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
313 int sign = reverse ? -1 : 1; |
|
17821
780248cd1d9a
Fix the .find() method for memory maps.
Greg Stein <gstein@lyra.org>
parents:
17735
diff
changeset
|
314 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
315 if (start < 0) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
316 start += self->size; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
317 if (start < 0) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
318 start = 0; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
319 else if ((size_t)start > self->size) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
320 start = self->size; |
|
17821
780248cd1d9a
Fix the .find() method for memory maps.
Greg Stein <gstein@lyra.org>
parents:
17735
diff
changeset
|
321 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
322 if (end < 0) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
323 end += self->size; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
324 if (end < 0) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
325 end = 0; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
326 else if ((size_t)end > self->size) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
327 end = self->size; |
|
44782
ca2683a67943
Merged revisions 60080-60089,60091-60093 via svnmerge from
Georg Brandl <georg@python.org>
parents:
44643
diff
changeset
|
328 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
329 start_p = self->data + start; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
330 end_p = self->data + end; |
|
44782
ca2683a67943
Merged revisions 60080-60089,60091-60093 via svnmerge from
Georg Brandl <georg@python.org>
parents:
44643
diff
changeset
|
331 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
332 for (p = (reverse ? end_p - len : start_p); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
333 (p >= start_p) && (p + len <= end_p); p += sign) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
334 Py_ssize_t i; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
335 for (i = 0; i < len && needle[i] == p[i]; ++i) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
336 /* nothing */; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
337 if (i == len) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
338 return PyLong_FromSsize_t(p - self->data); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
339 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
340 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
341 return PyLong_FromLong(-1); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
342 } |
|
12120
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
343 } |
|
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
344 |
|
44782
ca2683a67943
Merged revisions 60080-60089,60091-60093 via svnmerge from
Georg Brandl <georg@python.org>
parents:
44643
diff
changeset
|
345 static PyObject * |
|
ca2683a67943
Merged revisions 60080-60089,60091-60093 via svnmerge from
Georg Brandl <georg@python.org>
parents:
44643
diff
changeset
|
346 mmap_find_method(mmap_object *self, |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
347 PyObject *args) |
|
44782
ca2683a67943
Merged revisions 60080-60089,60091-60093 via svnmerge from
Georg Brandl <georg@python.org>
parents:
44643
diff
changeset
|
348 { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
349 return mmap_gfind(self, args, 0); |
|
44782
ca2683a67943
Merged revisions 60080-60089,60091-60093 via svnmerge from
Georg Brandl <georg@python.org>
parents:
44643
diff
changeset
|
350 } |
|
ca2683a67943
Merged revisions 60080-60089,60091-60093 via svnmerge from
Georg Brandl <georg@python.org>
parents:
44643
diff
changeset
|
351 |
|
ca2683a67943
Merged revisions 60080-60089,60091-60093 via svnmerge from
Georg Brandl <georg@python.org>
parents:
44643
diff
changeset
|
352 static PyObject * |
|
ca2683a67943
Merged revisions 60080-60089,60091-60093 via svnmerge from
Georg Brandl <georg@python.org>
parents:
44643
diff
changeset
|
353 mmap_rfind_method(mmap_object *self, |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
354 PyObject *args) |
|
44782
ca2683a67943
Merged revisions 60080-60089,60091-60093 via svnmerge from
Georg Brandl <georg@python.org>
parents:
44643
diff
changeset
|
355 { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
356 return mmap_gfind(self, args, 1); |
|
44782
ca2683a67943
Merged revisions 60080-60089,60091-60093 via svnmerge from
Georg Brandl <georg@python.org>
parents:
44643
diff
changeset
|
357 } |
|
ca2683a67943
Merged revisions 60080-60089,60091-60093 via svnmerge from
Georg Brandl <georg@python.org>
parents:
44643
diff
changeset
|
358 |
|
36537
fdabdf148336
Trimmed trailing whitespace.
Tim Peters <tim.peters@gmail.com>
parents:
36536
diff
changeset
|
359 static int |
|
43384
4e57c36f6d2e
Fixing the spelling of "writeable" to "writable", particularly PyBUF_WRITEABLE.
Sean Reifscheider <jafo@tummy.com>
parents:
43100
diff
changeset
|
360 is_writable(mmap_object *self) |
|
20970
e167b82c6444
CVS patch #477161: New "access" keyword for mmap, from Jay T Miller.
Tim Peters <tim.peters@gmail.com>
parents:
20888
diff
changeset
|
361 { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
362 if (self->access != ACCESS_READ) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
363 return 1; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
364 PyErr_Format(PyExc_TypeError, "mmap can't modify a readonly memory map."); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
365 return 0; |
|
20970
e167b82c6444
CVS patch #477161: New "access" keyword for mmap, from Jay T Miller.
Tim Peters <tim.peters@gmail.com>
parents:
20888
diff
changeset
|
366 } |
|
e167b82c6444
CVS patch #477161: New "access" keyword for mmap, from Jay T Miller.
Tim Peters <tim.peters@gmail.com>
parents:
20888
diff
changeset
|
367 |
|
36537
fdabdf148336
Trimmed trailing whitespace.
Tim Peters <tim.peters@gmail.com>
parents:
36536
diff
changeset
|
368 static int |
|
20970
e167b82c6444
CVS patch #477161: New "access" keyword for mmap, from Jay T Miller.
Tim Peters <tim.peters@gmail.com>
parents:
20888
diff
changeset
|
369 is_resizeable(mmap_object *self) |
|
e167b82c6444
CVS patch #477161: New "access" keyword for mmap, from Jay T Miller.
Tim Peters <tim.peters@gmail.com>
parents:
20888
diff
changeset
|
370 { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
371 if (self->exports > 0) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
372 PyErr_SetString(PyExc_BufferError, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
373 "mmap can't resize with extant buffers exported."); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
374 return 0; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
375 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
376 if ((self->access == ACCESS_WRITE) || (self->access == ACCESS_DEFAULT)) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
377 return 1; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
378 PyErr_Format(PyExc_TypeError, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
379 "mmap can't resize a readonly or copy-on-write memory map."); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
380 return 0; |
|
20970
e167b82c6444
CVS patch #477161: New "access" keyword for mmap, from Jay T Miller.
Tim Peters <tim.peters@gmail.com>
parents:
20888
diff
changeset
|
381 } |
|
e167b82c6444
CVS patch #477161: New "access" keyword for mmap, from Jay T Miller.
Tim Peters <tim.peters@gmail.com>
parents:
20888
diff
changeset
|
382 |
|
e167b82c6444
CVS patch #477161: New "access" keyword for mmap, from Jay T Miller.
Tim Peters <tim.peters@gmail.com>
parents:
20888
diff
changeset
|
383 |
|
12120
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
384 static PyObject * |
|
13441
5edee6878943
-- ANSI-fying, names
Fredrik Lundh <fredrik@pythonware.com>
parents:
13359
diff
changeset
|
385 mmap_write_method(mmap_object *self, |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
386 PyObject *args) |
|
12120
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
387 { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
388 Py_ssize_t length; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
389 char *data; |
|
12120
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
390 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
391 CHECK_VALID(NULL); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
392 if (!PyArg_ParseTuple(args, "y#:write", &data, &length)) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
393 return(NULL); |
|
12120
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
394 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
395 if (!is_writable(self)) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
396 return NULL; |
|
20970
e167b82c6444
CVS patch #477161: New "access" keyword for mmap, from Jay T Miller.
Tim Peters <tim.peters@gmail.com>
parents:
20888
diff
changeset
|
397 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
398 if ((self->pos + length) > self->size) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
399 PyErr_SetString(PyExc_ValueError, "data out of range"); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
400 return NULL; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
401 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
402 memcpy(self->data+self->pos, data, length); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
403 self->pos = self->pos+length; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
404 Py_INCREF(Py_None); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
405 return Py_None; |
|
12120
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
406 } |
|
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
407 |
|
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
408 static PyObject * |
|
13441
5edee6878943
-- ANSI-fying, names
Fredrik Lundh <fredrik@pythonware.com>
parents:
13359
diff
changeset
|
409 mmap_write_byte_method(mmap_object *self, |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
410 PyObject *args) |
|
12120
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
411 { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
412 char value; |
|
12120
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
413 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
414 CHECK_VALID(NULL); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
415 if (!PyArg_ParseTuple(args, "b:write_byte", &value)) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
416 return(NULL); |
|
12120
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
417 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
418 if (!is_writable(self)) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
419 return NULL; |
|
51910
759dbace51d2
Merged revisions 70053 via svnmerge from
Hirokazu Yamamoto <ocean-city@m2.ccsnet.ne.jp>
parents:
51706
diff
changeset
|
420 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
421 if (self->pos < self->size) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
422 *(self->data+self->pos) = value; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
423 self->pos += 1; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
424 Py_INCREF(Py_None); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
425 return Py_None; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
426 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
427 else { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
428 PyErr_SetString(PyExc_ValueError, "write byte out of range"); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
429 return NULL; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
430 } |
|
12120
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
431 } |
|
36537
fdabdf148336
Trimmed trailing whitespace.
Tim Peters <tim.peters@gmail.com>
parents:
36536
diff
changeset
|
432 |
|
12120
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
433 static PyObject * |
|
13441
5edee6878943
-- ANSI-fying, names
Fredrik Lundh <fredrik@pythonware.com>
parents:
13359
diff
changeset
|
434 mmap_size_method(mmap_object *self, |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
435 PyObject *unused) |
|
12120
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
436 { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
437 CHECK_VALID(NULL); |
|
12120
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
438 |
|
24071
8142f8d668a0
Patch #569753: Remove support for WIN16.
Martin v. Löwis <martin@v.loewis.de>
parents:
22177
diff
changeset
|
439 #ifdef MS_WINDOWS |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
440 if (self->file_handle != INVALID_HANDLE_VALUE) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
441 DWORD low,high; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
442 PY_LONG_LONG size; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
443 low = GetFileSize(self->file_handle, &high); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
444 if (low == INVALID_FILE_SIZE) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
445 /* It might be that the function appears to have failed, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
446 when indeed its size equals INVALID_FILE_SIZE */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
447 DWORD error = GetLastError(); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
448 if (error != NO_ERROR) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
449 return PyErr_SetFromWindowsErr(error); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
450 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
451 if (!high && low < LONG_MAX) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
452 return PyLong_FromLong((long)low); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
453 size = (((PY_LONG_LONG)high)<<32) + low; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
454 return PyLong_FromLongLong(size); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
455 } else { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
456 return PyLong_FromSsize_t(self->size); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
457 } |
|
24071
8142f8d668a0
Patch #569753: Remove support for WIN16.
Martin v. Löwis <martin@v.loewis.de>
parents:
22177
diff
changeset
|
458 #endif /* MS_WINDOWS */ |
|
12120
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
459 |
|
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
460 #ifdef UNIX |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
461 { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
462 struct stat buf; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
463 if (-1 == fstat(self->fd, &buf)) { |
|
72879
41a1de81ef2b
PEP 3151 / issue #12555: reworking the OS and IO exception hierarchy.
Antoine Pitrou <solipsis@pitrou.net>
parents:
72835
diff
changeset
|
464 PyErr_SetFromErrno(PyExc_OSError); |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
465 return NULL; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
466 } |
|
68054
f8a77fd675f5
Merged revisions 88460,88464,88466,88486,88511,88652 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67707
diff
changeset
|
467 #ifdef HAVE_LARGEFILE_SUPPORT |
|
f8a77fd675f5
Merged revisions 88460,88464,88466,88486,88511,88652 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67707
diff
changeset
|
468 return PyLong_FromLongLong(buf.st_size); |
|
f8a77fd675f5
Merged revisions 88460,88464,88466,88486,88511,88652 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67707
diff
changeset
|
469 #else |
|
f8a77fd675f5
Merged revisions 88460,88464,88466,88486,88511,88652 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67707
diff
changeset
|
470 return PyLong_FromLong(buf.st_size); |
|
f8a77fd675f5
Merged revisions 88460,88464,88466,88486,88511,88652 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67707
diff
changeset
|
471 #endif |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
472 } |
|
12120
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
473 #endif /* UNIX */ |
|
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
474 } |
|
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
475 |
|
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
476 /* This assumes that you want the entire file mapped, |
|
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
477 / and when recreating the map will make the new file |
|
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
478 / have the new size |
|
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
479 / |
|
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
480 / Is this really necessary? This could easily be done |
|
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
481 / from python by just closing and re-opening with the |
|
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
482 / new size? |
|
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
483 */ |
|
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
484 |
|
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
485 static PyObject * |
|
13441
5edee6878943
-- ANSI-fying, names
Fredrik Lundh <fredrik@pythonware.com>
parents:
13359
diff
changeset
|
486 mmap_resize_method(mmap_object *self, |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
487 PyObject *args) |
|
12120
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
488 { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
489 Py_ssize_t new_size; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
490 CHECK_VALID(NULL); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
491 if (!PyArg_ParseTuple(args, "n:resize", &new_size) || |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
492 !is_resizeable(self)) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
493 return NULL; |
|
24071
8142f8d668a0
Patch #569753: Remove support for WIN16.
Martin v. Löwis <martin@v.loewis.de>
parents:
22177
diff
changeset
|
494 #ifdef MS_WINDOWS |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
495 } else { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
496 DWORD dwErrCode = 0; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
497 DWORD off_hi, off_lo, newSizeLow, newSizeHigh; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
498 /* First, unmap the file view */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
499 UnmapViewOfFile(self->data); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
500 self->data = NULL; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
501 /* Close the mapping object */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
502 CloseHandle(self->map_handle); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
503 self->map_handle = NULL; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
504 /* Move to the desired EOF position */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
505 newSizeHigh = (DWORD)((self->offset + new_size) >> 32); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
506 newSizeLow = (DWORD)((self->offset + new_size) & 0xFFFFFFFF); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
507 off_hi = (DWORD)(self->offset >> 32); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
508 off_lo = (DWORD)(self->offset & 0xFFFFFFFF); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
509 SetFilePointer(self->file_handle, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
510 newSizeLow, &newSizeHigh, FILE_BEGIN); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
511 /* Change the size of the file */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
512 SetEndOfFile(self->file_handle); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
513 /* Create another mapping object and remap the file view */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
514 self->map_handle = CreateFileMapping( |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
515 self->file_handle, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
516 NULL, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
517 PAGE_READWRITE, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
518 0, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
519 0, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
520 self->tagname); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
521 if (self->map_handle != NULL) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
522 self->data = (char *) MapViewOfFile(self->map_handle, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
523 FILE_MAP_WRITE, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
524 off_hi, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
525 off_lo, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
526 new_size); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
527 if (self->data != NULL) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
528 self->size = new_size; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
529 Py_INCREF(Py_None); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
530 return Py_None; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
531 } else { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
532 dwErrCode = GetLastError(); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
533 CloseHandle(self->map_handle); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
534 self->map_handle = NULL; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
535 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
536 } else { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
537 dwErrCode = GetLastError(); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
538 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
539 PyErr_SetFromWindowsErr(dwErrCode); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
540 return NULL; |
|
24071
8142f8d668a0
Patch #569753: Remove support for WIN16.
Martin v. Löwis <martin@v.loewis.de>
parents:
22177
diff
changeset
|
541 #endif /* MS_WINDOWS */ |
|
12120
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
542 |
|
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
543 #ifdef UNIX |
|
36537
fdabdf148336
Trimmed trailing whitespace.
Tim Peters <tim.peters@gmail.com>
parents:
36536
diff
changeset
|
544 #ifndef HAVE_MREMAP |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
545 } else { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
546 PyErr_SetString(PyExc_SystemError, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
547 "mmap: resizing not available--no mremap()"); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
548 return NULL; |
|
12120
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
549 #else |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
550 } else { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
551 void *newmap; |
| 35612 | 552 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
553 if (ftruncate(self->fd, self->offset + new_size) == -1) { |
|
72879
41a1de81ef2b
PEP 3151 / issue #12555: reworking the OS and IO exception hierarchy.
Antoine Pitrou <solipsis@pitrou.net>
parents:
72835
diff
changeset
|
554 PyErr_SetFromErrno(PyExc_OSError); |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
555 return NULL; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
556 } |
|
12120
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
557 |
|
12948
acb0261b6942
Support resizing the mapping depending on whether HAVE_MREMAP is defined
Andrew M. Kuchling <amk@amk.ca>
parents:
12945
diff
changeset
|
558 #ifdef MREMAP_MAYMOVE |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
559 newmap = mremap(self->data, self->size, new_size, MREMAP_MAYMOVE); |
|
12948
acb0261b6942
Support resizing the mapping depending on whether HAVE_MREMAP is defined
Andrew M. Kuchling <amk@amk.ca>
parents:
12945
diff
changeset
|
560 #else |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
561 #if defined(__NetBSD__) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
562 newmap = mremap(self->data, self->size, self->data, new_size, 0); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
563 #else |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
564 newmap = mremap(self->data, self->size, new_size, 0); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
565 #endif /* __NetBSD__ */ |
|
12948
acb0261b6942
Support resizing the mapping depending on whether HAVE_MREMAP is defined
Andrew M. Kuchling <amk@amk.ca>
parents:
12945
diff
changeset
|
566 #endif |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
567 if (newmap == (void *)-1) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
568 { |
|
72879
41a1de81ef2b
PEP 3151 / issue #12555: reworking the OS and IO exception hierarchy.
Antoine Pitrou <solipsis@pitrou.net>
parents:
72835
diff
changeset
|
569 PyErr_SetFromErrno(PyExc_OSError); |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
570 return NULL; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
571 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
572 self->data = newmap; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
573 self->size = new_size; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
574 Py_INCREF(Py_None); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
575 return Py_None; |
|
12948
acb0261b6942
Support resizing the mapping depending on whether HAVE_MREMAP is defined
Andrew M. Kuchling <amk@amk.ca>
parents:
12945
diff
changeset
|
576 #endif /* HAVE_MREMAP */ |
|
12120
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
577 #endif /* UNIX */ |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
578 } |
|
12120
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
579 } |
|
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
580 |
|
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
581 static PyObject * |
|
38669
19fd6141940d
Partially merge trunk into p3yk. The removal of Mac/Tools is confusing svn
Thomas Wouters <thomas@python.org>
parents:
36882
diff
changeset
|
582 mmap_tell_method(mmap_object *self, PyObject *unused) |
|
12120
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
583 { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
584 CHECK_VALID(NULL); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
585 return PyLong_FromSize_t(self->pos); |
|
12120
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
586 } |
|
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
587 |
|
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
588 static PyObject * |
|
13441
5edee6878943
-- ANSI-fying, names
Fredrik Lundh <fredrik@pythonware.com>
parents:
13359
diff
changeset
|
589 mmap_flush_method(mmap_object *self, PyObject *args) |
|
12120
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
590 { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
591 Py_ssize_t offset = 0; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
592 Py_ssize_t size = self->size; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
593 CHECK_VALID(NULL); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
594 if (!PyArg_ParseTuple(args, "|nn:flush", &offset, &size)) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
595 return NULL; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
596 if ((size_t)(offset + size) > self->size) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
597 PyErr_SetString(PyExc_ValueError, "flush values out of range"); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
598 return NULL; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
599 } |
|
66825
7253be96a19e
Merged revisions 85678 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents:
65932
diff
changeset
|
600 |
|
7253be96a19e
Merged revisions 85678 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents:
65932
diff
changeset
|
601 if (self->access == ACCESS_READ || self->access == ACCESS_COPY) |
|
7253be96a19e
Merged revisions 85678 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents:
65932
diff
changeset
|
602 return PyLong_FromLong(0); |
|
7253be96a19e
Merged revisions 85678 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents:
65932
diff
changeset
|
603 |
|
24071
8142f8d668a0
Patch #569753: Remove support for WIN16.
Martin v. Löwis <martin@v.loewis.de>
parents:
22177
diff
changeset
|
604 #ifdef MS_WINDOWS |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
605 return PyLong_FromLong((long) FlushViewOfFile(self->data+offset, size)); |
|
44999
7c02182e2979
Merged revisions 60284-60349 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44885
diff
changeset
|
606 #elif defined(UNIX) |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
607 /* XXX semantics of return value? */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
608 /* XXX flags for msync? */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
609 if (-1 == msync(self->data + offset, size, MS_SYNC)) { |
|
72879
41a1de81ef2b
PEP 3151 / issue #12555: reworking the OS and IO exception hierarchy.
Antoine Pitrou <solipsis@pitrou.net>
parents:
72835
diff
changeset
|
610 PyErr_SetFromErrno(PyExc_OSError); |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
611 return NULL; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
612 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
613 return PyLong_FromLong(0); |
|
44999
7c02182e2979
Merged revisions 60284-60349 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44885
diff
changeset
|
614 #else |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
615 PyErr_SetString(PyExc_ValueError, "flush not supported on this system"); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
616 return NULL; |
|
44999
7c02182e2979
Merged revisions 60284-60349 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44885
diff
changeset
|
617 #endif |
|
12120
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
618 } |
|
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
619 |
|
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
620 static PyObject * |
|
13441
5edee6878943
-- ANSI-fying, names
Fredrik Lundh <fredrik@pythonware.com>
parents:
13359
diff
changeset
|
621 mmap_seek_method(mmap_object *self, PyObject *args) |
|
12120
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
622 { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
623 Py_ssize_t dist; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
624 int how=0; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
625 CHECK_VALID(NULL); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
626 if (!PyArg_ParseTuple(args, "n|i:seek", &dist, &how)) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
627 return NULL; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
628 else { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
629 size_t where; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
630 switch (how) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
631 case 0: /* relative to start */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
632 if (dist < 0) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
633 goto onoutofrange; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
634 where = dist; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
635 break; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
636 case 1: /* relative to current position */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
637 if ((Py_ssize_t)self->pos + dist < 0) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
638 goto onoutofrange; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
639 where = self->pos + dist; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
640 break; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
641 case 2: /* relative to end */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
642 if ((Py_ssize_t)self->size + dist < 0) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
643 goto onoutofrange; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
644 where = self->size + dist; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
645 break; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
646 default: |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
647 PyErr_SetString(PyExc_ValueError, "unknown seek type"); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
648 return NULL; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
649 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
650 if (where > self->size) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
651 goto onoutofrange; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
652 self->pos = where; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
653 Py_INCREF(Py_None); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
654 return Py_None; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
655 } |
| 12945 | 656 |
|
20970
e167b82c6444
CVS patch #477161: New "access" keyword for mmap, from Jay T Miller.
Tim Peters <tim.peters@gmail.com>
parents:
20888
diff
changeset
|
657 onoutofrange: |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
658 PyErr_SetString(PyExc_ValueError, "seek out of range"); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
659 return NULL; |
|
12120
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
660 } |
|
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
661 |
|
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
662 static PyObject * |
|
13441
5edee6878943
-- ANSI-fying, names
Fredrik Lundh <fredrik@pythonware.com>
parents:
13359
diff
changeset
|
663 mmap_move_method(mmap_object *self, PyObject *args) |
|
12120
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
664 { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
665 unsigned long dest, src, cnt; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
666 CHECK_VALID(NULL); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
667 if (!PyArg_ParseTuple(args, "kkk:move", &dest, &src, &cnt) || |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
668 !is_writable(self)) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
669 return NULL; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
670 } else { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
671 /* bounds check the values */ |
|
70696
9ef14857e49c
Checking if an unsigned long is < 0 is pointless.
Brett Cannon <brett@python.org>
parents:
69754
diff
changeset
|
672 if ((cnt + dest) < cnt || (cnt + src) < cnt || |
|
9ef14857e49c
Checking if an unsigned long is < 0 is pointless.
Brett Cannon <brett@python.org>
parents:
69754
diff
changeset
|
673 src > self->size || (src + cnt) > self->size || |
|
9ef14857e49c
Checking if an unsigned long is < 0 is pointless.
Brett Cannon <brett@python.org>
parents:
69754
diff
changeset
|
674 dest > self->size || (dest + cnt) > self->size) { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
675 PyErr_SetString(PyExc_ValueError, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
676 "source, destination, or count out of range"); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
677 return NULL; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
678 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
679 memmove(self->data+dest, self->data+src, cnt); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
680 Py_INCREF(Py_None); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
681 return Py_None; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
682 } |
|
12120
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
683 } |
|
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
684 |
|
63422
cf989a34c77e
#8046: add context manager protocol support to mmap objects. Also add closed property.
Georg Brandl <georg@python.org>
parents:
61466
diff
changeset
|
685 static PyObject * |
|
cf989a34c77e
#8046: add context manager protocol support to mmap objects. Also add closed property.
Georg Brandl <georg@python.org>
parents:
61466
diff
changeset
|
686 mmap_closed_get(mmap_object *self) |
|
cf989a34c77e
#8046: add context manager protocol support to mmap objects. Also add closed property.
Georg Brandl <georg@python.org>
parents:
61466
diff
changeset
|
687 { |
|
cf989a34c77e
#8046: add context manager protocol support to mmap objects. Also add closed property.
Georg Brandl <georg@python.org>
parents:
61466
diff
changeset
|
688 #ifdef MS_WINDOWS |
|
cf989a34c77e
#8046: add context manager protocol support to mmap objects. Also add closed property.
Georg Brandl <georg@python.org>
parents:
61466
diff
changeset
|
689 return PyBool_FromLong(self->map_handle == NULL ? 1 : 0); |
|
cf989a34c77e
#8046: add context manager protocol support to mmap objects. Also add closed property.
Georg Brandl <georg@python.org>
parents:
61466
diff
changeset
|
690 #elif defined(UNIX) |
|
cf989a34c77e
#8046: add context manager protocol support to mmap objects. Also add closed property.
Georg Brandl <georg@python.org>
parents:
61466
diff
changeset
|
691 return PyBool_FromLong(self->data == NULL ? 1 : 0); |
|
cf989a34c77e
#8046: add context manager protocol support to mmap objects. Also add closed property.
Georg Brandl <georg@python.org>
parents:
61466
diff
changeset
|
692 #endif |
|
cf989a34c77e
#8046: add context manager protocol support to mmap objects. Also add closed property.
Georg Brandl <georg@python.org>
parents:
61466
diff
changeset
|
693 } |
|
cf989a34c77e
#8046: add context manager protocol support to mmap objects. Also add closed property.
Georg Brandl <georg@python.org>
parents:
61466
diff
changeset
|
694 |
|
cf989a34c77e
#8046: add context manager protocol support to mmap objects. Also add closed property.
Georg Brandl <georg@python.org>
parents:
61466
diff
changeset
|
695 static PyObject * |
|
cf989a34c77e
#8046: add context manager protocol support to mmap objects. Also add closed property.
Georg Brandl <georg@python.org>
parents:
61466
diff
changeset
|
696 mmap__enter__method(mmap_object *self, PyObject *args) |
|
cf989a34c77e
#8046: add context manager protocol support to mmap objects. Also add closed property.
Georg Brandl <georg@python.org>
parents:
61466
diff
changeset
|
697 { |
|
cf989a34c77e
#8046: add context manager protocol support to mmap objects. Also add closed property.
Georg Brandl <georg@python.org>
parents:
61466
diff
changeset
|
698 CHECK_VALID(NULL); |
|
cf989a34c77e
#8046: add context manager protocol support to mmap objects. Also add closed property.
Georg Brandl <georg@python.org>
parents:
61466
diff
changeset
|
699 |
|
cf989a34c77e
#8046: add context manager protocol support to mmap objects. Also add closed property.
Georg Brandl <georg@python.org>
parents:
61466
diff
changeset
|
700 Py_INCREF(self); |
|
cf989a34c77e
#8046: add context manager protocol support to mmap objects. Also add closed property.
Georg Brandl <georg@python.org>
parents:
61466
diff
changeset
|
701 return (PyObject *)self; |
|
cf989a34c77e
#8046: add context manager protocol support to mmap objects. Also add closed property.
Georg Brandl <georg@python.org>
parents:
61466
diff
changeset
|
702 } |
|
cf989a34c77e
#8046: add context manager protocol support to mmap objects. Also add closed property.
Georg Brandl <georg@python.org>
parents:
61466
diff
changeset
|
703 |
|
cf989a34c77e
#8046: add context manager protocol support to mmap objects. Also add closed property.
Georg Brandl <georg@python.org>
parents:
61466
diff
changeset
|
704 static PyObject * |
|
cf989a34c77e
#8046: add context manager protocol support to mmap objects. Also add closed property.
Georg Brandl <georg@python.org>
parents:
61466
diff
changeset
|
705 mmap__exit__method(PyObject *self, PyObject *args) |
|
cf989a34c77e
#8046: add context manager protocol support to mmap objects. Also add closed property.
Georg Brandl <georg@python.org>
parents:
61466
diff
changeset
|
706 { |
|
72925
7109f31300fb
Rename _Py_identifier to _Py_IDENTIFIER.
Martin v. Löwis <martin@v.loewis.de>
parents:
72879
diff
changeset
|
707 _Py_IDENTIFIER(close); |
|
72835
5e33219492bc
Add API for static strings, primarily good for identifiers.
Martin v. Löwis <martin@v.loewis.de>
parents:
70946
diff
changeset
|
708 |
|
5e33219492bc
Add API for static strings, primarily good for identifiers.
Martin v. Löwis <martin@v.loewis.de>
parents:
70946
diff
changeset
|
709 return _PyObject_CallMethodId(self, &PyId_close, NULL); |
|
63422
cf989a34c77e
#8046: add context manager protocol support to mmap objects. Also add closed property.
Georg Brandl <georg@python.org>
parents:
61466
diff
changeset
|
710 } |
|
cf989a34c77e
#8046: add context manager protocol support to mmap objects. Also add closed property.
Georg Brandl <georg@python.org>
parents:
61466
diff
changeset
|
711 |
|
12120
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
712 static struct PyMethodDef mmap_object_methods[] = { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
713 {"close", (PyCFunction) mmap_close_method, METH_NOARGS}, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
714 {"find", (PyCFunction) mmap_find_method, METH_VARARGS}, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
715 {"rfind", (PyCFunction) mmap_rfind_method, METH_VARARGS}, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
716 {"flush", (PyCFunction) mmap_flush_method, METH_VARARGS}, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
717 {"move", (PyCFunction) mmap_move_method, METH_VARARGS}, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
718 {"read", (PyCFunction) mmap_read_method, METH_VARARGS}, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
719 {"read_byte", (PyCFunction) mmap_read_byte_method, METH_NOARGS}, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
720 {"readline", (PyCFunction) mmap_read_line_method, METH_NOARGS}, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
721 {"resize", (PyCFunction) mmap_resize_method, METH_VARARGS}, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
722 {"seek", (PyCFunction) mmap_seek_method, METH_VARARGS}, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
723 {"size", (PyCFunction) mmap_size_method, METH_NOARGS}, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
724 {"tell", (PyCFunction) mmap_tell_method, METH_NOARGS}, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
725 {"write", (PyCFunction) mmap_write_method, METH_VARARGS}, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
726 {"write_byte", (PyCFunction) mmap_write_byte_method, METH_VARARGS}, |
|
63422
cf989a34c77e
#8046: add context manager protocol support to mmap objects. Also add closed property.
Georg Brandl <georg@python.org>
parents:
61466
diff
changeset
|
727 {"__enter__", (PyCFunction) mmap__enter__method, METH_NOARGS}, |
|
cf989a34c77e
#8046: add context manager protocol support to mmap objects. Also add closed property.
Georg Brandl <georg@python.org>
parents:
61466
diff
changeset
|
728 {"__exit__", (PyCFunction) mmap__exit__method, METH_VARARGS}, |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
729 {NULL, NULL} /* sentinel */ |
|
12120
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
730 }; |
|
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
731 |
|
63422
cf989a34c77e
#8046: add context manager protocol support to mmap objects. Also add closed property.
Georg Brandl <georg@python.org>
parents:
61466
diff
changeset
|
732 static PyGetSetDef mmap_object_getset[] = { |
|
cf989a34c77e
#8046: add context manager protocol support to mmap objects. Also add closed property.
Georg Brandl <georg@python.org>
parents:
61466
diff
changeset
|
733 {"closed", (getter) mmap_closed_get, NULL, NULL}, |
|
cf989a34c77e
#8046: add context manager protocol support to mmap objects. Also add closed property.
Georg Brandl <georg@python.org>
parents:
61466
diff
changeset
|
734 {NULL} |
|
cf989a34c77e
#8046: add context manager protocol support to mmap objects. Also add closed property.
Georg Brandl <georg@python.org>
parents:
61466
diff
changeset
|
735 }; |
|
cf989a34c77e
#8046: add context manager protocol support to mmap objects. Also add closed property.
Georg Brandl <georg@python.org>
parents:
61466
diff
changeset
|
736 |
|
cf989a34c77e
#8046: add context manager protocol support to mmap objects. Also add closed property.
Georg Brandl <georg@python.org>
parents:
61466
diff
changeset
|
737 |
|
12120
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
738 /* Functions for treating an mmap'ed file as a buffer */ |
|
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
739 |
|
42665
85c22b4d4455
Merged in py3k-buffer branch to main line. All objects now use the buffer protocol in PEP 3118.
Travis E. Oliphant <oliphant@enthought.com>
parents:
42560
diff
changeset
|
740 static int |
|
43777
0d462d789b18
Merging the py3k-pep3137 branch back into the py3k branch.
Guido van Rossum <guido@python.org>
parents:
43734
diff
changeset
|
741 mmap_buffer_getbuf(mmap_object *self, Py_buffer *view, int flags) |
|
36537
fdabdf148336
Trimmed trailing whitespace.
Tim Peters <tim.peters@gmail.com>
parents:
36536
diff
changeset
|
742 { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
743 CHECK_VALID(-1); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
744 if (PyBuffer_FillInfo(view, (PyObject*)self, self->data, self->size, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
745 (self->access == ACCESS_READ), flags) < 0) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
746 return -1; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
747 self->exports++; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
748 return 0; |
|
12120
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
749 } |
|
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
750 |
|
42665
85c22b4d4455
Merged in py3k-buffer branch to main line. All objects now use the buffer protocol in PEP 3118.
Travis E. Oliphant <oliphant@enthought.com>
parents:
42560
diff
changeset
|
751 static void |
|
43423
0476a2cc5658
Change PyBuffer to Py_buffer to be consistent with other non-object structures like Py_complex. Add some more functionality to the memoryview object.
Travis E. Oliphant <oliphant@enthought.com>
parents:
43384
diff
changeset
|
752 mmap_buffer_releasebuf(mmap_object *self, Py_buffer *view) |
|
12120
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
753 { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
754 self->exports--; |
|
12120
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
755 } |
|
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
756 |
|
36501
7fdc639bc5b4
Merge ssize_t branch.
Martin v. Löwis <martin@v.loewis.de>
parents:
36446
diff
changeset
|
757 static Py_ssize_t |
|
13441
5edee6878943
-- ANSI-fying, names
Fredrik Lundh <fredrik@pythonware.com>
parents:
13359
diff
changeset
|
758 mmap_length(mmap_object *self) |
|
12120
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
759 { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
760 CHECK_VALID(-1); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
761 return self->size; |
|
12120
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
762 } |
|
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
763 |
|
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
764 static PyObject * |
|
36501
7fdc639bc5b4
Merge ssize_t branch.
Martin v. Löwis <martin@v.loewis.de>
parents:
36446
diff
changeset
|
765 mmap_item(mmap_object *self, Py_ssize_t i) |
|
12120
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
766 { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
767 CHECK_VALID(NULL); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
768 if (i < 0 || (size_t)i >= self->size) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
769 PyErr_SetString(PyExc_IndexError, "mmap index out of range"); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
770 return NULL; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
771 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
772 return PyBytes_FromStringAndSize(self->data + i, 1); |
|
12120
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
773 } |
|
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
774 |
|
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
775 static PyObject * |
|
42954
27f0289b6835
Merge the trunk changes in. Breaks socket.ssl for now.
Thomas Wouters <thomas@python.org>
parents:
42665
diff
changeset
|
776 mmap_subscript(mmap_object *self, PyObject *item) |
|
27f0289b6835
Merge the trunk changes in. Breaks socket.ssl for now.
Thomas Wouters <thomas@python.org>
parents:
42665
diff
changeset
|
777 { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
778 CHECK_VALID(NULL); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
779 if (PyIndex_Check(item)) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
780 Py_ssize_t i = PyNumber_AsSsize_t(item, PyExc_IndexError); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
781 if (i == -1 && PyErr_Occurred()) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
782 return NULL; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
783 if (i < 0) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
784 i += self->size; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
785 if (i < 0 || (size_t)i >= self->size) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
786 PyErr_SetString(PyExc_IndexError, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
787 "mmap index out of range"); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
788 return NULL; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
789 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
790 return PyLong_FromLong(Py_CHARMASK(self->data[i])); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
791 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
792 else if (PySlice_Check(item)) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
793 Py_ssize_t start, stop, step, slicelen; |
|
42954
27f0289b6835
Merge the trunk changes in. Breaks socket.ssl for now.
Thomas Wouters <thomas@python.org>
parents:
42665
diff
changeset
|
794 |
|
66664
62b61abd02b8
Merge branches/pep-0384.
Martin v. Löwis <martin@v.loewis.de>
parents:
65931
diff
changeset
|
795 if (PySlice_GetIndicesEx(item, self->size, |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
796 &start, &stop, &step, &slicelen) < 0) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
797 return NULL; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
798 } |
|
43777
0d462d789b18
Merging the py3k-pep3137 branch back into the py3k branch.
Guido van Rossum <guido@python.org>
parents:
43734
diff
changeset
|
799 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
800 if (slicelen <= 0) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
801 return PyBytes_FromStringAndSize("", 0); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
802 else if (step == 1) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
803 return PyBytes_FromStringAndSize(self->data + start, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
804 slicelen); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
805 else { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
806 char *result_buf = (char *)PyMem_Malloc(slicelen); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
807 Py_ssize_t cur, i; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
808 PyObject *result; |
|
42954
27f0289b6835
Merge the trunk changes in. Breaks socket.ssl for now.
Thomas Wouters <thomas@python.org>
parents:
42665
diff
changeset
|
809 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
810 if (result_buf == NULL) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
811 return PyErr_NoMemory(); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
812 for (cur = start, i = 0; i < slicelen; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
813 cur += step, i++) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
814 result_buf[i] = self->data[cur]; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
815 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
816 result = PyBytes_FromStringAndSize(result_buf, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
817 slicelen); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
818 PyMem_Free(result_buf); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
819 return result; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
820 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
821 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
822 else { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
823 PyErr_SetString(PyExc_TypeError, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
824 "mmap indices must be integers"); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
825 return NULL; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
826 } |
|
42954
27f0289b6835
Merge the trunk changes in. Breaks socket.ssl for now.
Thomas Wouters <thomas@python.org>
parents:
42665
diff
changeset
|
827 } |
|
27f0289b6835
Merge the trunk changes in. Breaks socket.ssl for now.
Thomas Wouters <thomas@python.org>
parents:
42665
diff
changeset
|
828 |
|
27f0289b6835
Merge the trunk changes in. Breaks socket.ssl for now.
Thomas Wouters <thomas@python.org>
parents:
42665
diff
changeset
|
829 static PyObject * |
|
13441
5edee6878943
-- ANSI-fying, names
Fredrik Lundh <fredrik@pythonware.com>
parents:
13359
diff
changeset
|
830 mmap_concat(mmap_object *self, PyObject *bb) |
|
12120
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
831 { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
832 CHECK_VALID(NULL); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
833 PyErr_SetString(PyExc_SystemError, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
834 "mmaps don't support concatenation"); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
835 return NULL; |
|
12120
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
836 } |
|
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
837 |
|
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
838 static PyObject * |
|
36501
7fdc639bc5b4
Merge ssize_t branch.
Martin v. Löwis <martin@v.loewis.de>
parents:
36446
diff
changeset
|
839 mmap_repeat(mmap_object *self, Py_ssize_t n) |
|
12120
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
840 { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
841 CHECK_VALID(NULL); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
842 PyErr_SetString(PyExc_SystemError, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
843 "mmaps don't support repeat operation"); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
844 return NULL; |
|
12120
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
845 } |
|
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
846 |
|
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
847 static int |
|
36501
7fdc639bc5b4
Merge ssize_t branch.
Martin v. Löwis <martin@v.loewis.de>
parents:
36446
diff
changeset
|
848 mmap_ass_item(mmap_object *self, Py_ssize_t i, PyObject *v) |
|
12120
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
849 { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
850 const char *buf; |
|
36537
fdabdf148336
Trimmed trailing whitespace.
Tim Peters <tim.peters@gmail.com>
parents:
36536
diff
changeset
|
851 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
852 CHECK_VALID(-1); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
853 if (i < 0 || (size_t)i >= self->size) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
854 PyErr_SetString(PyExc_IndexError, "mmap index out of range"); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
855 return -1; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
856 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
857 if (v == NULL) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
858 PyErr_SetString(PyExc_TypeError, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
859 "mmap object doesn't support item deletion"); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
860 return -1; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
861 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
862 if (! (PyBytes_Check(v) && PyBytes_Size(v)==1) ) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
863 PyErr_SetString(PyExc_IndexError, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
864 "mmap assignment must be length-1 bytes()"); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
865 return -1; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
866 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
867 if (!is_writable(self)) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
868 return -1; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
869 buf = PyBytes_AsString(v); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
870 self->data[i] = buf[0]; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
871 return 0; |
|
12120
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
872 } |
|
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
873 |
|
42954
27f0289b6835
Merge the trunk changes in. Breaks socket.ssl for now.
Thomas Wouters <thomas@python.org>
parents:
42665
diff
changeset
|
874 static int |
|
27f0289b6835
Merge the trunk changes in. Breaks socket.ssl for now.
Thomas Wouters <thomas@python.org>
parents:
42665
diff
changeset
|
875 mmap_ass_subscript(mmap_object *self, PyObject *item, PyObject *value) |
|
27f0289b6835
Merge the trunk changes in. Breaks socket.ssl for now.
Thomas Wouters <thomas@python.org>
parents:
42665
diff
changeset
|
876 { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
877 CHECK_VALID(-1); |
|
42954
27f0289b6835
Merge the trunk changes in. Breaks socket.ssl for now.
Thomas Wouters <thomas@python.org>
parents:
42665
diff
changeset
|
878 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
879 if (!is_writable(self)) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
880 return -1; |
|
43777
0d462d789b18
Merging the py3k-pep3137 branch back into the py3k branch.
Guido van Rossum <guido@python.org>
parents:
43734
diff
changeset
|
881 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
882 if (PyIndex_Check(item)) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
883 Py_ssize_t i = PyNumber_AsSsize_t(item, PyExc_IndexError); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
884 Py_ssize_t v; |
|
42954
27f0289b6835
Merge the trunk changes in. Breaks socket.ssl for now.
Thomas Wouters <thomas@python.org>
parents:
42665
diff
changeset
|
885 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
886 if (i == -1 && PyErr_Occurred()) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
887 return -1; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
888 if (i < 0) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
889 i += self->size; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
890 if (i < 0 || (size_t)i >= self->size) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
891 PyErr_SetString(PyExc_IndexError, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
892 "mmap index out of range"); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
893 return -1; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
894 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
895 if (value == NULL) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
896 PyErr_SetString(PyExc_TypeError, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
897 "mmap doesn't support item deletion"); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
898 return -1; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
899 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
900 if (!PyIndex_Check(value)) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
901 PyErr_SetString(PyExc_TypeError, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
902 "mmap item value must be an int"); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
903 return -1; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
904 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
905 v = PyNumber_AsSsize_t(value, PyExc_TypeError); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
906 if (v == -1 && PyErr_Occurred()) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
907 return -1; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
908 if (v < 0 || v > 255) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
909 PyErr_SetString(PyExc_ValueError, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
910 "mmap item value must be " |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
911 "in range(0, 256)"); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
912 return -1; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
913 } |
|
64047
79d572ea17df
Merged revisions 84076 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
63425
diff
changeset
|
914 self->data[i] = (char) v; |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
915 return 0; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
916 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
917 else if (PySlice_Check(item)) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
918 Py_ssize_t start, stop, step, slicelen; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
919 Py_buffer vbuf; |
|
43777
0d462d789b18
Merging the py3k-pep3137 branch back into the py3k branch.
Guido van Rossum <guido@python.org>
parents:
43734
diff
changeset
|
920 |
|
66664
62b61abd02b8
Merge branches/pep-0384.
Martin v. Löwis <martin@v.loewis.de>
parents:
65931
diff
changeset
|
921 if (PySlice_GetIndicesEx(item, |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
922 self->size, &start, &stop, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
923 &step, &slicelen) < 0) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
924 return -1; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
925 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
926 if (value == NULL) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
927 PyErr_SetString(PyExc_TypeError, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
928 "mmap object doesn't support slice deletion"); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
929 return -1; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
930 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
931 if (PyObject_GetBuffer(value, &vbuf, PyBUF_SIMPLE) < 0) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
932 return -1; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
933 if (vbuf.len != slicelen) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
934 PyErr_SetString(PyExc_IndexError, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
935 "mmap slice assignment is wrong size"); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
936 PyBuffer_Release(&vbuf); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
937 return -1; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
938 } |
|
42954
27f0289b6835
Merge the trunk changes in. Breaks socket.ssl for now.
Thomas Wouters <thomas@python.org>
parents:
42665
diff
changeset
|
939 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
940 if (slicelen == 0) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
941 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
942 else if (step == 1) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
943 memcpy(self->data + start, vbuf.buf, slicelen); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
944 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
945 else { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
946 Py_ssize_t cur, i; |
|
43777
0d462d789b18
Merging the py3k-pep3137 branch back into the py3k branch.
Guido van Rossum <guido@python.org>
parents:
43734
diff
changeset
|
947 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
948 for (cur = start, i = 0; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
949 i < slicelen; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
950 cur += step, i++) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
951 { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
952 self->data[cur] = ((char *)vbuf.buf)[i]; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
953 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
954 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
955 PyBuffer_Release(&vbuf); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
956 return 0; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
957 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
958 else { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
959 PyErr_SetString(PyExc_TypeError, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
960 "mmap indices must be integer"); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
961 return -1; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
962 } |
|
42954
27f0289b6835
Merge the trunk changes in. Breaks socket.ssl for now.
Thomas Wouters <thomas@python.org>
parents:
42665
diff
changeset
|
963 } |
|
27f0289b6835
Merge the trunk changes in. Breaks socket.ssl for now.
Thomas Wouters <thomas@python.org>
parents:
42665
diff
changeset
|
964 |
|
12120
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
965 static PySequenceMethods mmap_as_sequence = { |
| 75457 | 966 (lenfunc)mmap_length, /*sq_length*/ |
| 967 (binaryfunc)mmap_concat, /*sq_concat*/ | |
| 968 (ssizeargfunc)mmap_repeat, /*sq_repeat*/ | |
| 969 (ssizeargfunc)mmap_item, /*sq_item*/ | |
| 970 0, /*sq_slice*/ | |
| 971 (ssizeobjargproc)mmap_ass_item, /*sq_ass_item*/ | |
| 972 0, /*sq_ass_slice*/ | |
|
12120
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
973 }; |
|
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
974 |
|
42954
27f0289b6835
Merge the trunk changes in. Breaks socket.ssl for now.
Thomas Wouters <thomas@python.org>
parents:
42665
diff
changeset
|
975 static PyMappingMethods mmap_as_mapping = { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
976 (lenfunc)mmap_length, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
977 (binaryfunc)mmap_subscript, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
978 (objobjargproc)mmap_ass_subscript, |
|
42954
27f0289b6835
Merge the trunk changes in. Breaks socket.ssl for now.
Thomas Wouters <thomas@python.org>
parents:
42665
diff
changeset
|
979 }; |
|
27f0289b6835
Merge the trunk changes in. Breaks socket.ssl for now.
Thomas Wouters <thomas@python.org>
parents:
42665
diff
changeset
|
980 |
|
12120
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
981 static PyBufferProcs mmap_as_buffer = { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
982 (getbufferproc)mmap_buffer_getbuf, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
983 (releasebufferproc)mmap_buffer_releasebuf, |
|
12120
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
984 }; |
|
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
985 |
|
44859
feba5d5cac22
Merged revisions 60151-60159,60161-60168,60170,60172-60173,60175 via svnmerge from
Georg Brandl <georg@python.org>
parents:
44834
diff
changeset
|
986 static PyObject * |
|
feba5d5cac22
Merged revisions 60151-60159,60161-60168,60170,60172-60173,60175 via svnmerge from
Georg Brandl <georg@python.org>
parents:
44834
diff
changeset
|
987 new_mmap_object(PyTypeObject *type, PyObject *args, PyObject *kwdict); |
|
feba5d5cac22
Merged revisions 60151-60159,60161-60168,60170,60172-60173,60175 via svnmerge from
Georg Brandl <georg@python.org>
parents:
44834
diff
changeset
|
988 |
|
44834
ed33da2e74e7
Merged revisions 60143-60149 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44782
diff
changeset
|
989 PyDoc_STRVAR(mmap_doc, |
|
ed33da2e74e7
Merged revisions 60143-60149 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44782
diff
changeset
|
990 "Windows: mmap(fileno, length[, tagname[, access[, offset]]])\n\ |
|
ed33da2e74e7
Merged revisions 60143-60149 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44782
diff
changeset
|
991 \n\ |
|
ed33da2e74e7
Merged revisions 60143-60149 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44782
diff
changeset
|
992 Maps length bytes from the file specified by the file handle fileno,\n\ |
|
ed33da2e74e7
Merged revisions 60143-60149 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44782
diff
changeset
|
993 and returns a mmap object. If length is larger than the current size\n\ |
|
ed33da2e74e7
Merged revisions 60143-60149 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44782
diff
changeset
|
994 of the file, the file is extended to contain length bytes. If length\n\ |
|
ed33da2e74e7
Merged revisions 60143-60149 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44782
diff
changeset
|
995 is 0, the maximum length of the map is the current size of the file,\n\ |
|
ed33da2e74e7
Merged revisions 60143-60149 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44782
diff
changeset
|
996 except that if the file is empty Windows raises an exception (you cannot\n\ |
|
ed33da2e74e7
Merged revisions 60143-60149 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44782
diff
changeset
|
997 create an empty mapping on Windows).\n\ |
|
ed33da2e74e7
Merged revisions 60143-60149 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44782
diff
changeset
|
998 \n\ |
|
ed33da2e74e7
Merged revisions 60143-60149 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44782
diff
changeset
|
999 Unix: mmap(fileno, length[, flags[, prot[, access[, offset]]]])\n\ |
|
ed33da2e74e7
Merged revisions 60143-60149 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44782
diff
changeset
|
1000 \n\ |
|
ed33da2e74e7
Merged revisions 60143-60149 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44782
diff
changeset
|
1001 Maps length bytes from the file specified by the file descriptor fileno,\n\ |
|
ed33da2e74e7
Merged revisions 60143-60149 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44782
diff
changeset
|
1002 and returns a mmap object. If length is 0, the maximum length of the map\n\ |
|
ed33da2e74e7
Merged revisions 60143-60149 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44782
diff
changeset
|
1003 will be the current size of the file when mmap is called.\n\ |
|
ed33da2e74e7
Merged revisions 60143-60149 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44782
diff
changeset
|
1004 flags specifies the nature of the mapping. MAP_PRIVATE creates a\n\ |
|
ed33da2e74e7
Merged revisions 60143-60149 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44782
diff
changeset
|
1005 private copy-on-write mapping, so changes to the contents of the mmap\n\ |
|
48771
ea3d13cd7c1e
Merged revisions 65780,65782,65785,65809,65812,65834,65846,65859,65861 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
48683
diff
changeset
|
1006 object will be private to this process, and MAP_SHARED creates a mapping\n\ |
|
44834
ed33da2e74e7
Merged revisions 60143-60149 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44782
diff
changeset
|
1007 that's shared with all other processes mapping the same areas of the file.\n\ |
|
ed33da2e74e7
Merged revisions 60143-60149 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44782
diff
changeset
|
1008 The default value is MAP_SHARED.\n\ |
|
ed33da2e74e7
Merged revisions 60143-60149 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44782
diff
changeset
|
1009 \n\ |
|
ed33da2e74e7
Merged revisions 60143-60149 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44782
diff
changeset
|
1010 To map anonymous memory, pass -1 as the fileno (both versions)."); |
|
ed33da2e74e7
Merged revisions 60143-60149 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44782
diff
changeset
|
1011 |
|
ed33da2e74e7
Merged revisions 60143-60149 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44782
diff
changeset
|
1012 |
|
12120
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
1013 static PyTypeObject mmap_object_type = { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1014 PyVarObject_HEAD_INIT(NULL, 0) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1015 "mmap.mmap", /* tp_name */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1016 sizeof(mmap_object), /* tp_size */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1017 0, /* tp_itemsize */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1018 /* methods */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1019 (destructor) mmap_object_dealloc, /* tp_dealloc */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1020 0, /* tp_print */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1021 0, /* tp_getattr */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1022 0, /* tp_setattr */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1023 0, /* tp_reserved */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1024 0, /* tp_repr */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1025 0, /* tp_as_number */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1026 &mmap_as_sequence, /*tp_as_sequence*/ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1027 &mmap_as_mapping, /*tp_as_mapping*/ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1028 0, /*tp_hash*/ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1029 0, /*tp_call*/ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1030 0, /*tp_str*/ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1031 PyObject_GenericGetAttr, /*tp_getattro*/ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1032 0, /*tp_setattro*/ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1033 &mmap_as_buffer, /*tp_as_buffer*/ |
| 75457 | 1034 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /*tp_flags*/ |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1035 mmap_doc, /*tp_doc*/ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1036 0, /* tp_traverse */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1037 0, /* tp_clear */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1038 0, /* tp_richcompare */ |
|
85045
1754b7900da1
Issue #4885: Add weakref support to mmap objects. Patch by Valerie Lambert.
Antoine Pitrou <solipsis@pitrou.net>
parents:
82200
diff
changeset
|
1039 offsetof(mmap_object, weakreflist), /* tp_weaklistoffset */ |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1040 0, /* tp_iter */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1041 0, /* tp_iternext */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1042 mmap_object_methods, /* tp_methods */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1043 0, /* tp_members */ |
|
63422
cf989a34c77e
#8046: add context manager protocol support to mmap objects. Also add closed property.
Georg Brandl <georg@python.org>
parents:
61466
diff
changeset
|
1044 mmap_object_getset, /* tp_getset */ |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1045 0, /* tp_base */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1046 0, /* tp_dict */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1047 0, /* tp_descr_get */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1048 0, /* tp_descr_set */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1049 0, /* tp_dictoffset */ |
| 75457 | 1050 0, /* tp_init */ |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1051 PyType_GenericAlloc, /* tp_alloc */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1052 new_mmap_object, /* tp_new */ |
| 75457 | 1053 PyObject_Del, /* tp_free */ |
|
12120
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
1054 }; |
|
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
1055 |
| 12945 | 1056 |
| 1057 /* extract the map size from the given PyObject | |
| 1058 | |
|
13620
5b727ab37092
Spelling fixes supplied by Rob W. W. Hooft. All these are fixes in either
Thomas Wouters <thomas@python.org>
parents:
13463
diff
changeset
|
1059 Returns -1 on error, with an appropriate Python exception raised. On |
| 12945 | 1060 success, the map size is returned. */ |
|
36541
f7f0d2a5b20b
Remove size restrictions.
Martin v. Löwis <martin@v.loewis.de>
parents:
36540
diff
changeset
|
1061 static Py_ssize_t |
|
43734
3e5edf19d5f0
Merged revisions 58221-58741 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
43423
diff
changeset
|
1062 _GetMapSize(PyObject *o, const char* param) |
| 12945 | 1063 { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1064 if (o == NULL) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1065 return 0; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1066 if (PyIndex_Check(o)) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1067 Py_ssize_t i = PyNumber_AsSsize_t(o, PyExc_OverflowError); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1068 if (i==-1 && PyErr_Occurred()) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1069 return -1; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1070 if (i < 0) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1071 PyErr_Format(PyExc_OverflowError, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1072 "memory mapped %s must be positive", |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1073 param); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1074 return -1; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1075 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1076 return i; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1077 } |
| 12945 | 1078 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1079 PyErr_SetString(PyExc_TypeError, "map size must be an integral value"); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1080 return -1; |
| 12945 | 1081 } |
| 1082 | |
|
36537
fdabdf148336
Trimmed trailing whitespace.
Tim Peters <tim.peters@gmail.com>
parents:
36536
diff
changeset
|
1083 #ifdef UNIX |
|
68054
f8a77fd675f5
Merged revisions 88460,88464,88466,88486,88511,88652 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67707
diff
changeset
|
1084 #ifdef HAVE_LARGEFILE_SUPPORT |
|
f8a77fd675f5
Merged revisions 88460,88464,88466,88486,88511,88652 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67707
diff
changeset
|
1085 #define _Py_PARSE_OFF_T "L" |
|
f8a77fd675f5
Merged revisions 88460,88464,88466,88486,88511,88652 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67707
diff
changeset
|
1086 #else |
|
f8a77fd675f5
Merged revisions 88460,88464,88466,88486,88511,88652 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67707
diff
changeset
|
1087 #define _Py_PARSE_OFF_T "l" |
|
f8a77fd675f5
Merged revisions 88460,88464,88466,88486,88511,88652 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67707
diff
changeset
|
1088 #endif |
|
f8a77fd675f5
Merged revisions 88460,88464,88466,88486,88511,88652 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67707
diff
changeset
|
1089 |
|
12120
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
1090 static PyObject * |
|
44859
feba5d5cac22
Merged revisions 60151-60159,60161-60168,60170,60172-60173,60175 via svnmerge from
Georg Brandl <georg@python.org>
parents:
44834
diff
changeset
|
1091 new_mmap_object(PyTypeObject *type, PyObject *args, PyObject *kwdict) |
|
12120
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
1092 { |
|
25130
368bc3a4919e
SF bug # 585792, Invalid mmap crashes Python interpreter
Neal Norwitz <nnorwitz@gmail.com>
parents:
24363
diff
changeset
|
1093 #ifdef HAVE_FSTAT |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1094 struct stat st; |
|
25130
368bc3a4919e
SF bug # 585792, Invalid mmap crashes Python interpreter
Neal Norwitz <nnorwitz@gmail.com>
parents:
24363
diff
changeset
|
1095 #endif |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1096 mmap_object *m_obj; |
|
68054
f8a77fd675f5
Merged revisions 88460,88464,88466,88486,88511,88652 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67707
diff
changeset
|
1097 PyObject *map_size_obj = NULL; |
|
f8a77fd675f5
Merged revisions 88460,88464,88466,88486,88511,88652 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67707
diff
changeset
|
1098 Py_ssize_t map_size; |
|
f8a77fd675f5
Merged revisions 88460,88464,88466,88486,88511,88652 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67707
diff
changeset
|
1099 off_t offset = 0; |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1100 int fd, flags = MAP_SHARED, prot = PROT_WRITE | PROT_READ; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1101 int devzero = -1; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1102 int access = (int)ACCESS_DEFAULT; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1103 static char *keywords[] = {"fileno", "length", |
| 75457 | 1104 "flags", "prot", |
| 1105 "access", "offset", NULL}; | |
|
12120
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
1106 |
|
68054
f8a77fd675f5
Merged revisions 88460,88464,88466,88486,88511,88652 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67707
diff
changeset
|
1107 if (!PyArg_ParseTupleAndKeywords(args, kwdict, "iO|iii" _Py_PARSE_OFF_T, keywords, |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1108 &fd, &map_size_obj, &flags, &prot, |
|
68054
f8a77fd675f5
Merged revisions 88460,88464,88466,88486,88511,88652 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67707
diff
changeset
|
1109 &access, &offset)) |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1110 return NULL; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1111 map_size = _GetMapSize(map_size_obj, "size"); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1112 if (map_size < 0) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1113 return NULL; |
|
68054
f8a77fd675f5
Merged revisions 88460,88464,88466,88486,88511,88652 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67707
diff
changeset
|
1114 if (offset < 0) { |
|
f8a77fd675f5
Merged revisions 88460,88464,88466,88486,88511,88652 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67707
diff
changeset
|
1115 PyErr_SetString(PyExc_OverflowError, |
|
f8a77fd675f5
Merged revisions 88460,88464,88466,88486,88511,88652 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67707
diff
changeset
|
1116 "memory mapped offset must be positive"); |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1117 return NULL; |
|
68054
f8a77fd675f5
Merged revisions 88460,88464,88466,88486,88511,88652 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67707
diff
changeset
|
1118 } |
|
20970
e167b82c6444
CVS patch #477161: New "access" keyword for mmap, from Jay T Miller.
Tim Peters <tim.peters@gmail.com>
parents:
20888
diff
changeset
|
1119 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1120 if ((access != (int)ACCESS_DEFAULT) && |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1121 ((flags != MAP_SHARED) || (prot != (PROT_WRITE | PROT_READ)))) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1122 return PyErr_Format(PyExc_ValueError, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1123 "mmap can't specify both access and flags, prot."); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1124 switch ((access_mode)access) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1125 case ACCESS_READ: |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1126 flags = MAP_SHARED; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1127 prot = PROT_READ; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1128 break; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1129 case ACCESS_WRITE: |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1130 flags = MAP_SHARED; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1131 prot = PROT_READ | PROT_WRITE; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1132 break; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1133 case ACCESS_COPY: |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1134 flags = MAP_PRIVATE; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1135 prot = PROT_READ | PROT_WRITE; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1136 break; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1137 case ACCESS_DEFAULT: |
|
68268
97a5590b9291
Issue #11391: Writing to a mmap object created with
Antoine Pitrou <solipsis@pitrou.net>
parents:
68054
diff
changeset
|
1138 /* map prot to access type */ |
|
97a5590b9291
Issue #11391: Writing to a mmap object created with
Antoine Pitrou <solipsis@pitrou.net>
parents:
68054
diff
changeset
|
1139 if ((prot & PROT_READ) && (prot & PROT_WRITE)) { |
|
97a5590b9291
Issue #11391: Writing to a mmap object created with
Antoine Pitrou <solipsis@pitrou.net>
parents:
68054
diff
changeset
|
1140 /* ACCESS_DEFAULT */ |
|
97a5590b9291
Issue #11391: Writing to a mmap object created with
Antoine Pitrou <solipsis@pitrou.net>
parents:
68054
diff
changeset
|
1141 } |
|
97a5590b9291
Issue #11391: Writing to a mmap object created with
Antoine Pitrou <solipsis@pitrou.net>
parents:
68054
diff
changeset
|
1142 else if (prot & PROT_WRITE) { |
|
97a5590b9291
Issue #11391: Writing to a mmap object created with
Antoine Pitrou <solipsis@pitrou.net>
parents:
68054
diff
changeset
|
1143 access = ACCESS_WRITE; |
|
97a5590b9291
Issue #11391: Writing to a mmap object created with
Antoine Pitrou <solipsis@pitrou.net>
parents:
68054
diff
changeset
|
1144 } |
|
97a5590b9291
Issue #11391: Writing to a mmap object created with
Antoine Pitrou <solipsis@pitrou.net>
parents:
68054
diff
changeset
|
1145 else { |
|
97a5590b9291
Issue #11391: Writing to a mmap object created with
Antoine Pitrou <solipsis@pitrou.net>
parents:
68054
diff
changeset
|
1146 access = ACCESS_READ; |
|
97a5590b9291
Issue #11391: Writing to a mmap object created with
Antoine Pitrou <solipsis@pitrou.net>
parents:
68054
diff
changeset
|
1147 } |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1148 break; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1149 default: |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1150 return PyErr_Format(PyExc_ValueError, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1151 "mmap invalid access parameter."); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1152 } |
|
25130
368bc3a4919e
SF bug # 585792, Invalid mmap crashes Python interpreter
Neal Norwitz <nnorwitz@gmail.com>
parents:
24363
diff
changeset
|
1153 |
|
69753
cb464f8fb3a1
Issue #11277: mmap calls fcntl(fd, F_FULLFSYNC) on Mac OS X to get around a
Victor Stinner <victor.stinner@haypocalc.com>
parents:
68268
diff
changeset
|
1154 #ifdef __APPLE__ |
|
cb464f8fb3a1
Issue #11277: mmap calls fcntl(fd, F_FULLFSYNC) on Mac OS X to get around a
Victor Stinner <victor.stinner@haypocalc.com>
parents:
68268
diff
changeset
|
1155 /* Issue #11277: fsync(2) is not enough on OS X - a special, OS X specific |
|
cb464f8fb3a1
Issue #11277: mmap calls fcntl(fd, F_FULLFSYNC) on Mac OS X to get around a
Victor Stinner <victor.stinner@haypocalc.com>
parents:
68268
diff
changeset
|
1156 fcntl(2) is necessary to force DISKSYNC and get around mmap(2) bug */ |
|
cb464f8fb3a1
Issue #11277: mmap calls fcntl(fd, F_FULLFSYNC) on Mac OS X to get around a
Victor Stinner <victor.stinner@haypocalc.com>
parents:
68268
diff
changeset
|
1157 if (fd != -1) |
|
cb464f8fb3a1
Issue #11277: mmap calls fcntl(fd, F_FULLFSYNC) on Mac OS X to get around a
Victor Stinner <victor.stinner@haypocalc.com>
parents:
68268
diff
changeset
|
1158 (void)fcntl(fd, F_FULLFSYNC); |
|
cb464f8fb3a1
Issue #11277: mmap calls fcntl(fd, F_FULLFSYNC) on Mac OS X to get around a
Victor Stinner <victor.stinner@haypocalc.com>
parents:
68268
diff
changeset
|
1159 #endif |
|
25130
368bc3a4919e
SF bug # 585792, Invalid mmap crashes Python interpreter
Neal Norwitz <nnorwitz@gmail.com>
parents:
24363
diff
changeset
|
1160 #ifdef HAVE_FSTAT |
|
28949
ac487a7f7f2c
Patch #708495: Port more stuff to OpenVMS.
Martin v. Löwis <martin@v.loewis.de>
parents:
28558
diff
changeset
|
1161 # ifdef __VMS |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1162 /* on OpenVMS we must ensure that all bytes are written to the file */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1163 if (fd != -1) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1164 fsync(fd); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1165 } |
|
28949
ac487a7f7f2c
Patch #708495: Port more stuff to OpenVMS.
Martin v. Löwis <martin@v.loewis.de>
parents:
28558
diff
changeset
|
1166 # endif |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1167 if (fd != -1 && fstat(fd, &st) == 0 && S_ISREG(st.st_mode)) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1168 if (map_size == 0) { |
|
78929
d85f80b31b54
Closes #15676: mmap: add empty file check prior to offset check
Jesus Cea <jcea@jcea.es>
parents:
70945
diff
changeset
|
1169 if (st.st_size == 0) { |
|
d85f80b31b54
Closes #15676: mmap: add empty file check prior to offset check
Jesus Cea <jcea@jcea.es>
parents:
70945
diff
changeset
|
1170 PyErr_SetString(PyExc_ValueError, |
|
d85f80b31b54
Closes #15676: mmap: add empty file check prior to offset check
Jesus Cea <jcea@jcea.es>
parents:
70945
diff
changeset
|
1171 "cannot mmap an empty file"); |
|
d85f80b31b54
Closes #15676: mmap: add empty file check prior to offset check
Jesus Cea <jcea@jcea.es>
parents:
70945
diff
changeset
|
1172 return NULL; |
|
d85f80b31b54
Closes #15676: mmap: add empty file check prior to offset check
Jesus Cea <jcea@jcea.es>
parents:
70945
diff
changeset
|
1173 } |
|
67707
f36538ba90a8
Merged revisions 88131 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67623
diff
changeset
|
1174 if (offset >= st.st_size) { |
|
f36538ba90a8
Merged revisions 88131 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67623
diff
changeset
|
1175 PyErr_SetString(PyExc_ValueError, |
|
f36538ba90a8
Merged revisions 88131 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67623
diff
changeset
|
1176 "mmap offset is greater than file size"); |
|
f36538ba90a8
Merged revisions 88131 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67623
diff
changeset
|
1177 return NULL; |
|
f36538ba90a8
Merged revisions 88131 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67623
diff
changeset
|
1178 } |
|
82199
c2c84d3ab393
Issue #16743: Fix mmap overflow check on 32 bit Windows
Richard Oudkerk <shibturn@gmail.com>
parents:
78980
diff
changeset
|
1179 if (st.st_size - offset > PY_SSIZE_T_MAX) { |
|
68054
f8a77fd675f5
Merged revisions 88460,88464,88466,88486,88511,88652 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67707
diff
changeset
|
1180 PyErr_SetString(PyExc_ValueError, |
|
f8a77fd675f5
Merged revisions 88460,88464,88466,88486,88511,88652 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67707
diff
changeset
|
1181 "mmap length is too large"); |
|
82199
c2c84d3ab393
Issue #16743: Fix mmap overflow check on 32 bit Windows
Richard Oudkerk <shibturn@gmail.com>
parents:
78980
diff
changeset
|
1182 return NULL; |
|
c2c84d3ab393
Issue #16743: Fix mmap overflow check on 32 bit Windows
Richard Oudkerk <shibturn@gmail.com>
parents:
78980
diff
changeset
|
1183 } |
|
c2c84d3ab393
Issue #16743: Fix mmap overflow check on 32 bit Windows
Richard Oudkerk <shibturn@gmail.com>
parents:
78980
diff
changeset
|
1184 map_size = (Py_ssize_t) (st.st_size - offset); |
|
68054
f8a77fd675f5
Merged revisions 88460,88464,88466,88486,88511,88652 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67707
diff
changeset
|
1185 } else if (offset + (size_t)map_size > st.st_size) { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1186 PyErr_SetString(PyExc_ValueError, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1187 "mmap length is greater than file size"); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1188 return NULL; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1189 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1190 } |
|
25130
368bc3a4919e
SF bug # 585792, Invalid mmap crashes Python interpreter
Neal Norwitz <nnorwitz@gmail.com>
parents:
24363
diff
changeset
|
1191 #endif |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1192 m_obj = (mmap_object *)type->tp_alloc(type, 0); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1193 if (m_obj == NULL) {return NULL;} |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1194 m_obj->data = NULL; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1195 m_obj->size = (size_t) map_size; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1196 m_obj->pos = (size_t) 0; |
|
85045
1754b7900da1
Issue #4885: Add weakref support to mmap objects. Patch by Valerie Lambert.
Antoine Pitrou <solipsis@pitrou.net>
parents:
82200
diff
changeset
|
1197 m_obj->weakreflist = NULL; |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1198 m_obj->exports = 0; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1199 m_obj->offset = offset; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1200 if (fd == -1) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1201 m_obj->fd = -1; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1202 /* Assume the caller wants to map anonymous memory. |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1203 This is the same behaviour as Windows. mmap.mmap(-1, size) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1204 on both Windows and Unix map anonymous memory. |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1205 */ |
|
36446
02f0744a9cd0
Patch #1407135, bug #1424041, make mmap.mmap(-1, length) work the same
Neal Norwitz <nnorwitz@gmail.com>
parents:
36445
diff
changeset
|
1206 #ifdef MAP_ANONYMOUS |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1207 /* BSD way to map anonymous memory */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1208 flags |= MAP_ANONYMOUS; |
|
36446
02f0744a9cd0
Patch #1407135, bug #1424041, make mmap.mmap(-1, length) work the same
Neal Norwitz <nnorwitz@gmail.com>
parents:
36445
diff
changeset
|
1209 #else |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1210 /* SVR4 method to map anonymous memory is to open /dev/zero */ |
|
85420
ef889c3d5dc6
Issue #18571: Implementation of the PEP 446: file descriptors and file handles
Victor Stinner <victor.stinner@gmail.com>
parents:
85045
diff
changeset
|
1211 fd = devzero = _Py_open("/dev/zero", O_RDWR); |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1212 if (devzero == -1) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1213 Py_DECREF(m_obj); |
|
72879
41a1de81ef2b
PEP 3151 / issue #12555: reworking the OS and IO exception hierarchy.
Antoine Pitrou <solipsis@pitrou.net>
parents:
72835
diff
changeset
|
1214 PyErr_SetFromErrno(PyExc_OSError); |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1215 return NULL; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1216 } |
|
36446
02f0744a9cd0
Patch #1407135, bug #1424041, make mmap.mmap(-1, length) work the same
Neal Norwitz <nnorwitz@gmail.com>
parents:
36445
diff
changeset
|
1217 #endif |
|
85420
ef889c3d5dc6
Issue #18571: Implementation of the PEP 446: file descriptors and file handles
Victor Stinner <victor.stinner@gmail.com>
parents:
85045
diff
changeset
|
1218 } |
|
ef889c3d5dc6
Issue #18571: Implementation of the PEP 446: file descriptors and file handles
Victor Stinner <victor.stinner@gmail.com>
parents:
85045
diff
changeset
|
1219 else { |
|
ef889c3d5dc6
Issue #18571: Implementation of the PEP 446: file descriptors and file handles
Victor Stinner <victor.stinner@gmail.com>
parents:
85045
diff
changeset
|
1220 m_obj->fd = _Py_dup(fd); |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1221 if (m_obj->fd == -1) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1222 Py_DECREF(m_obj); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1223 return NULL; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1224 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1225 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1226 |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1227 m_obj->data = mmap(NULL, map_size, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1228 prot, flags, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1229 fd, offset); |
|
36446
02f0744a9cd0
Patch #1407135, bug #1424041, make mmap.mmap(-1, length) work the same
Neal Norwitz <nnorwitz@gmail.com>
parents:
36445
diff
changeset
|
1230 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1231 if (devzero != -1) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1232 close(devzero); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1233 } |
|
36446
02f0744a9cd0
Patch #1407135, bug #1424041, make mmap.mmap(-1, length) work the same
Neal Norwitz <nnorwitz@gmail.com>
parents:
36445
diff
changeset
|
1234 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1235 if (m_obj->data == (char *)-1) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1236 m_obj->data = NULL; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1237 Py_DECREF(m_obj); |
|
72879
41a1de81ef2b
PEP 3151 / issue #12555: reworking the OS and IO exception hierarchy.
Antoine Pitrou <solipsis@pitrou.net>
parents:
72835
diff
changeset
|
1238 PyErr_SetFromErrno(PyExc_OSError); |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1239 return NULL; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1240 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1241 m_obj->access = (access_mode)access; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1242 return (PyObject *)m_obj; |
|
12120
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
1243 } |
|
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
1244 #endif /* UNIX */ |
|
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
1245 |
|
24071
8142f8d668a0
Patch #569753: Remove support for WIN16.
Martin v. Löwis <martin@v.loewis.de>
parents:
22177
diff
changeset
|
1246 #ifdef MS_WINDOWS |
|
68054
f8a77fd675f5
Merged revisions 88460,88464,88466,88486,88511,88652 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67707
diff
changeset
|
1247 |
|
f8a77fd675f5
Merged revisions 88460,88464,88466,88486,88511,88652 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67707
diff
changeset
|
1248 /* A note on sizes and offsets: while the actual map size must hold in a |
|
f8a77fd675f5
Merged revisions 88460,88464,88466,88486,88511,88652 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67707
diff
changeset
|
1249 Py_ssize_t, both the total file size and the start offset can be longer |
|
f8a77fd675f5
Merged revisions 88460,88464,88466,88486,88511,88652 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67707
diff
changeset
|
1250 than a Py_ssize_t, so we use PY_LONG_LONG which is always 64-bit. |
|
f8a77fd675f5
Merged revisions 88460,88464,88466,88486,88511,88652 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67707
diff
changeset
|
1251 */ |
|
f8a77fd675f5
Merged revisions 88460,88464,88466,88486,88511,88652 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67707
diff
changeset
|
1252 |
|
12120
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
1253 static PyObject * |
|
44859
feba5d5cac22
Merged revisions 60151-60159,60161-60168,60170,60172-60173,60175 via svnmerge from
Georg Brandl <georg@python.org>
parents:
44834
diff
changeset
|
1254 new_mmap_object(PyTypeObject *type, PyObject *args, PyObject *kwdict) |
|
12120
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
1255 { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1256 mmap_object *m_obj; |
|
68054
f8a77fd675f5
Merged revisions 88460,88464,88466,88486,88511,88652 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67707
diff
changeset
|
1257 PyObject *map_size_obj = NULL; |
|
f8a77fd675f5
Merged revisions 88460,88464,88466,88486,88511,88652 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67707
diff
changeset
|
1258 Py_ssize_t map_size; |
|
f8a77fd675f5
Merged revisions 88460,88464,88466,88486,88511,88652 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67707
diff
changeset
|
1259 PY_LONG_LONG offset = 0, size; |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1260 DWORD off_hi; /* upper 32 bits of offset */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1261 DWORD off_lo; /* lower 32 bits of offset */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1262 DWORD size_hi; /* upper 32 bits of size */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1263 DWORD size_lo; /* lower 32 bits of size */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1264 char *tagname = ""; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1265 DWORD dwErr = 0; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1266 int fileno; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1267 HANDLE fh = 0; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1268 int access = (access_mode)ACCESS_DEFAULT; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1269 DWORD flProtect, dwDesiredAccess; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1270 static char *keywords[] = { "fileno", "length", |
| 75457 | 1271 "tagname", |
| 1272 "access", "offset", NULL }; | |
|
12146
e8c30e69666b
Hacked for Win32 by Mark Hammond.
Guido van Rossum <guido@python.org>
parents:
12120
diff
changeset
|
1273 |
|
68054
f8a77fd675f5
Merged revisions 88460,88464,88466,88486,88511,88652 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67707
diff
changeset
|
1274 if (!PyArg_ParseTupleAndKeywords(args, kwdict, "iO|ziL", keywords, |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1275 &fileno, &map_size_obj, |
|
68054
f8a77fd675f5
Merged revisions 88460,88464,88466,88486,88511,88652 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67707
diff
changeset
|
1276 &tagname, &access, &offset)) { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1277 return NULL; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1278 } |
|
20970
e167b82c6444
CVS patch #477161: New "access" keyword for mmap, from Jay T Miller.
Tim Peters <tim.peters@gmail.com>
parents:
20888
diff
changeset
|
1279 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1280 switch((access_mode)access) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1281 case ACCESS_READ: |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1282 flProtect = PAGE_READONLY; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1283 dwDesiredAccess = FILE_MAP_READ; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1284 break; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1285 case ACCESS_DEFAULT: case ACCESS_WRITE: |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1286 flProtect = PAGE_READWRITE; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1287 dwDesiredAccess = FILE_MAP_WRITE; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1288 break; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1289 case ACCESS_COPY: |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1290 flProtect = PAGE_WRITECOPY; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1291 dwDesiredAccess = FILE_MAP_COPY; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1292 break; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1293 default: |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1294 return PyErr_Format(PyExc_ValueError, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1295 "mmap invalid access parameter."); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1296 } |
|
20970
e167b82c6444
CVS patch #477161: New "access" keyword for mmap, from Jay T Miller.
Tim Peters <tim.peters@gmail.com>
parents:
20888
diff
changeset
|
1297 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1298 map_size = _GetMapSize(map_size_obj, "size"); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1299 if (map_size < 0) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1300 return NULL; |
|
68054
f8a77fd675f5
Merged revisions 88460,88464,88466,88486,88511,88652 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67707
diff
changeset
|
1301 if (offset < 0) { |
|
f8a77fd675f5
Merged revisions 88460,88464,88466,88486,88511,88652 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67707
diff
changeset
|
1302 PyErr_SetString(PyExc_OverflowError, |
|
f8a77fd675f5
Merged revisions 88460,88464,88466,88486,88511,88652 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67707
diff
changeset
|
1303 "memory mapped offset must be positive"); |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1304 return NULL; |
|
68054
f8a77fd675f5
Merged revisions 88460,88464,88466,88486,88511,88652 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67707
diff
changeset
|
1305 } |
|
36537
fdabdf148336
Trimmed trailing whitespace.
Tim Peters <tim.peters@gmail.com>
parents:
36536
diff
changeset
|
1306 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1307 /* assume -1 and 0 both mean invalid filedescriptor |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1308 to 'anonymously' map memory. |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1309 XXX: fileno == 0 is a valid fd, but was accepted prior to 2.5. |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1310 XXX: Should this code be added? |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1311 if (fileno == 0) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1312 PyErr_WarnEx(PyExc_DeprecationWarning, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1313 "don't use 0 for anonymous memory", |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1314 1); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1315 */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1316 if (fileno != -1 && fileno != 0) { |
|
63425
0be5504213d3
Merged revisions 83407 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents:
61466
diff
changeset
|
1317 /* Ensure that fileno is within the CRT's valid range */ |
|
0be5504213d3
Merged revisions 83407 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents:
61466
diff
changeset
|
1318 if (_PyVerify_fd(fileno) == 0) { |
|
72879
41a1de81ef2b
PEP 3151 / issue #12555: reworking the OS and IO exception hierarchy.
Antoine Pitrou <solipsis@pitrou.net>
parents:
72835
diff
changeset
|
1319 PyErr_SetFromErrno(PyExc_OSError); |
|
63425
0be5504213d3
Merged revisions 83407 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents:
61466
diff
changeset
|
1320 return NULL; |
|
0be5504213d3
Merged revisions 83407 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents:
61466
diff
changeset
|
1321 } |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1322 fh = (HANDLE)_get_osfhandle(fileno); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1323 if (fh==(HANDLE)-1) { |
|
72879
41a1de81ef2b
PEP 3151 / issue #12555: reworking the OS and IO exception hierarchy.
Antoine Pitrou <solipsis@pitrou.net>
parents:
72835
diff
changeset
|
1324 PyErr_SetFromErrno(PyExc_OSError); |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1325 return NULL; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1326 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1327 /* Win9x appears to need us seeked to zero */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1328 lseek(fileno, 0, SEEK_SET); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1329 } |
|
12120
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
1330 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1331 m_obj = (mmap_object *)type->tp_alloc(type, 0); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1332 if (m_obj == NULL) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1333 return NULL; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1334 /* Set every field to an invalid marker, so we can safely |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1335 destruct the object in the face of failure */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1336 m_obj->data = NULL; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1337 m_obj->file_handle = INVALID_HANDLE_VALUE; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1338 m_obj->map_handle = NULL; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1339 m_obj->tagname = NULL; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1340 m_obj->offset = offset; |
|
13757
67b9b05ce5a5
Fixes for Windows (but also tested on Linux). Test suite now completes, and this module should not leak in the face of errors.
Mark Hammond <mhammond@skippinet.com.au>
parents:
13620
diff
changeset
|
1341 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1342 if (fh) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1343 /* It is necessary to duplicate the handle, so the |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1344 Python code can close it on us */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1345 if (!DuplicateHandle( |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1346 GetCurrentProcess(), /* source process handle */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1347 fh, /* handle to be duplicated */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1348 GetCurrentProcess(), /* target proc handle */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1349 (LPHANDLE)&m_obj->file_handle, /* result */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1350 0, /* access - ignored due to options value */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1351 FALSE, /* inherited by child processes? */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1352 DUPLICATE_SAME_ACCESS)) { /* options */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1353 dwErr = GetLastError(); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1354 Py_DECREF(m_obj); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1355 PyErr_SetFromWindowsErr(dwErr); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1356 return NULL; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1357 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1358 if (!map_size) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1359 DWORD low,high; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1360 low = GetFileSize(fh, &high); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1361 /* low might just happen to have the value INVALID_FILE_SIZE; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1362 so we need to check the last error also. */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1363 if (low == INVALID_FILE_SIZE && |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1364 (dwErr = GetLastError()) != NO_ERROR) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1365 Py_DECREF(m_obj); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1366 return PyErr_SetFromWindowsErr(dwErr); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1367 } |
|
43777
0d462d789b18
Merging the py3k-pep3137 branch back into the py3k branch.
Guido van Rossum <guido@python.org>
parents:
43734
diff
changeset
|
1368 |
|
68054
f8a77fd675f5
Merged revisions 88460,88464,88466,88486,88511,88652 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67707
diff
changeset
|
1369 size = (((PY_LONG_LONG) high) << 32) + low; |
|
78977
88a88c32661e
#15676: mmap: add empty file check prior to offset check <- Previous patch was incomplete
Jesus Cea <jcea@jcea.es>
parents:
78929
diff
changeset
|
1370 if (size == 0) { |
|
88a88c32661e
#15676: mmap: add empty file check prior to offset check <- Previous patch was incomplete
Jesus Cea <jcea@jcea.es>
parents:
78929
diff
changeset
|
1371 PyErr_SetString(PyExc_ValueError, |
|
88a88c32661e
#15676: mmap: add empty file check prior to offset check <- Previous patch was incomplete
Jesus Cea <jcea@jcea.es>
parents:
78929
diff
changeset
|
1372 "cannot mmap an empty file"); |
|
78980
56a2e862561c
#15676: mmap: add empty file check prior to offset check <- Previous patch was incomplete (fix 2)
Jesus Cea <jcea@jcea.es>
parents:
78977
diff
changeset
|
1373 Py_DECREF(m_obj); |
|
78977
88a88c32661e
#15676: mmap: add empty file check prior to offset check <- Previous patch was incomplete
Jesus Cea <jcea@jcea.es>
parents:
78929
diff
changeset
|
1374 return NULL; |
|
88a88c32661e
#15676: mmap: add empty file check prior to offset check <- Previous patch was incomplete
Jesus Cea <jcea@jcea.es>
parents:
78929
diff
changeset
|
1375 } |
|
68054
f8a77fd675f5
Merged revisions 88460,88464,88466,88486,88511,88652 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67707
diff
changeset
|
1376 if (offset >= size) { |
|
67707
f36538ba90a8
Merged revisions 88131 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67623
diff
changeset
|
1377 PyErr_SetString(PyExc_ValueError, |
|
f36538ba90a8
Merged revisions 88131 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67623
diff
changeset
|
1378 "mmap offset is greater than file size"); |
|
f36538ba90a8
Merged revisions 88131 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67623
diff
changeset
|
1379 Py_DECREF(m_obj); |
|
f36538ba90a8
Merged revisions 88131 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67623
diff
changeset
|
1380 return NULL; |
|
f36538ba90a8
Merged revisions 88131 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67623
diff
changeset
|
1381 } |
|
82199
c2c84d3ab393
Issue #16743: Fix mmap overflow check on 32 bit Windows
Richard Oudkerk <shibturn@gmail.com>
parents:
78980
diff
changeset
|
1382 if (size - offset > PY_SSIZE_T_MAX) { |
|
c2c84d3ab393
Issue #16743: Fix mmap overflow check on 32 bit Windows
Richard Oudkerk <shibturn@gmail.com>
parents:
78980
diff
changeset
|
1383 PyErr_SetString(PyExc_ValueError, |
|
c2c84d3ab393
Issue #16743: Fix mmap overflow check on 32 bit Windows
Richard Oudkerk <shibturn@gmail.com>
parents:
78980
diff
changeset
|
1384 "mmap length is too large"); |
|
c2c84d3ab393
Issue #16743: Fix mmap overflow check on 32 bit Windows
Richard Oudkerk <shibturn@gmail.com>
parents:
78980
diff
changeset
|
1385 Py_DECREF(m_obj); |
|
c2c84d3ab393
Issue #16743: Fix mmap overflow check on 32 bit Windows
Richard Oudkerk <shibturn@gmail.com>
parents:
78980
diff
changeset
|
1386 return NULL; |
|
c2c84d3ab393
Issue #16743: Fix mmap overflow check on 32 bit Windows
Richard Oudkerk <shibturn@gmail.com>
parents:
78980
diff
changeset
|
1387 } |
|
c2c84d3ab393
Issue #16743: Fix mmap overflow check on 32 bit Windows
Richard Oudkerk <shibturn@gmail.com>
parents:
78980
diff
changeset
|
1388 m_obj->size = (Py_ssize_t) (size - offset); |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1389 } else { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1390 m_obj->size = map_size; |
|
68054
f8a77fd675f5
Merged revisions 88460,88464,88466,88486,88511,88652 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67707
diff
changeset
|
1391 size = offset + map_size; |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1392 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1393 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1394 else { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1395 m_obj->size = map_size; |
|
68054
f8a77fd675f5
Merged revisions 88460,88464,88466,88486,88511,88652 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67707
diff
changeset
|
1396 size = offset + map_size; |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1397 } |
|
12120
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
1398 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1399 /* set the initial position */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1400 m_obj->pos = (size_t) 0; |
|
12120
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
1401 |
|
85045
1754b7900da1
Issue #4885: Add weakref support to mmap objects. Patch by Valerie Lambert.
Antoine Pitrou <solipsis@pitrou.net>
parents:
82200
diff
changeset
|
1402 m_obj->weakreflist = NULL; |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1403 m_obj->exports = 0; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1404 /* set the tag name */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1405 if (tagname != NULL && *tagname != '\0') { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1406 m_obj->tagname = PyMem_Malloc(strlen(tagname)+1); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1407 if (m_obj->tagname == NULL) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1408 PyErr_NoMemory(); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1409 Py_DECREF(m_obj); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1410 return NULL; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1411 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1412 strcpy(m_obj->tagname, tagname); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1413 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1414 else |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1415 m_obj->tagname = NULL; |
|
13757
67b9b05ce5a5
Fixes for Windows (but also tested on Linux). Test suite now completes, and this module should not leak in the face of errors.
Mark Hammond <mhammond@skippinet.com.au>
parents:
13620
diff
changeset
|
1416 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1417 m_obj->access = (access_mode)access; |
|
68054
f8a77fd675f5
Merged revisions 88460,88464,88466,88486,88511,88652 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67707
diff
changeset
|
1418 size_hi = (DWORD)(size >> 32); |
|
f8a77fd675f5
Merged revisions 88460,88464,88466,88486,88511,88652 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67707
diff
changeset
|
1419 size_lo = (DWORD)(size & 0xFFFFFFFF); |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1420 off_hi = (DWORD)(offset >> 32); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1421 off_lo = (DWORD)(offset & 0xFFFFFFFF); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1422 /* For files, it would be sufficient to pass 0 as size. |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1423 For anonymous maps, we have to pass the size explicitly. */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1424 m_obj->map_handle = CreateFileMapping(m_obj->file_handle, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1425 NULL, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1426 flProtect, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1427 size_hi, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1428 size_lo, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1429 m_obj->tagname); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1430 if (m_obj->map_handle != NULL) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1431 m_obj->data = (char *) MapViewOfFile(m_obj->map_handle, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1432 dwDesiredAccess, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1433 off_hi, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1434 off_lo, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1435 m_obj->size); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1436 if (m_obj->data != NULL) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1437 return (PyObject *)m_obj; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1438 else { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1439 dwErr = GetLastError(); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1440 CloseHandle(m_obj->map_handle); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1441 m_obj->map_handle = NULL; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1442 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1443 } else |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1444 dwErr = GetLastError(); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1445 Py_DECREF(m_obj); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1446 PyErr_SetFromWindowsErr(dwErr); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1447 return NULL; |
|
12120
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
1448 } |
|
24071
8142f8d668a0
Patch #569753: Remove support for WIN16.
Martin v. Löwis <martin@v.loewis.de>
parents:
22177
diff
changeset
|
1449 #endif /* MS_WINDOWS */ |
|
12120
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
1450 |
|
39610
3674f20ac781
Merge current trunk into p3yk. This includes the PyNumber_Index API change,
Thomas Wouters <thomas@python.org>
parents:
39442
diff
changeset
|
1451 static void |
|
3674f20ac781
Merge current trunk into p3yk. This includes the PyNumber_Index API change,
Thomas Wouters <thomas@python.org>
parents:
39442
diff
changeset
|
1452 setint(PyObject *d, const char *name, long value) |
|
3674f20ac781
Merge current trunk into p3yk. This includes the PyNumber_Index API change,
Thomas Wouters <thomas@python.org>
parents:
39442
diff
changeset
|
1453 { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1454 PyObject *o = PyLong_FromLong(value); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1455 if (o && PyDict_SetItemString(d, name, o) == 0) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1456 Py_DECREF(o); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1457 } |
|
39610
3674f20ac781
Merge current trunk into p3yk. This includes the PyNumber_Index API change,
Thomas Wouters <thomas@python.org>
parents:
39442
diff
changeset
|
1458 } |
|
3674f20ac781
Merge current trunk into p3yk. This includes the PyNumber_Index API change,
Thomas Wouters <thomas@python.org>
parents:
39442
diff
changeset
|
1459 |
|
47580
94f64f11fdd0
Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents:
47301
diff
changeset
|
1460 |
|
94f64f11fdd0
Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents:
47301
diff
changeset
|
1461 static struct PyModuleDef mmapmodule = { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1462 PyModuleDef_HEAD_INIT, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1463 "mmap", |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1464 NULL, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1465 -1, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1466 NULL, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1467 NULL, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1468 NULL, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1469 NULL, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1470 NULL |
|
47580
94f64f11fdd0
Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents:
47301
diff
changeset
|
1471 }; |
|
94f64f11fdd0
Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents:
47301
diff
changeset
|
1472 |
|
24363
979ff5d0ae07
Replace DL_IMPORT with PyMODINIT_FUNC and remove "/export:init..." link
Mark Hammond <mhammond@skippinet.com.au>
parents:
24071
diff
changeset
|
1473 PyMODINIT_FUNC |
|
47580
94f64f11fdd0
Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents:
47301
diff
changeset
|
1474 PyInit_mmap(void) |
|
12120
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
1475 { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1476 PyObject *dict, *module; |
|
15851
a3c1a234cee7
SF bug 128713: type(mmap_object) blew up on Linux.
Tim Peters <tim.peters@gmail.com>
parents:
15803
diff
changeset
|
1477 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1478 if (PyType_Ready(&mmap_object_type) < 0) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1479 return NULL; |
|
15851
a3c1a234cee7
SF bug 128713: type(mmap_object) blew up on Linux.
Tim Peters <tim.peters@gmail.com>
parents:
15803
diff
changeset
|
1480 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1481 module = PyModule_Create(&mmapmodule); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1482 if (module == NULL) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1483 return NULL; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1484 dict = PyModule_GetDict(module); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1485 if (!dict) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1486 return NULL; |
|
72879
41a1de81ef2b
PEP 3151 / issue #12555: reworking the OS and IO exception hierarchy.
Antoine Pitrou <solipsis@pitrou.net>
parents:
72835
diff
changeset
|
1487 PyDict_SetItemString(dict, "error", PyExc_OSError); |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1488 PyDict_SetItemString(dict, "mmap", (PyObject*) &mmap_object_type); |
|
12120
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
1489 #ifdef PROT_EXEC |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1490 setint(dict, "PROT_EXEC", PROT_EXEC); |
|
12120
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
1491 #endif |
|
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
1492 #ifdef PROT_READ |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1493 setint(dict, "PROT_READ", PROT_READ); |
|
12120
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
1494 #endif |
|
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
1495 #ifdef PROT_WRITE |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1496 setint(dict, "PROT_WRITE", PROT_WRITE); |
|
12120
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
1497 #endif |
|
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
1498 |
|
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
1499 #ifdef MAP_SHARED |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1500 setint(dict, "MAP_SHARED", MAP_SHARED); |
|
12120
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
1501 #endif |
|
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
1502 #ifdef MAP_PRIVATE |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1503 setint(dict, "MAP_PRIVATE", MAP_PRIVATE); |
|
12120
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
1504 #endif |
|
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
1505 #ifdef MAP_DENYWRITE |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1506 setint(dict, "MAP_DENYWRITE", MAP_DENYWRITE); |
|
12120
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
1507 #endif |
|
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
1508 #ifdef MAP_EXECUTABLE |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1509 setint(dict, "MAP_EXECUTABLE", MAP_EXECUTABLE); |
|
12120
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
1510 #endif |
|
36446
02f0744a9cd0
Patch #1407135, bug #1424041, make mmap.mmap(-1, length) work the same
Neal Norwitz <nnorwitz@gmail.com>
parents:
36445
diff
changeset
|
1511 #ifdef MAP_ANONYMOUS |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1512 setint(dict, "MAP_ANON", MAP_ANONYMOUS); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1513 setint(dict, "MAP_ANONYMOUS", MAP_ANONYMOUS); |
|
12120
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
1514 #endif |
|
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
1515 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1516 setint(dict, "PAGESIZE", (long)my_getpagesize()); |
|
20970
e167b82c6444
CVS patch #477161: New "access" keyword for mmap, from Jay T Miller.
Tim Peters <tim.peters@gmail.com>
parents:
20888
diff
changeset
|
1517 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1518 setint(dict, "ALLOCATIONGRANULARITY", (long)my_getallocationgranularity()); |
|
43734
3e5edf19d5f0
Merged revisions 58221-58741 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
43423
diff
changeset
|
1519 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1520 setint(dict, "ACCESS_READ", ACCESS_READ); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1521 setint(dict, "ACCESS_WRITE", ACCESS_WRITE); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1522 setint(dict, "ACCESS_COPY", ACCESS_COPY); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1523 return module; |
|
12120
ec58b503b670
Added mmap module -- map a view of a file into memory on Win32 and Unix.
Andrew M. Kuchling <amk@amk.ca>
parents:
diff
changeset
|
1524 } |
