|
|
1 | /* |
|
|
2 | * Copyright (c) 2012 Marc Alexander Lehmann <schmorp@schmorp.de> |
|
|
3 | * |
|
|
4 | * Redistribution and use in source and binary forms, with or without modifica- |
|
|
5 | * tion, are permitted provided that the following conditions are met: |
|
|
6 | * |
|
|
7 | * 1. Redistributions of source code must retain the above copyright notice, |
|
|
8 | * this list of conditions and the following disclaimer. |
|
|
9 | * |
|
|
10 | * 2. Redistributions in binary form must reproduce the above copyright |
|
|
11 | * notice, this list of conditions and the following disclaimer in the |
|
|
12 | * documentation and/or other materials provided with the distribution. |
|
|
13 | * |
|
|
14 | * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED |
|
|
15 | * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MER- |
|
|
16 | * CHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO |
|
|
17 | * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPE- |
|
|
18 | * CIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, |
|
|
19 | * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; |
|
|
20 | * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, |
|
|
21 | * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTH- |
|
|
22 | * ERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED |
|
|
23 | * OF THE POSSIBILITY OF SUCH DAMAGE. |
|
|
24 | * |
|
|
25 | * Alternatively, the contents of this file may be used under the terms of |
|
|
26 | * the GNU General Public License ("GPL") version 2 or any later version, |
|
|
27 | * in which case the provisions of the GPL are applicable instead of |
|
|
28 | * the above. If you wish to allow the use of your version of this file |
|
|
29 | * only under the terms of the GPL and not to allow others to use your |
|
|
30 | * version of this file under the BSD license, indicate your decision |
|
|
31 | * by deleting the provisions above and replace them with the notice |
|
|
32 | * and other provisions required by the GPL. If you do not delete the |
|
|
33 | * provisions above, a recipient may use your version of this file under |
|
|
34 | * either the BSD or the GPL. |
|
|
35 | */ |
|
|
36 | |
1 | #include "urlib.h" |
37 | #include "urlib.h" |
2 | |
38 | |
3 | #include <fcntl.h> |
39 | #include <fcntl.h> |
4 | #include <stdio.h> |
40 | #include <stdio.h> |
5 | #include <string.h> |
41 | #include <string.h> |
… | |
… | |
21 | |
57 | |
22 | #define u_setenv(name,value) SetEnvironmentVariable (name, value) |
58 | #define u_setenv(name,value) SetEnvironmentVariable (name, value) |
23 | #define u_mkdir(path) !CreateDirectory (path, NULL) |
59 | #define u_mkdir(path) !CreateDirectory (path, NULL) |
24 | #define u_chdir(path) !SetCurrentDirectory (path) |
60 | #define u_chdir(path) !SetCurrentDirectory (path) |
25 | #define u_rename(fr,to) !MoveFile (fr, to) |
61 | #define u_rename(fr,to) !MoveFile (fr, to) |
26 | #define u_open(path) CreateFile (path, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_SEQUENTIAL_SCAN, NULL) |
62 | #define u_open(path) CreateFile (path, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_DELETE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_SEQUENTIAL_SCAN, NULL) |
27 | #define u_creat(path,exec) CreateFile (path, GENERIC_WRITE, FILE_SHARE_WRITE, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_SEQUENTIAL_SCAN, NULL) |
63 | #define u_creat(path,exec) CreateFile (path, GENERIC_WRITE, FILE_SHARE_WRITE, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_SEQUENTIAL_SCAN, NULL) |
28 | #define u_creat(path,exec) CreateFile (path, GENERIC_WRITE, FILE_SHARE_WRITE, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_SEQUENTIAL_SCAN, NULL) |
64 | #define u_creat(path,exec) CreateFile (path, GENERIC_WRITE, FILE_SHARE_WRITE, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_SEQUENTIAL_SCAN, NULL) |
29 | #define u_close(handle) CloseHandle (handle) |
65 | #define u_close(handle) CloseHandle (handle) |
30 | #define u_append(path,add) PathAppend (path, add) |
66 | #define u_append(path,add) PathAppend (path, add) |
31 | #define u_write(handle,data,len) (WriteFile (handle, data, len, &dword, 0) ? dword : -1) |
67 | #define u_write(handle,data,len) (WriteFile (handle, data, len, &dword, 0) ? dword : -1) |
32 | |
68 | |
33 | #define u_fsync(handle) FlushFileBuffers (handle) |
69 | #define u_fsync(handle) FlushFileBuffers (handle) |
34 | #define u_sync() |
70 | #define u_sync() |
35 | |
71 | |
36 | #define u_lockfile(path) CreateFile (path, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL) |
72 | #define u_lockfile(path) CreateFile (path, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL) |
37 | #define u_cloexec(handle) |
73 | #define u_cloexec(handle) |
38 | |
74 | |
39 | #else |
75 | #else |
40 | |
76 | |
41 | #define _GNU_SOURCE 1 |
77 | #define _GNU_SOURCE 1 |
… | |
… | |
114 | |
150 | |
115 | if (!size) |
151 | if (!size) |
116 | return 0; |
152 | return 0; |
117 | |
153 | |
118 | #ifdef _WIN32 |
154 | #ifdef _WIN32 |
|
|
155 | { |
119 | HANDLE handle = CreateFileMapping (0, 0, PAGE_READWRITE, 0, size, NULL); |
156 | HANDLE handle = CreateFileMapping (0, 0, PAGE_READWRITE, 0, size, NULL); |
120 | |
157 | |
121 | addr = 0; |
158 | addr = 0; |
122 | if (handle) |
159 | if (handle) |
123 | { |
160 | { |
124 | addr = MapViewOfFile (handle, FILE_MAP_WRITE, 0, 0, size); |
161 | addr = MapViewOfFile (handle, FILE_MAP_WRITE, 0, 0, size); |
125 | CloseHandle (handle); |
162 | CloseHandle (handle); |
126 | } |
163 | } |
|
|
164 | } |
127 | #elif defined (MAP_ANONYMOUS) |
165 | #elif defined (MAP_ANONYMOUS) |
128 | addr = mmap (0, size, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANON, -1, 0); |
166 | addr = mmap (0, size, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANON, -1, 0); |
129 | |
167 | |
130 | if (addr == (void *)-1) |
168 | if (addr == (void *)-1) |
131 | addr = 0; |
169 | addr = 0; |