Mercurial > cpython-lru_cache-weakref
annotate Modules/mmapmodule.c @ 84007:dbfbdf2b5c19 3.3
Fix #17967: For ftp urls CWD to target instead of hopping to each directory
towards target. This fixes a bug where target is accessible, but parent
directories are restricted.
| author | Senthil Kumaran <senthil@uthcode.com> |
|---|---|
| date | Sat, 01 Jun 2013 08:27:06 -0700 |
| parents | 0748cc03b83e |
| children | 1754b7900da1 |
| 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> |
|
e8c30e69666b
Hacked for Win32 by Mark Hammond.
Guido van Rossum <guido@python.org>
parents:
12120
diff
changeset
|
23 |
|
24071
8142f8d668a0
Patch #569753: Remove support for WIN16.
Martin v. Löwis <martin@v.loewis.de>
parents:
22177
diff
changeset
|
24 #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
|
25 #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
|
26 # 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
|
27 # 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
|
28 # 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
|
29 #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
|
30 |
|
24071
8142f8d668a0
Patch #569753: Remove support for WIN16.
Martin v. Löwis <martin@v.loewis.de>
parents:
22177
diff
changeset
|
31 #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
|
32 #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
|
33 static int |
|
c78e76a571b6
my_getpagesize(): New function; returns the size of a page of memory.
Fred Drake <fdrake@acm.org>
parents:
14836
diff
changeset
|
34 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
|
35 { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
36 SYSTEM_INFO si; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
37 GetSystemInfo(&si); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
38 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
|
39 } |
|
43734
3e5edf19d5f0
Merged revisions 58221-58741 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
43423
diff
changeset
|
40 |
|
3e5edf19d5f0
Merged revisions 58221-58741 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
43423
diff
changeset
|
41 static int |
|
3e5edf19d5f0
Merged revisions 58221-58741 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
43423
diff
changeset
|
42 my_getallocationgranularity (void) |
|
3e5edf19d5f0
Merged revisions 58221-58741 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
43423
diff
changeset
|
43 { |
|
3e5edf19d5f0
Merged revisions 58221-58741 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
43423
diff
changeset
|
44 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
45 SYSTEM_INFO si; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
46 GetSystemInfo(&si); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
47 return si.dwAllocationGranularity; |
|
43734
3e5edf19d5f0
Merged revisions 58221-58741 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
43423
diff
changeset
|
48 } |
|
3e5edf19d5f0
Merged revisions 58221-58741 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
43423
diff
changeset
|
49 |
|
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
|
50 #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
|
51 |
|
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 #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
|
53 #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
|
54 #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
|
55 |
|
14956
c78e76a571b6
my_getpagesize(): New function; returns the size of a page of memory.
Fred Drake <fdrake@acm.org>
parents:
14836
diff
changeset
|
56 #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
|
57 static int |
|
c78e76a571b6
my_getpagesize(): New function; returns the size of a page of memory.
Fred Drake <fdrake@acm.org>
parents:
14836
diff
changeset
|
58 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
|
59 { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
60 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
|
61 } |
|
43734
3e5edf19d5f0
Merged revisions 58221-58741 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
43423
diff
changeset
|
62 |
|
3e5edf19d5f0
Merged revisions 58221-58741 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
43423
diff
changeset
|
63 #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
|
64 #else |
|
c78e76a571b6
my_getpagesize(): New function; returns the size of a page of memory.
Fred Drake <fdrake@acm.org>
parents:
14836
diff
changeset
|
65 #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
|
66 #endif |
|
c78e76a571b6
my_getpagesize(): New function; returns the size of a page of memory.
Fred Drake <fdrake@acm.org>
parents:
14836
diff
changeset
|
67 |
|
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
|
68 #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
|
69 |
|
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
|
70 #include <string.h> |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
39222
diff
changeset
|
71 |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
39222
diff
changeset
|
72 #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
|
73 #include <sys/types.h> |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
39222
diff
changeset
|
74 #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
|
75 |
|
36515
7c9cfd3b5d0f
Update comment and make accurate.
Neal Norwitz <nnorwitz@gmail.com>
parents:
36501
diff
changeset
|
76 /* 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
|
77 #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
|
78 # 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
|
79 #endif |
|
02f0744a9cd0
Patch #1407135, bug #1424041, make mmap.mmap(-1, length) work the same
Neal Norwitz <nnorwitz@gmail.com>
parents:
36445
diff
changeset
|
80 |
|
20970
e167b82c6444
CVS patch #477161: New "access" keyword for mmap, from Jay T Miller.
Tim Peters <tim.peters@gmail.com>
parents:
20888
diff
changeset
|
81 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
|
82 { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
83 ACCESS_DEFAULT, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
84 ACCESS_READ, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
85 ACCESS_WRITE, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
86 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
|
87 } 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
|
88 |
|
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
|
89 typedef struct { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
90 PyObject_HEAD |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
91 char * data; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
92 size_t size; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
93 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
|
94 #ifdef MS_WINDOWS |
|
f8a77fd675f5
Merged revisions 88460,88464,88466,88486,88511,88652 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67707
diff
changeset
|
95 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
|
96 #else |
|
f8a77fd675f5
Merged revisions 88460,88464,88466,88486,88511,88652 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67707
diff
changeset
|
97 off_t offset; |
|
f8a77fd675f5
Merged revisions 88460,88464,88466,88486,88511,88652 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67707
diff
changeset
|
98 #endif |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
99 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
|
100 |
|
24071
8142f8d668a0
Patch #569753: Remove support for WIN16.
Martin v. Löwis <martin@v.loewis.de>
parents:
22177
diff
changeset
|
101 #ifdef MS_WINDOWS |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
102 HANDLE map_handle; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
103 HANDLE file_handle; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
104 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
|
105 #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
|
106 |
|
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 #ifdef UNIX |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
108 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
|
109 #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
|
110 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
111 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
|
112 } 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
|
113 |
|
20970
e167b82c6444
CVS patch #477161: New "access" keyword for mmap, from Jay T Miller.
Tim Peters <tim.peters@gmail.com>
parents:
20888
diff
changeset
|
114 |
|
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
|
115 static void |
|
13441
5edee6878943
-- ANSI-fying, names
Fredrik Lundh <fredrik@pythonware.com>
parents:
13359
diff
changeset
|
116 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
|
117 { |
|
24071
8142f8d668a0
Patch #569753: Remove support for WIN16.
Martin v. Löwis <martin@v.loewis.de>
parents:
22177
diff
changeset
|
118 #ifdef MS_WINDOWS |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
119 if (m_obj->data != NULL) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
120 UnmapViewOfFile (m_obj->data); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
121 if (m_obj->map_handle != NULL) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
122 CloseHandle (m_obj->map_handle); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
123 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
|
124 CloseHandle (m_obj->file_handle); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
125 if (m_obj->tagname) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
126 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
|
127 #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
|
128 |
|
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
|
129 #ifdef UNIX |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
130 if (m_obj->fd >= 0) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
131 (void) close(m_obj->fd); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
132 if (m_obj->data!=NULL) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
133 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
|
134 } |
|
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
|
135 #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
|
136 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
137 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
|
138 } |
|
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
|
139 |
|
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
|
140 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
|
141 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
|
142 { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
143 if (self->exports > 0) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
144 PyErr_SetString(PyExc_BufferError, "cannot close "\ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
145 "exported pointers exist"); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
146 return NULL; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
147 } |
|
24071
8142f8d668a0
Patch #569753: Remove support for WIN16.
Martin v. Löwis <martin@v.loewis.de>
parents:
22177
diff
changeset
|
148 #ifdef MS_WINDOWS |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
149 /* 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
|
150 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
|
151 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
|
152 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
|
153 again. |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
154 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
|
155 */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
156 if (self->data != NULL) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
157 UnmapViewOfFile(self->data); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
158 self->data = NULL; |
|
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->map_handle != NULL) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
161 CloseHandle(self->map_handle); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
162 self->map_handle = 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->file_handle != INVALID_HANDLE_VALUE) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
165 CloseHandle(self->file_handle); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
166 self->file_handle = INVALID_HANDLE_VALUE; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
167 } |
|
24071
8142f8d668a0
Patch #569753: Remove support for WIN16.
Martin v. Löwis <martin@v.loewis.de>
parents:
22177
diff
changeset
|
168 #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
|
169 |
|
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
|
170 #ifdef UNIX |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
171 if (0 <= self->fd) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
172 (void) close(self->fd); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
173 self->fd = -1; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
174 if (self->data != NULL) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
175 munmap(self->data, self->size); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
176 self->data = NULL; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
177 } |
|
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
|
178 #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
|
179 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
180 Py_INCREF(Py_None); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
181 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
|
182 } |
|
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 |
|
24071
8142f8d668a0
Patch #569753: Remove support for WIN16.
Martin v. Löwis <martin@v.loewis.de>
parents:
22177
diff
changeset
|
184 #ifdef MS_WINDOWS |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
185 #define CHECK_VALID(err) \ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
186 do { \ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
187 if (self->map_handle == NULL) { \ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
188 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
|
189 return err; \ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
190 } \ |
|
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
|
191 } while (0) |
|
24071
8142f8d668a0
Patch #569753: Remove support for WIN16.
Martin v. Löwis <martin@v.loewis.de>
parents:
22177
diff
changeset
|
192 #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
|
193 |
|
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
|
194 #ifdef UNIX |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
195 #define CHECK_VALID(err) \ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
196 do { \ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
197 if (self->data == NULL) { \ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
198 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
|
199 return err; \ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
200 } \ |
|
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
|
201 } 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
|
202 #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
|
203 |
|
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
|
204 static PyObject * |
|
13441
5edee6878943
-- ANSI-fying, names
Fredrik Lundh <fredrik@pythonware.com>
parents:
13359
diff
changeset
|
205 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
|
206 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
|
207 { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
208 CHECK_VALID(NULL); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
209 if (self->pos < self->size) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
210 char value = self->data[self->pos]; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
211 self->pos += 1; |
|
65932
1e4d46a61fbe
Merged revisions 86159 via svnmerge from
Hirokazu Yamamoto <ocean-city@m2.ccsnet.ne.jp>
parents:
64047
diff
changeset
|
212 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
|
213 } else { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
214 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
|
215 return NULL; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
216 } |
|
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
|
217 } |
|
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
|
218 |
|
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
|
219 static PyObject * |
|
13441
5edee6878943
-- ANSI-fying, names
Fredrik Lundh <fredrik@pythonware.com>
parents:
13359
diff
changeset
|
220 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
|
221 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
|
222 { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
223 char *start = self->data+self->pos; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
224 char *eof = self->data+self->size; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
225 char *eol; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
226 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
|
227 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
228 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
|
229 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
230 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
|
231 if (!eol) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
232 eol = eof; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
233 else |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
234 ++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
|
235 newline. */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
236 result = PyBytes_FromStringAndSize(start, (eol - start)); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
237 self->pos += (eol - start); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
238 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
|
239 } |
|
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
|
240 |
|
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
|
241 /* 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
|
242 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
|
243 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
|
244 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
|
245 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
|
246 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
|
247 } |
|
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 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
|
249 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
|
250 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
|
251 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
|
252 } |
|
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 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
|
254 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
|
255 "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
|
256 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
|
257 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
|
258 } |
|
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 *((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
|
260 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
|
261 } |
|
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 |
|
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
|
263 static PyObject * |
|
13441
5edee6878943
-- ANSI-fying, names
Fredrik Lundh <fredrik@pythonware.com>
parents:
13359
diff
changeset
|
264 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
|
265 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
|
266 { |
|
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
|
267 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
|
268 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
|
269 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
270 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
|
271 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
|
272 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
|
273 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
274 /* silently 'adjust' out-of-range requests */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
275 assert(self->size >= self->pos); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
276 n = self->size - self->pos; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
277 /* 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
|
278 * 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
|
279 * 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
|
280 * 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
|
281 * the code below raise MemoryError. |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
282 */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
283 if (n < 0) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
284 n = PY_SSIZE_T_MAX; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
285 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
|
286 num_bytes = n; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
287 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
288 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
|
289 self->pos += num_bytes; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
290 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
|
291 } |
|
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
|
292 |
|
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
|
293 static PyObject * |
|
44782
ca2683a67943
Merged revisions 60080-60089,60091-60093 via svnmerge from
Georg Brandl <georg@python.org>
parents:
44643
diff
changeset
|
294 mmap_gfind(mmap_object *self, |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
295 PyObject *args, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
296 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
|
297 { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
298 Py_ssize_t start = self->pos; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
299 Py_ssize_t end = self->size; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
300 const char *needle; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
301 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
|
302 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
303 CHECK_VALID(NULL); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
304 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
|
305 &needle, &len, &start, &end)) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
306 return NULL; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
307 } else { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
308 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
|
309 int sign = reverse ? -1 : 1; |
|
17821
780248cd1d9a
Fix the .find() method for memory maps.
Greg Stein <gstein@lyra.org>
parents:
17735
diff
changeset
|
310 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
311 if (start < 0) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
312 start += self->size; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
313 if (start < 0) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
314 start = 0; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
315 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
|
316 start = self->size; |
|
17821
780248cd1d9a
Fix the .find() method for memory maps.
Greg Stein <gstein@lyra.org>
parents:
17735
diff
changeset
|
317 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
318 if (end < 0) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
319 end += self->size; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
320 if (end < 0) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
321 end = 0; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
322 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
|
323 end = self->size; |
|
44782
ca2683a67943
Merged revisions 60080-60089,60091-60093 via svnmerge from
Georg Brandl <georg@python.org>
parents:
44643
diff
changeset
|
324 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
325 start_p = self->data + start; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
326 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
|
327 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
328 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
|
329 (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
|
330 Py_ssize_t i; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
331 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
|
332 /* nothing */; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
333 if (i == len) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
334 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
|
335 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
336 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
337 return PyLong_FromLong(-1); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
338 } |
|
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
|
339 } |
|
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
|
340 |
|
44782
ca2683a67943
Merged revisions 60080-60089,60091-60093 via svnmerge from
Georg Brandl <georg@python.org>
parents:
44643
diff
changeset
|
341 static PyObject * |
|
ca2683a67943
Merged revisions 60080-60089,60091-60093 via svnmerge from
Georg Brandl <georg@python.org>
parents:
44643
diff
changeset
|
342 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
|
343 PyObject *args) |
|
44782
ca2683a67943
Merged revisions 60080-60089,60091-60093 via svnmerge from
Georg Brandl <georg@python.org>
parents:
44643
diff
changeset
|
344 { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
345 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
|
346 } |
|
ca2683a67943
Merged revisions 60080-60089,60091-60093 via svnmerge from
Georg Brandl <georg@python.org>
parents:
44643
diff
changeset
|
347 |
|
ca2683a67943
Merged revisions 60080-60089,60091-60093 via svnmerge from
Georg Brandl <georg@python.org>
parents:
44643
diff
changeset
|
348 static PyObject * |
|
ca2683a67943
Merged revisions 60080-60089,60091-60093 via svnmerge from
Georg Brandl <georg@python.org>
parents:
44643
diff
changeset
|
349 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
|
350 PyObject *args) |
|
44782
ca2683a67943
Merged revisions 60080-60089,60091-60093 via svnmerge from
Georg Brandl <georg@python.org>
parents:
44643
diff
changeset
|
351 { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
352 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
|
353 } |
|
ca2683a67943
Merged revisions 60080-60089,60091-60093 via svnmerge from
Georg Brandl <georg@python.org>
parents:
44643
diff
changeset
|
354 |
|
36537
fdabdf148336
Trimmed trailing whitespace.
Tim Peters <tim.peters@gmail.com>
parents:
36536
diff
changeset
|
355 static int |
|
43384
4e57c36f6d2e
Fixing the spelling of "writeable" to "writable", particularly PyBUF_WRITEABLE.
Sean Reifscheider <jafo@tummy.com>
parents:
43100
diff
changeset
|
356 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
|
357 { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
358 if (self->access != ACCESS_READ) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
359 return 1; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
360 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
|
361 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
|
362 } |
|
e167b82c6444
CVS patch #477161: New "access" keyword for mmap, from Jay T Miller.
Tim Peters <tim.peters@gmail.com>
parents:
20888
diff
changeset
|
363 |
|
36537
fdabdf148336
Trimmed trailing whitespace.
Tim Peters <tim.peters@gmail.com>
parents:
36536
diff
changeset
|
364 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
|
365 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
|
366 { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
367 if (self->exports > 0) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
368 PyErr_SetString(PyExc_BufferError, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
369 "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
|
370 return 0; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
371 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
372 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
|
373 return 1; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
374 PyErr_Format(PyExc_TypeError, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
375 "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
|
376 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
|
377 } |
|
e167b82c6444
CVS patch #477161: New "access" keyword for mmap, from Jay T Miller.
Tim Peters <tim.peters@gmail.com>
parents:
20888
diff
changeset
|
378 |
|
e167b82c6444
CVS patch #477161: New "access" keyword for mmap, from Jay T Miller.
Tim Peters <tim.peters@gmail.com>
parents:
20888
diff
changeset
|
379 |
|
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
|
380 static PyObject * |
|
13441
5edee6878943
-- ANSI-fying, names
Fredrik Lundh <fredrik@pythonware.com>
parents:
13359
diff
changeset
|
381 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
|
382 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
|
383 { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
384 Py_ssize_t length; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
385 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
|
386 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
387 CHECK_VALID(NULL); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
388 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
|
389 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
|
390 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
391 if (!is_writable(self)) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
392 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
|
393 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
394 if ((self->pos + length) > self->size) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
395 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
|
396 return NULL; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
397 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
398 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
|
399 self->pos = self->pos+length; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
400 Py_INCREF(Py_None); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
401 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
|
402 } |
|
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
|
403 |
|
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
|
404 static PyObject * |
|
13441
5edee6878943
-- ANSI-fying, names
Fredrik Lundh <fredrik@pythonware.com>
parents:
13359
diff
changeset
|
405 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
|
406 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
|
407 { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
408 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
|
409 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
410 CHECK_VALID(NULL); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
411 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
|
412 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
|
413 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
414 if (!is_writable(self)) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
415 return NULL; |
|
51910
759dbace51d2
Merged revisions 70053 via svnmerge from
Hirokazu Yamamoto <ocean-city@m2.ccsnet.ne.jp>
parents:
51706
diff
changeset
|
416 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
417 if (self->pos < self->size) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
418 *(self->data+self->pos) = value; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
419 self->pos += 1; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
420 Py_INCREF(Py_None); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
421 return Py_None; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
422 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
423 else { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
424 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
|
425 return NULL; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
426 } |
|
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
|
427 } |
|
36537
fdabdf148336
Trimmed trailing whitespace.
Tim Peters <tim.peters@gmail.com>
parents:
36536
diff
changeset
|
428 |
|
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
|
429 static PyObject * |
|
13441
5edee6878943
-- ANSI-fying, names
Fredrik Lundh <fredrik@pythonware.com>
parents:
13359
diff
changeset
|
430 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
|
431 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
|
432 { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
433 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
|
434 |
|
24071
8142f8d668a0
Patch #569753: Remove support for WIN16.
Martin v. Löwis <martin@v.loewis.de>
parents:
22177
diff
changeset
|
435 #ifdef MS_WINDOWS |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
436 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
|
437 DWORD low,high; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
438 PY_LONG_LONG size; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
439 low = GetFileSize(self->file_handle, &high); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
440 if (low == INVALID_FILE_SIZE) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
441 /* 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
|
442 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
|
443 DWORD error = GetLastError(); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
444 if (error != NO_ERROR) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
445 return PyErr_SetFromWindowsErr(error); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
446 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
447 if (!high && low < LONG_MAX) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
448 return PyLong_FromLong((long)low); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
449 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
|
450 return PyLong_FromLongLong(size); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
451 } else { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
452 return PyLong_FromSsize_t(self->size); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
453 } |
|
24071
8142f8d668a0
Patch #569753: Remove support for WIN16.
Martin v. Löwis <martin@v.loewis.de>
parents:
22177
diff
changeset
|
454 #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
|
455 |
|
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
|
456 #ifdef UNIX |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
457 { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
458 struct stat buf; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
459 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
|
460 PyErr_SetFromErrno(PyExc_OSError); |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
461 return NULL; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
462 } |
|
68054
f8a77fd675f5
Merged revisions 88460,88464,88466,88486,88511,88652 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67707
diff
changeset
|
463 #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
|
464 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
|
465 #else |
|
f8a77fd675f5
Merged revisions 88460,88464,88466,88486,88511,88652 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67707
diff
changeset
|
466 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
|
467 #endif |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
468 } |
|
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
|
469 #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
|
470 } |
|
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
|
471 |
|
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
|
472 /* 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
|
473 / 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
|
474 / 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
|
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 / 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
|
477 / 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
|
478 / 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 |
|
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 static PyObject * |
|
13441
5edee6878943
-- ANSI-fying, names
Fredrik Lundh <fredrik@pythonware.com>
parents:
13359
diff
changeset
|
482 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
|
483 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
|
484 { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
485 Py_ssize_t new_size; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
486 CHECK_VALID(NULL); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
487 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
|
488 !is_resizeable(self)) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
489 return NULL; |
|
24071
8142f8d668a0
Patch #569753: Remove support for WIN16.
Martin v. Löwis <martin@v.loewis.de>
parents:
22177
diff
changeset
|
490 #ifdef MS_WINDOWS |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
491 } else { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
492 DWORD dwErrCode = 0; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
493 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
|
494 /* First, unmap the file view */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
495 UnmapViewOfFile(self->data); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
496 self->data = NULL; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
497 /* Close the mapping object */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
498 CloseHandle(self->map_handle); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
499 self->map_handle = NULL; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
500 /* Move to the desired EOF position */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
501 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
|
502 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
|
503 off_hi = (DWORD)(self->offset >> 32); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
504 off_lo = (DWORD)(self->offset & 0xFFFFFFFF); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
505 SetFilePointer(self->file_handle, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
506 newSizeLow, &newSizeHigh, FILE_BEGIN); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
507 /* Change the size of the file */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
508 SetEndOfFile(self->file_handle); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
509 /* 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
|
510 self->map_handle = CreateFileMapping( |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
511 self->file_handle, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
512 NULL, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
513 PAGE_READWRITE, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
514 0, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
515 0, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
516 self->tagname); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
517 if (self->map_handle != NULL) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
518 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
|
519 FILE_MAP_WRITE, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
520 off_hi, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
521 off_lo, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
522 new_size); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
523 if (self->data != NULL) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
524 self->size = new_size; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
525 Py_INCREF(Py_None); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
526 return Py_None; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
527 } else { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
528 dwErrCode = GetLastError(); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
529 CloseHandle(self->map_handle); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
530 self->map_handle = NULL; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
531 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
532 } else { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
533 dwErrCode = GetLastError(); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
534 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
535 PyErr_SetFromWindowsErr(dwErrCode); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
536 return NULL; |
|
24071
8142f8d668a0
Patch #569753: Remove support for WIN16.
Martin v. Löwis <martin@v.loewis.de>
parents:
22177
diff
changeset
|
537 #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
|
538 |
|
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
|
539 #ifdef UNIX |
|
36537
fdabdf148336
Trimmed trailing whitespace.
Tim Peters <tim.peters@gmail.com>
parents:
36536
diff
changeset
|
540 #ifndef HAVE_MREMAP |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
541 } else { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
542 PyErr_SetString(PyExc_SystemError, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
543 "mmap: resizing not available--no mremap()"); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
544 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
|
545 #else |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
546 } else { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
547 void *newmap; |
| 35612 | 548 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
549 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
|
550 PyErr_SetFromErrno(PyExc_OSError); |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
551 return NULL; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
552 } |
|
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
|
553 |
|
12948
acb0261b6942
Support resizing the mapping depending on whether HAVE_MREMAP is defined
Andrew M. Kuchling <amk@amk.ca>
parents:
12945
diff
changeset
|
554 #ifdef MREMAP_MAYMOVE |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
555 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
|
556 #else |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
557 #if defined(__NetBSD__) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
558 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
|
559 #else |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
560 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
|
561 #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
|
562 #endif |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
563 if (newmap == (void *)-1) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
564 { |
|
72879
41a1de81ef2b
PEP 3151 / issue #12555: reworking the OS and IO exception hierarchy.
Antoine Pitrou <solipsis@pitrou.net>
parents:
72835
diff
changeset
|
565 PyErr_SetFromErrno(PyExc_OSError); |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
566 return NULL; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
567 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
568 self->data = newmap; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
569 self->size = new_size; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
570 Py_INCREF(Py_None); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
571 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
|
572 #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
|
573 #endif /* UNIX */ |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
574 } |
|
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
|
575 } |
|
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
|
576 |
|
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 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
|
578 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
|
579 { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
580 CHECK_VALID(NULL); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
581 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
|
582 } |
|
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 |
|
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
|
584 static PyObject * |
|
13441
5edee6878943
-- ANSI-fying, names
Fredrik Lundh <fredrik@pythonware.com>
parents:
13359
diff
changeset
|
585 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
|
586 { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
587 Py_ssize_t offset = 0; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
588 Py_ssize_t size = self->size; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
589 CHECK_VALID(NULL); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
590 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
|
591 return NULL; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
592 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
|
593 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
|
594 return NULL; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
595 } |
|
66825
7253be96a19e
Merged revisions 85678 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents:
65932
diff
changeset
|
596 |
|
7253be96a19e
Merged revisions 85678 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents:
65932
diff
changeset
|
597 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
|
598 return PyLong_FromLong(0); |
|
7253be96a19e
Merged revisions 85678 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents:
65932
diff
changeset
|
599 |
|
24071
8142f8d668a0
Patch #569753: Remove support for WIN16.
Martin v. Löwis <martin@v.loewis.de>
parents:
22177
diff
changeset
|
600 #ifdef MS_WINDOWS |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
601 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
|
602 #elif defined(UNIX) |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
603 /* XXX semantics of return value? */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
604 /* XXX flags for msync? */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
605 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
|
606 PyErr_SetFromErrno(PyExc_OSError); |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
607 return NULL; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
608 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
609 return PyLong_FromLong(0); |
|
44999
7c02182e2979
Merged revisions 60284-60349 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44885
diff
changeset
|
610 #else |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
611 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
|
612 return NULL; |
|
44999
7c02182e2979
Merged revisions 60284-60349 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44885
diff
changeset
|
613 #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
|
614 } |
|
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
|
615 |
|
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
|
616 static PyObject * |
|
13441
5edee6878943
-- ANSI-fying, names
Fredrik Lundh <fredrik@pythonware.com>
parents:
13359
diff
changeset
|
617 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
|
618 { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
619 Py_ssize_t dist; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
620 int how=0; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
621 CHECK_VALID(NULL); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
622 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
|
623 return NULL; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
624 else { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
625 size_t where; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
626 switch (how) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
627 case 0: /* relative to start */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
628 if (dist < 0) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
629 goto onoutofrange; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
630 where = dist; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
631 break; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
632 case 1: /* relative to current position */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
633 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
|
634 goto onoutofrange; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
635 where = self->pos + dist; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
636 break; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
637 case 2: /* relative to end */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
638 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
|
639 goto onoutofrange; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
640 where = self->size + dist; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
641 break; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
642 default: |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
643 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
|
644 return NULL; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
645 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
646 if (where > self->size) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
647 goto onoutofrange; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
648 self->pos = where; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
649 Py_INCREF(Py_None); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
650 return Py_None; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
651 } |
| 12945 | 652 |
|
20970
e167b82c6444
CVS patch #477161: New "access" keyword for mmap, from Jay T Miller.
Tim Peters <tim.peters@gmail.com>
parents:
20888
diff
changeset
|
653 onoutofrange: |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
654 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
|
655 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
|
656 } |
|
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
|
657 |
|
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
|
658 static PyObject * |
|
13441
5edee6878943
-- ANSI-fying, names
Fredrik Lundh <fredrik@pythonware.com>
parents:
13359
diff
changeset
|
659 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
|
660 { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
661 unsigned long dest, src, cnt; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
662 CHECK_VALID(NULL); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
663 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
|
664 !is_writable(self)) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
665 return NULL; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
666 } else { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
667 /* bounds check the values */ |
|
70696
9ef14857e49c
Checking if an unsigned long is < 0 is pointless.
Brett Cannon <brett@python.org>
parents:
69754
diff
changeset
|
668 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
|
669 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
|
670 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
|
671 PyErr_SetString(PyExc_ValueError, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
672 "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
|
673 return NULL; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
674 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
675 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
|
676 Py_INCREF(Py_None); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
677 return Py_None; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
678 } |
|
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
|
679 } |
|
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
|
680 |
|
63422
cf989a34c77e
#8046: add context manager protocol support to mmap objects. Also add closed property.
Georg Brandl <georg@python.org>
parents:
61466
diff
changeset
|
681 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
|
682 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
|
683 { |
|
cf989a34c77e
#8046: add context manager protocol support to mmap objects. Also add closed property.
Georg Brandl <georg@python.org>
parents:
61466
diff
changeset
|
684 #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
|
685 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
|
686 #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
|
687 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
|
688 #endif |
|
cf989a34c77e
#8046: add context manager protocol support to mmap objects. Also add closed property.
Georg Brandl <georg@python.org>
parents:
61466
diff
changeset
|
689 } |
|
cf989a34c77e
#8046: add context manager protocol support to mmap objects. Also add closed property.
Georg Brandl <georg@python.org>
parents:
61466
diff
changeset
|
690 |
|
cf989a34c77e
#8046: add context manager protocol support to mmap objects. Also add closed property.
Georg Brandl <georg@python.org>
parents:
61466
diff
changeset
|
691 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
|
692 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
|
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 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
|
695 |
|
cf989a34c77e
#8046: add context manager protocol support to mmap objects. Also add closed property.
Georg Brandl <georg@python.org>
parents:
61466
diff
changeset
|
696 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
|
697 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
|
698 } |
|
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 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
|
701 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
|
702 { |
|
72925
7109f31300fb
Rename _Py_identifier to _Py_IDENTIFIER.
Martin v. Löwis <martin@v.loewis.de>
parents:
72879
diff
changeset
|
703 _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
|
704 |
|
5e33219492bc
Add API for static strings, primarily good for identifiers.
Martin v. Löwis <martin@v.loewis.de>
parents:
70946
diff
changeset
|
705 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
|
706 } |
|
cf989a34c77e
#8046: add context manager protocol support to mmap objects. Also add closed property.
Georg Brandl <georg@python.org>
parents:
61466
diff
changeset
|
707 |
|
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
|
708 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
|
709 {"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
|
710 {"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
|
711 {"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
|
712 {"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
|
713 {"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
|
714 {"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
|
715 {"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
|
716 {"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
|
717 {"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
|
718 {"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
|
719 {"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
|
720 {"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
|
721 {"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
|
722 {"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
|
723 {"__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
|
724 {"__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
|
725 {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
|
726 }; |
|
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
|
727 |
|
63422
cf989a34c77e
#8046: add context manager protocol support to mmap objects. Also add closed property.
Georg Brandl <georg@python.org>
parents:
61466
diff
changeset
|
728 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
|
729 {"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
|
730 {NULL} |
|
cf989a34c77e
#8046: add context manager protocol support to mmap objects. Also add closed property.
Georg Brandl <georg@python.org>
parents:
61466
diff
changeset
|
731 }; |
|
cf989a34c77e
#8046: add context manager protocol support to mmap objects. Also add closed property.
Georg Brandl <georg@python.org>
parents:
61466
diff
changeset
|
732 |
|
cf989a34c77e
#8046: add context manager protocol support to mmap objects. Also add closed property.
Georg Brandl <georg@python.org>
parents:
61466
diff
changeset
|
733 |
|
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
|
734 /* 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
|
735 |
|
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
|
736 static int |
|
43777
0d462d789b18
Merging the py3k-pep3137 branch back into the py3k branch.
Guido van Rossum <guido@python.org>
parents:
43734
diff
changeset
|
737 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
|
738 { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
739 CHECK_VALID(-1); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
740 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
|
741 (self->access == ACCESS_READ), flags) < 0) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
742 return -1; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
743 self->exports++; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
744 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
|
745 } |
|
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
|
746 |
|
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
|
747 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
|
748 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
|
749 { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
750 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
|
751 } |
|
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
|
752 |
|
36501
7fdc639bc5b4
Merge ssize_t branch.
Martin v. Löwis <martin@v.loewis.de>
parents:
36446
diff
changeset
|
753 static Py_ssize_t |
|
13441
5edee6878943
-- ANSI-fying, names
Fredrik Lundh <fredrik@pythonware.com>
parents:
13359
diff
changeset
|
754 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
|
755 { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
756 CHECK_VALID(-1); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
757 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
|
758 } |
|
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 |
|
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
|
760 static PyObject * |
|
36501
7fdc639bc5b4
Merge ssize_t branch.
Martin v. Löwis <martin@v.loewis.de>
parents:
36446
diff
changeset
|
761 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
|
762 { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
763 CHECK_VALID(NULL); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
764 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
|
765 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
|
766 return NULL; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
767 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
768 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
|
769 } |
|
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
|
770 |
|
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
|
771 static PyObject * |
|
42954
27f0289b6835
Merge the trunk changes in. Breaks socket.ssl for now.
Thomas Wouters <thomas@python.org>
parents:
42665
diff
changeset
|
772 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
|
773 { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
774 CHECK_VALID(NULL); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
775 if (PyIndex_Check(item)) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
776 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
|
777 if (i == -1 && PyErr_Occurred()) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
778 return NULL; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
779 if (i < 0) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
780 i += self->size; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
781 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
|
782 PyErr_SetString(PyExc_IndexError, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
783 "mmap index out of range"); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
784 return NULL; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
785 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
786 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
|
787 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
788 else if (PySlice_Check(item)) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
789 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
|
790 |
|
66664
62b61abd02b8
Merge branches/pep-0384.
Martin v. Löwis <martin@v.loewis.de>
parents:
65931
diff
changeset
|
791 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
|
792 &start, &stop, &step, &slicelen) < 0) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
793 return NULL; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
794 } |
|
43777
0d462d789b18
Merging the py3k-pep3137 branch back into the py3k branch.
Guido van Rossum <guido@python.org>
parents:
43734
diff
changeset
|
795 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
796 if (slicelen <= 0) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
797 return PyBytes_FromStringAndSize("", 0); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
798 else if (step == 1) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
799 return PyBytes_FromStringAndSize(self->data + start, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
800 slicelen); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
801 else { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
802 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
|
803 Py_ssize_t cur, i; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
804 PyObject *result; |
|
42954
27f0289b6835
Merge the trunk changes in. Breaks socket.ssl for now.
Thomas Wouters <thomas@python.org>
parents:
42665
diff
changeset
|
805 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
806 if (result_buf == NULL) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
807 return PyErr_NoMemory(); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
808 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
|
809 cur += step, i++) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
810 result_buf[i] = self->data[cur]; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
811 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
812 result = PyBytes_FromStringAndSize(result_buf, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
813 slicelen); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
814 PyMem_Free(result_buf); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
815 return result; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
816 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
817 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
818 else { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
819 PyErr_SetString(PyExc_TypeError, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
820 "mmap indices must be integers"); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
821 return NULL; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
822 } |
|
42954
27f0289b6835
Merge the trunk changes in. Breaks socket.ssl for now.
Thomas Wouters <thomas@python.org>
parents:
42665
diff
changeset
|
823 } |
|
27f0289b6835
Merge the trunk changes in. Breaks socket.ssl for now.
Thomas Wouters <thomas@python.org>
parents:
42665
diff
changeset
|
824 |
|
27f0289b6835
Merge the trunk changes in. Breaks socket.ssl for now.
Thomas Wouters <thomas@python.org>
parents:
42665
diff
changeset
|
825 static PyObject * |
|
13441
5edee6878943
-- ANSI-fying, names
Fredrik Lundh <fredrik@pythonware.com>
parents:
13359
diff
changeset
|
826 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
|
827 { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
828 CHECK_VALID(NULL); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
829 PyErr_SetString(PyExc_SystemError, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
830 "mmaps don't support concatenation"); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
831 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
|
832 } |
|
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
|
833 |
|
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
|
834 static PyObject * |
|
36501
7fdc639bc5b4
Merge ssize_t branch.
Martin v. Löwis <martin@v.loewis.de>
parents:
36446
diff
changeset
|
835 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
|
836 { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
837 CHECK_VALID(NULL); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
838 PyErr_SetString(PyExc_SystemError, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
839 "mmaps don't support repeat operation"); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
840 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
|
841 } |
|
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
|
842 |
|
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
|
843 static int |
|
36501
7fdc639bc5b4
Merge ssize_t branch.
Martin v. Löwis <martin@v.loewis.de>
parents:
36446
diff
changeset
|
844 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
|
845 { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
846 const char *buf; |
|
36537
fdabdf148336
Trimmed trailing whitespace.
Tim Peters <tim.peters@gmail.com>
parents:
36536
diff
changeset
|
847 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
848 CHECK_VALID(-1); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
849 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
|
850 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
|
851 return -1; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
852 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
853 if (v == NULL) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
854 PyErr_SetString(PyExc_TypeError, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
855 "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
|
856 return -1; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
857 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
858 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
|
859 PyErr_SetString(PyExc_IndexError, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
860 "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
|
861 return -1; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
862 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
863 if (!is_writable(self)) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
864 return -1; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
865 buf = PyBytes_AsString(v); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
866 self->data[i] = buf[0]; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
867 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
|
868 } |
|
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
|
869 |
|
42954
27f0289b6835
Merge the trunk changes in. Breaks socket.ssl for now.
Thomas Wouters <thomas@python.org>
parents:
42665
diff
changeset
|
870 static int |
|
27f0289b6835
Merge the trunk changes in. Breaks socket.ssl for now.
Thomas Wouters <thomas@python.org>
parents:
42665
diff
changeset
|
871 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
|
872 { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
873 CHECK_VALID(-1); |
|
42954
27f0289b6835
Merge the trunk changes in. Breaks socket.ssl for now.
Thomas Wouters <thomas@python.org>
parents:
42665
diff
changeset
|
874 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
875 if (!is_writable(self)) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
876 return -1; |
|
43777
0d462d789b18
Merging the py3k-pep3137 branch back into the py3k branch.
Guido van Rossum <guido@python.org>
parents:
43734
diff
changeset
|
877 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
878 if (PyIndex_Check(item)) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
879 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
|
880 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
|
881 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
882 if (i == -1 && PyErr_Occurred()) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
883 return -1; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
884 if (i < 0) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
885 i += self->size; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
886 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
|
887 PyErr_SetString(PyExc_IndexError, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
888 "mmap index out of range"); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
889 return -1; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
890 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
891 if (value == NULL) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
892 PyErr_SetString(PyExc_TypeError, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
893 "mmap doesn't support item deletion"); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
894 return -1; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
895 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
896 if (!PyIndex_Check(value)) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
897 PyErr_SetString(PyExc_TypeError, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
898 "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
|
899 return -1; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
900 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
901 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
|
902 if (v == -1 && PyErr_Occurred()) |
|
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 if (v < 0 || v > 255) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
905 PyErr_SetString(PyExc_ValueError, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
906 "mmap item value must be " |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
907 "in range(0, 256)"); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
908 return -1; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
909 } |
|
64047
79d572ea17df
Merged revisions 84076 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
63425
diff
changeset
|
910 self->data[i] = (char) v; |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
911 return 0; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
912 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
913 else if (PySlice_Check(item)) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
914 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
|
915 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
|
916 |
|
66664
62b61abd02b8
Merge branches/pep-0384.
Martin v. Löwis <martin@v.loewis.de>
parents:
65931
diff
changeset
|
917 if (PySlice_GetIndicesEx(item, |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
918 self->size, &start, &stop, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
919 &step, &slicelen) < 0) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
920 return -1; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
921 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
922 if (value == NULL) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
923 PyErr_SetString(PyExc_TypeError, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
924 "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
|
925 return -1; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
926 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
927 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
|
928 return -1; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
929 if (vbuf.len != slicelen) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
930 PyErr_SetString(PyExc_IndexError, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
931 "mmap slice assignment is wrong size"); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
932 PyBuffer_Release(&vbuf); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
933 return -1; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
934 } |
|
42954
27f0289b6835
Merge the trunk changes in. Breaks socket.ssl for now.
Thomas Wouters <thomas@python.org>
parents:
42665
diff
changeset
|
935 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
936 if (slicelen == 0) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
937 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
938 else if (step == 1) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
939 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
|
940 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
941 else { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
942 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
|
943 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
944 for (cur = start, i = 0; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
945 i < slicelen; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
946 cur += step, i++) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
947 { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
948 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
|
949 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
950 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
951 PyBuffer_Release(&vbuf); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
952 return 0; |
|
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 else { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
955 PyErr_SetString(PyExc_TypeError, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
956 "mmap indices must be integer"); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
957 return -1; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
958 } |
|
42954
27f0289b6835
Merge the trunk changes in. Breaks socket.ssl for now.
Thomas Wouters <thomas@python.org>
parents:
42665
diff
changeset
|
959 } |
|
27f0289b6835
Merge the trunk changes in. Breaks socket.ssl for now.
Thomas Wouters <thomas@python.org>
parents:
42665
diff
changeset
|
960 |
|
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
|
961 static PySequenceMethods mmap_as_sequence = { |
| 75457 | 962 (lenfunc)mmap_length, /*sq_length*/ |
| 963 (binaryfunc)mmap_concat, /*sq_concat*/ | |
| 964 (ssizeargfunc)mmap_repeat, /*sq_repeat*/ | |
| 965 (ssizeargfunc)mmap_item, /*sq_item*/ | |
| 966 0, /*sq_slice*/ | |
| 967 (ssizeobjargproc)mmap_ass_item, /*sq_ass_item*/ | |
| 968 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
|
969 }; |
|
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
|
970 |
|
42954
27f0289b6835
Merge the trunk changes in. Breaks socket.ssl for now.
Thomas Wouters <thomas@python.org>
parents:
42665
diff
changeset
|
971 static PyMappingMethods mmap_as_mapping = { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
972 (lenfunc)mmap_length, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
973 (binaryfunc)mmap_subscript, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
974 (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
|
975 }; |
|
27f0289b6835
Merge the trunk changes in. Breaks socket.ssl for now.
Thomas Wouters <thomas@python.org>
parents:
42665
diff
changeset
|
976 |
|
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
|
977 static PyBufferProcs mmap_as_buffer = { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
978 (getbufferproc)mmap_buffer_getbuf, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
979 (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
|
980 }; |
|
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 |
|
44859
feba5d5cac22
Merged revisions 60151-60159,60161-60168,60170,60172-60173,60175 via svnmerge from
Georg Brandl <georg@python.org>
parents:
44834
diff
changeset
|
982 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
|
983 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
|
984 |
|
44834
ed33da2e74e7
Merged revisions 60143-60149 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44782
diff
changeset
|
985 PyDoc_STRVAR(mmap_doc, |
|
ed33da2e74e7
Merged revisions 60143-60149 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44782
diff
changeset
|
986 "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
|
987 \n\ |
|
ed33da2e74e7
Merged revisions 60143-60149 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44782
diff
changeset
|
988 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
|
989 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
|
990 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
|
991 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
|
992 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
|
993 create an empty mapping on Windows).\n\ |
|
ed33da2e74e7
Merged revisions 60143-60149 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44782
diff
changeset
|
994 \n\ |
|
ed33da2e74e7
Merged revisions 60143-60149 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44782
diff
changeset
|
995 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
|
996 \n\ |
|
ed33da2e74e7
Merged revisions 60143-60149 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44782
diff
changeset
|
997 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
|
998 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
|
999 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
|
1000 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
|
1001 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
|
1002 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
|
1003 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
|
1004 The default value is MAP_SHARED.\n\ |
|
ed33da2e74e7
Merged revisions 60143-60149 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44782
diff
changeset
|
1005 \n\ |
|
ed33da2e74e7
Merged revisions 60143-60149 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44782
diff
changeset
|
1006 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
|
1007 |
|
ed33da2e74e7
Merged revisions 60143-60149 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44782
diff
changeset
|
1008 |
|
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
|
1009 static PyTypeObject mmap_object_type = { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1010 PyVarObject_HEAD_INIT(NULL, 0) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1011 "mmap.mmap", /* tp_name */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1012 sizeof(mmap_object), /* tp_size */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1013 0, /* tp_itemsize */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1014 /* methods */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1015 (destructor) mmap_object_dealloc, /* tp_dealloc */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1016 0, /* tp_print */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1017 0, /* tp_getattr */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1018 0, /* tp_setattr */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1019 0, /* tp_reserved */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1020 0, /* tp_repr */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1021 0, /* tp_as_number */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1022 &mmap_as_sequence, /*tp_as_sequence*/ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1023 &mmap_as_mapping, /*tp_as_mapping*/ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1024 0, /*tp_hash*/ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1025 0, /*tp_call*/ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1026 0, /*tp_str*/ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1027 PyObject_GenericGetAttr, /*tp_getattro*/ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1028 0, /*tp_setattro*/ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1029 &mmap_as_buffer, /*tp_as_buffer*/ |
| 75457 | 1030 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
|
1031 mmap_doc, /*tp_doc*/ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1032 0, /* tp_traverse */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1033 0, /* tp_clear */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1034 0, /* tp_richcompare */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1035 0, /* tp_weaklistoffset */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1036 0, /* tp_iter */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1037 0, /* tp_iternext */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1038 mmap_object_methods, /* tp_methods */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1039 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
|
1040 mmap_object_getset, /* tp_getset */ |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1041 0, /* tp_base */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1042 0, /* tp_dict */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1043 0, /* tp_descr_get */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1044 0, /* tp_descr_set */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1045 0, /* tp_dictoffset */ |
| 75457 | 1046 0, /* tp_init */ |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1047 PyType_GenericAlloc, /* tp_alloc */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1048 new_mmap_object, /* tp_new */ |
| 75457 | 1049 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
|
1050 }; |
|
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
|
1051 |
| 12945 | 1052 |
| 1053 /* extract the map size from the given PyObject | |
| 1054 | |
|
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
|
1055 Returns -1 on error, with an appropriate Python exception raised. On |
| 12945 | 1056 success, the map size is returned. */ |
|
36541
f7f0d2a5b20b
Remove size restrictions.
Martin v. Löwis <martin@v.loewis.de>
parents:
36540
diff
changeset
|
1057 static Py_ssize_t |
|
43734
3e5edf19d5f0
Merged revisions 58221-58741 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
43423
diff
changeset
|
1058 _GetMapSize(PyObject *o, const char* param) |
| 12945 | 1059 { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1060 if (o == NULL) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1061 return 0; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1062 if (PyIndex_Check(o)) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1063 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
|
1064 if (i==-1 && PyErr_Occurred()) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1065 return -1; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1066 if (i < 0) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1067 PyErr_Format(PyExc_OverflowError, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1068 "memory mapped %s must be positive", |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1069 param); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1070 return -1; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1071 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1072 return i; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1073 } |
| 12945 | 1074 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1075 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
|
1076 return -1; |
| 12945 | 1077 } |
| 1078 | |
|
36537
fdabdf148336
Trimmed trailing whitespace.
Tim Peters <tim.peters@gmail.com>
parents:
36536
diff
changeset
|
1079 #ifdef UNIX |
|
68054
f8a77fd675f5
Merged revisions 88460,88464,88466,88486,88511,88652 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67707
diff
changeset
|
1080 #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
|
1081 #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
|
1082 #else |
|
f8a77fd675f5
Merged revisions 88460,88464,88466,88486,88511,88652 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67707
diff
changeset
|
1083 #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
|
1084 #endif |
|
f8a77fd675f5
Merged revisions 88460,88464,88466,88486,88511,88652 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67707
diff
changeset
|
1085 |
|
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
|
1086 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
|
1087 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
|
1088 { |
|
25130
368bc3a4919e
SF bug # 585792, Invalid mmap crashes Python interpreter
Neal Norwitz <nnorwitz@gmail.com>
parents:
24363
diff
changeset
|
1089 #ifdef HAVE_FSTAT |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1090 struct stat st; |
|
25130
368bc3a4919e
SF bug # 585792, Invalid mmap crashes Python interpreter
Neal Norwitz <nnorwitz@gmail.com>
parents:
24363
diff
changeset
|
1091 #endif |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1092 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
|
1093 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
|
1094 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
|
1095 off_t offset = 0; |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1096 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
|
1097 int devzero = -1; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1098 int access = (int)ACCESS_DEFAULT; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1099 static char *keywords[] = {"fileno", "length", |
| 75457 | 1100 "flags", "prot", |
| 1101 "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
|
1102 |
|
68054
f8a77fd675f5
Merged revisions 88460,88464,88466,88486,88511,88652 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67707
diff
changeset
|
1103 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
|
1104 &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
|
1105 &access, &offset)) |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1106 return NULL; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1107 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
|
1108 if (map_size < 0) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1109 return NULL; |
|
68054
f8a77fd675f5
Merged revisions 88460,88464,88466,88486,88511,88652 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67707
diff
changeset
|
1110 if (offset < 0) { |
|
f8a77fd675f5
Merged revisions 88460,88464,88466,88486,88511,88652 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67707
diff
changeset
|
1111 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
|
1112 "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
|
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 } |
|
20970
e167b82c6444
CVS patch #477161: New "access" keyword for mmap, from Jay T Miller.
Tim Peters <tim.peters@gmail.com>
parents:
20888
diff
changeset
|
1115 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1116 if ((access != (int)ACCESS_DEFAULT) && |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1117 ((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
|
1118 return PyErr_Format(PyExc_ValueError, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1119 "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
|
1120 switch ((access_mode)access) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1121 case ACCESS_READ: |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1122 flags = MAP_SHARED; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1123 prot = PROT_READ; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1124 break; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1125 case ACCESS_WRITE: |
|
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 | PROT_WRITE; |
|
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_COPY: |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1130 flags = MAP_PRIVATE; |
|
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_DEFAULT: |
|
68268
97a5590b9291
Issue #11391: Writing to a mmap object created with
Antoine Pitrou <solipsis@pitrou.net>
parents:
68054
diff
changeset
|
1134 /* map prot to access type */ |
|
97a5590b9291
Issue #11391: Writing to a mmap object created with
Antoine Pitrou <solipsis@pitrou.net>
parents:
68054
diff
changeset
|
1135 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
|
1136 /* ACCESS_DEFAULT */ |
|
97a5590b9291
Issue #11391: Writing to a mmap object created with
Antoine Pitrou <solipsis@pitrou.net>
parents:
68054
diff
changeset
|
1137 } |
|
97a5590b9291
Issue #11391: Writing to a mmap object created with
Antoine Pitrou <solipsis@pitrou.net>
parents:
68054
diff
changeset
|
1138 else if (prot & PROT_WRITE) { |
|
97a5590b9291
Issue #11391: Writing to a mmap object created with
Antoine Pitrou <solipsis@pitrou.net>
parents:
68054
diff
changeset
|
1139 access = ACCESS_WRITE; |
|
97a5590b9291
Issue #11391: Writing to a mmap object created with
Antoine Pitrou <solipsis@pitrou.net>
parents:
68054
diff
changeset
|
1140 } |
|
97a5590b9291
Issue #11391: Writing to a mmap object created with
Antoine Pitrou <solipsis@pitrou.net>
parents:
68054
diff
changeset
|
1141 else { |
|
97a5590b9291
Issue #11391: Writing to a mmap object created with
Antoine Pitrou <solipsis@pitrou.net>
parents:
68054
diff
changeset
|
1142 access = ACCESS_READ; |
|
97a5590b9291
Issue #11391: Writing to a mmap object created with
Antoine Pitrou <solipsis@pitrou.net>
parents:
68054
diff
changeset
|
1143 } |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1144 break; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1145 default: |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1146 return PyErr_Format(PyExc_ValueError, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1147 "mmap invalid access parameter."); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1148 } |
|
25130
368bc3a4919e
SF bug # 585792, Invalid mmap crashes Python interpreter
Neal Norwitz <nnorwitz@gmail.com>
parents:
24363
diff
changeset
|
1149 |
|
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
|
1150 #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
|
1151 /* 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
|
1152 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
|
1153 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
|
1154 (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
|
1155 #endif |
|
25130
368bc3a4919e
SF bug # 585792, Invalid mmap crashes Python interpreter
Neal Norwitz <nnorwitz@gmail.com>
parents:
24363
diff
changeset
|
1156 #ifdef HAVE_FSTAT |
|
28949
ac487a7f7f2c
Patch #708495: Port more stuff to OpenVMS.
Martin v. Löwis <martin@v.loewis.de>
parents:
28558
diff
changeset
|
1157 # ifdef __VMS |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1158 /* 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
|
1159 if (fd != -1) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1160 fsync(fd); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1161 } |
|
28949
ac487a7f7f2c
Patch #708495: Port more stuff to OpenVMS.
Martin v. Löwis <martin@v.loewis.de>
parents:
28558
diff
changeset
|
1162 # endif |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1163 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
|
1164 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
|
1165 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
|
1166 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
|
1167 "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
|
1168 return NULL; |
|
d85f80b31b54
Closes #15676: mmap: add empty file check prior to offset check
Jesus Cea <jcea@jcea.es>
parents:
70945
diff
changeset
|
1169 } |
|
67707
f36538ba90a8
Merged revisions 88131 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67623
diff
changeset
|
1170 if (offset >= st.st_size) { |
|
f36538ba90a8
Merged revisions 88131 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67623
diff
changeset
|
1171 PyErr_SetString(PyExc_ValueError, |
|
f36538ba90a8
Merged revisions 88131 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67623
diff
changeset
|
1172 "mmap offset is greater than file size"); |
|
f36538ba90a8
Merged revisions 88131 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67623
diff
changeset
|
1173 return NULL; |
|
f36538ba90a8
Merged revisions 88131 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67623
diff
changeset
|
1174 } |
|
82199
c2c84d3ab393
Issue #16743: Fix mmap overflow check on 32 bit Windows
Richard Oudkerk <shibturn@gmail.com>
parents:
78980
diff
changeset
|
1175 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
|
1176 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
|
1177 "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
|
1178 return NULL; |
|
c2c84d3ab393
Issue #16743: Fix mmap overflow check on 32 bit Windows
Richard Oudkerk <shibturn@gmail.com>
parents:
78980
diff
changeset
|
1179 } |
|
c2c84d3ab393
Issue #16743: Fix mmap overflow check on 32 bit Windows
Richard Oudkerk <shibturn@gmail.com>
parents:
78980
diff
changeset
|
1180 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
|
1181 } 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
|
1182 PyErr_SetString(PyExc_ValueError, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1183 "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
|
1184 return NULL; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1185 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1186 } |
|
25130
368bc3a4919e
SF bug # 585792, Invalid mmap crashes Python interpreter
Neal Norwitz <nnorwitz@gmail.com>
parents:
24363
diff
changeset
|
1187 #endif |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1188 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
|
1189 if (m_obj == NULL) {return NULL;} |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1190 m_obj->data = NULL; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1191 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
|
1192 m_obj->pos = (size_t) 0; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1193 m_obj->exports = 0; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1194 m_obj->offset = offset; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1195 if (fd == -1) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1196 m_obj->fd = -1; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1197 /* 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
|
1198 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
|
1199 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
|
1200 */ |
|
36446
02f0744a9cd0
Patch #1407135, bug #1424041, make mmap.mmap(-1, length) work the same
Neal Norwitz <nnorwitz@gmail.com>
parents:
36445
diff
changeset
|
1201 #ifdef MAP_ANONYMOUS |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1202 /* BSD way to map anonymous memory */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1203 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
|
1204 #else |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1205 /* SVR4 method to map anonymous memory is to open /dev/zero */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1206 fd = devzero = open("/dev/zero", O_RDWR); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1207 if (devzero == -1) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1208 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
|
1209 PyErr_SetFromErrno(PyExc_OSError); |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1210 return NULL; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1211 } |
|
36446
02f0744a9cd0
Patch #1407135, bug #1424041, make mmap.mmap(-1, length) work the same
Neal Norwitz <nnorwitz@gmail.com>
parents:
36445
diff
changeset
|
1212 #endif |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1213 } else { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1214 m_obj->fd = dup(fd); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1215 if (m_obj->fd == -1) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1216 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
|
1217 PyErr_SetFromErrno(PyExc_OSError); |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1218 return NULL; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1219 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1220 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1221 |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1222 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
|
1223 prot, flags, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1224 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
|
1225 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1226 if (devzero != -1) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1227 close(devzero); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1228 } |
|
36446
02f0744a9cd0
Patch #1407135, bug #1424041, make mmap.mmap(-1, length) work the same
Neal Norwitz <nnorwitz@gmail.com>
parents:
36445
diff
changeset
|
1229 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1230 if (m_obj->data == (char *)-1) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1231 m_obj->data = NULL; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1232 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
|
1233 PyErr_SetFromErrno(PyExc_OSError); |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1234 return NULL; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1235 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1236 m_obj->access = (access_mode)access; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1237 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
|
1238 } |
|
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
|
1239 #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
|
1240 |
|
24071
8142f8d668a0
Patch #569753: Remove support for WIN16.
Martin v. Löwis <martin@v.loewis.de>
parents:
22177
diff
changeset
|
1241 #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
|
1242 |
|
f8a77fd675f5
Merged revisions 88460,88464,88466,88486,88511,88652 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67707
diff
changeset
|
1243 /* 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
|
1244 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
|
1245 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
|
1246 */ |
|
f8a77fd675f5
Merged revisions 88460,88464,88466,88486,88511,88652 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67707
diff
changeset
|
1247 |
|
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
|
1248 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
|
1249 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
|
1250 { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1251 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
|
1252 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
|
1253 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
|
1254 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
|
1255 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
|
1256 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
|
1257 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
|
1258 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
|
1259 char *tagname = ""; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1260 DWORD dwErr = 0; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1261 int fileno; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1262 HANDLE fh = 0; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1263 int access = (access_mode)ACCESS_DEFAULT; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1264 DWORD flProtect, dwDesiredAccess; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1265 static char *keywords[] = { "fileno", "length", |
| 75457 | 1266 "tagname", |
| 1267 "access", "offset", NULL }; | |
|
12146
e8c30e69666b
Hacked for Win32 by Mark Hammond.
Guido van Rossum <guido@python.org>
parents:
12120
diff
changeset
|
1268 |
|
68054
f8a77fd675f5
Merged revisions 88460,88464,88466,88486,88511,88652 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67707
diff
changeset
|
1269 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
|
1270 &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
|
1271 &tagname, &access, &offset)) { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1272 return NULL; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1273 } |
|
20970
e167b82c6444
CVS patch #477161: New "access" keyword for mmap, from Jay T Miller.
Tim Peters <tim.peters@gmail.com>
parents:
20888
diff
changeset
|
1274 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1275 switch((access_mode)access) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1276 case ACCESS_READ: |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1277 flProtect = PAGE_READONLY; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1278 dwDesiredAccess = FILE_MAP_READ; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1279 break; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1280 case ACCESS_DEFAULT: case ACCESS_WRITE: |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1281 flProtect = PAGE_READWRITE; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1282 dwDesiredAccess = FILE_MAP_WRITE; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1283 break; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1284 case ACCESS_COPY: |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1285 flProtect = PAGE_WRITECOPY; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1286 dwDesiredAccess = FILE_MAP_COPY; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1287 break; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1288 default: |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1289 return PyErr_Format(PyExc_ValueError, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1290 "mmap invalid access parameter."); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1291 } |
|
20970
e167b82c6444
CVS patch #477161: New "access" keyword for mmap, from Jay T Miller.
Tim Peters <tim.peters@gmail.com>
parents:
20888
diff
changeset
|
1292 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1293 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
|
1294 if (map_size < 0) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1295 return NULL; |
|
68054
f8a77fd675f5
Merged revisions 88460,88464,88466,88486,88511,88652 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67707
diff
changeset
|
1296 if (offset < 0) { |
|
f8a77fd675f5
Merged revisions 88460,88464,88466,88486,88511,88652 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67707
diff
changeset
|
1297 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
|
1298 "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
|
1299 return NULL; |
|
68054
f8a77fd675f5
Merged revisions 88460,88464,88466,88486,88511,88652 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67707
diff
changeset
|
1300 } |
|
36537
fdabdf148336
Trimmed trailing whitespace.
Tim Peters <tim.peters@gmail.com>
parents:
36536
diff
changeset
|
1301 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1302 /* 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
|
1303 to 'anonymously' map memory. |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1304 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
|
1305 XXX: Should this code be added? |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1306 if (fileno == 0) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1307 PyErr_WarnEx(PyExc_DeprecationWarning, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1308 "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
|
1309 1); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1310 */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1311 if (fileno != -1 && fileno != 0) { |
|
63425
0be5504213d3
Merged revisions 83407 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents:
61466
diff
changeset
|
1312 /* 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
|
1313 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
|
1314 PyErr_SetFromErrno(PyExc_OSError); |
|
63425
0be5504213d3
Merged revisions 83407 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents:
61466
diff
changeset
|
1315 return NULL; |
|
0be5504213d3
Merged revisions 83407 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents:
61466
diff
changeset
|
1316 } |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1317 fh = (HANDLE)_get_osfhandle(fileno); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1318 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
|
1319 PyErr_SetFromErrno(PyExc_OSError); |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1320 return NULL; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1321 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1322 /* 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
|
1323 lseek(fileno, 0, SEEK_SET); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1324 } |
|
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
|
1325 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1326 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
|
1327 if (m_obj == NULL) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1328 return NULL; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1329 /* 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
|
1330 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
|
1331 m_obj->data = NULL; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1332 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
|
1333 m_obj->map_handle = NULL; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1334 m_obj->tagname = NULL; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1335 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
|
1336 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1337 if (fh) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1338 /* 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
|
1339 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
|
1340 if (!DuplicateHandle( |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1341 GetCurrentProcess(), /* source process handle */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1342 fh, /* handle to be duplicated */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1343 GetCurrentProcess(), /* target proc handle */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1344 (LPHANDLE)&m_obj->file_handle, /* result */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1345 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
|
1346 FALSE, /* inherited by child processes? */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1347 DUPLICATE_SAME_ACCESS)) { /* options */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1348 dwErr = GetLastError(); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1349 Py_DECREF(m_obj); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1350 PyErr_SetFromWindowsErr(dwErr); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1351 return NULL; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1352 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1353 if (!map_size) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1354 DWORD low,high; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1355 low = GetFileSize(fh, &high); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1356 /* 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
|
1357 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
|
1358 if (low == INVALID_FILE_SIZE && |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1359 (dwErr = GetLastError()) != NO_ERROR) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1360 Py_DECREF(m_obj); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1361 return PyErr_SetFromWindowsErr(dwErr); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1362 } |
|
43777
0d462d789b18
Merging the py3k-pep3137 branch back into the py3k branch.
Guido van Rossum <guido@python.org>
parents:
43734
diff
changeset
|
1363 |
|
68054
f8a77fd675f5
Merged revisions 88460,88464,88466,88486,88511,88652 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67707
diff
changeset
|
1364 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
|
1365 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
|
1366 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
|
1367 "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
|
1368 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
|
1369 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
|
1370 } |
|
68054
f8a77fd675f5
Merged revisions 88460,88464,88466,88486,88511,88652 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67707
diff
changeset
|
1371 if (offset >= size) { |
|
67707
f36538ba90a8
Merged revisions 88131 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67623
diff
changeset
|
1372 PyErr_SetString(PyExc_ValueError, |
|
f36538ba90a8
Merged revisions 88131 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67623
diff
changeset
|
1373 "mmap offset is greater than file size"); |
|
f36538ba90a8
Merged revisions 88131 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67623
diff
changeset
|
1374 Py_DECREF(m_obj); |
|
f36538ba90a8
Merged revisions 88131 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67623
diff
changeset
|
1375 return NULL; |
|
f36538ba90a8
Merged revisions 88131 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67623
diff
changeset
|
1376 } |
|
82199
c2c84d3ab393
Issue #16743: Fix mmap overflow check on 32 bit Windows
Richard Oudkerk <shibturn@gmail.com>
parents:
78980
diff
changeset
|
1377 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
|
1378 PyErr_SetString(PyExc_ValueError, |
|
c2c84d3ab393
Issue #16743: Fix mmap overflow check on 32 bit Windows
Richard Oudkerk <shibturn@gmail.com>
parents:
78980
diff
changeset
|
1379 "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
|
1380 Py_DECREF(m_obj); |
|
c2c84d3ab393
Issue #16743: Fix mmap overflow check on 32 bit Windows
Richard Oudkerk <shibturn@gmail.com>
parents:
78980
diff
changeset
|
1381 return NULL; |
|
c2c84d3ab393
Issue #16743: Fix mmap overflow check on 32 bit Windows
Richard Oudkerk <shibturn@gmail.com>
parents:
78980
diff
changeset
|
1382 } |
|
c2c84d3ab393
Issue #16743: Fix mmap overflow check on 32 bit Windows
Richard Oudkerk <shibturn@gmail.com>
parents:
78980
diff
changeset
|
1383 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
|
1384 } else { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1385 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
|
1386 size = offset + map_size; |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1387 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1388 } |
|
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 } |
|
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
|
1393 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1394 /* set the initial position */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1395 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
|
1396 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1397 m_obj->exports = 0; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1398 /* set the tag name */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1399 if (tagname != NULL && *tagname != '\0') { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1400 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
|
1401 if (m_obj->tagname == NULL) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1402 PyErr_NoMemory(); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1403 Py_DECREF(m_obj); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1404 return NULL; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1405 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1406 strcpy(m_obj->tagname, tagname); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1407 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1408 else |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1409 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
|
1410 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1411 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
|
1412 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
|
1413 size_lo = (DWORD)(size & 0xFFFFFFFF); |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1414 off_hi = (DWORD)(offset >> 32); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1415 off_lo = (DWORD)(offset & 0xFFFFFFFF); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1416 /* 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
|
1417 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
|
1418 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
|
1419 NULL, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1420 flProtect, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1421 size_hi, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1422 size_lo, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1423 m_obj->tagname); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1424 if (m_obj->map_handle != NULL) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1425 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
|
1426 dwDesiredAccess, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1427 off_hi, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1428 off_lo, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1429 m_obj->size); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1430 if (m_obj->data != NULL) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1431 return (PyObject *)m_obj; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1432 else { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1433 dwErr = GetLastError(); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1434 CloseHandle(m_obj->map_handle); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1435 m_obj->map_handle = NULL; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1436 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1437 } else |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1438 dwErr = GetLastError(); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1439 Py_DECREF(m_obj); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1440 PyErr_SetFromWindowsErr(dwErr); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1441 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
|
1442 } |
|
24071
8142f8d668a0
Patch #569753: Remove support for WIN16.
Martin v. Löwis <martin@v.loewis.de>
parents:
22177
diff
changeset
|
1443 #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
|
1444 |
|
39610
3674f20ac781
Merge current trunk into p3yk. This includes the PyNumber_Index API change,
Thomas Wouters <thomas@python.org>
parents:
39442
diff
changeset
|
1445 static void |
|
3674f20ac781
Merge current trunk into p3yk. This includes the PyNumber_Index API change,
Thomas Wouters <thomas@python.org>
parents:
39442
diff
changeset
|
1446 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
|
1447 { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1448 PyObject *o = PyLong_FromLong(value); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1449 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
|
1450 Py_DECREF(o); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1451 } |
|
39610
3674f20ac781
Merge current trunk into p3yk. This includes the PyNumber_Index API change,
Thomas Wouters <thomas@python.org>
parents:
39442
diff
changeset
|
1452 } |
|
3674f20ac781
Merge current trunk into p3yk. This includes the PyNumber_Index API change,
Thomas Wouters <thomas@python.org>
parents:
39442
diff
changeset
|
1453 |
|
47580
94f64f11fdd0
Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents:
47301
diff
changeset
|
1454 |
|
94f64f11fdd0
Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents:
47301
diff
changeset
|
1455 static struct PyModuleDef mmapmodule = { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1456 PyModuleDef_HEAD_INIT, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1457 "mmap", |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1458 NULL, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1459 -1, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1460 NULL, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1461 NULL, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1462 NULL, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1463 NULL, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1464 NULL |
|
47580
94f64f11fdd0
Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents:
47301
diff
changeset
|
1465 }; |
|
94f64f11fdd0
Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents:
47301
diff
changeset
|
1466 |
|
24363
979ff5d0ae07
Replace DL_IMPORT with PyMODINIT_FUNC and remove "/export:init..." link
Mark Hammond <mhammond@skippinet.com.au>
parents:
24071
diff
changeset
|
1467 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
|
1468 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
|
1469 { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1470 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
|
1471 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1472 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
|
1473 return NULL; |
|
15851
a3c1a234cee7
SF bug 128713: type(mmap_object) blew up on Linux.
Tim Peters <tim.peters@gmail.com>
parents:
15803
diff
changeset
|
1474 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1475 module = PyModule_Create(&mmapmodule); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1476 if (module == NULL) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1477 return NULL; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1478 dict = PyModule_GetDict(module); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1479 if (!dict) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1480 return NULL; |
|
72879
41a1de81ef2b
PEP 3151 / issue #12555: reworking the OS and IO exception hierarchy.
Antoine Pitrou <solipsis@pitrou.net>
parents:
72835
diff
changeset
|
1481 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
|
1482 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
|
1483 #ifdef PROT_EXEC |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1484 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
|
1485 #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
|
1486 #ifdef PROT_READ |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1487 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
|
1488 #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
|
1489 #ifdef PROT_WRITE |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1490 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
|
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 |
|
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
|
1493 #ifdef MAP_SHARED |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1494 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
|
1495 #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
|
1496 #ifdef MAP_PRIVATE |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1497 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
|
1498 #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
|
1499 #ifdef MAP_DENYWRITE |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1500 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
|
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_EXECUTABLE |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1503 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
|
1504 #endif |
|
36446
02f0744a9cd0
Patch #1407135, bug #1424041, make mmap.mmap(-1, length) work the same
Neal Norwitz <nnorwitz@gmail.com>
parents:
36445
diff
changeset
|
1505 #ifdef MAP_ANONYMOUS |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1506 setint(dict, "MAP_ANON", MAP_ANONYMOUS); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1507 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
|
1508 #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
|
1509 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1510 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
|
1511 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1512 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
|
1513 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1514 setint(dict, "ACCESS_READ", ACCESS_READ); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1515 setint(dict, "ACCESS_WRITE", ACCESS_WRITE); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1516 setint(dict, "ACCESS_COPY", ACCESS_COPY); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54974
diff
changeset
|
1517 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
|
1518 } |
