ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/Urlader/urlib.c
(Generate patch)

Comparing Urlader/urlib.c (file contents):
Revision 1.2 by root, Mon Jan 2 09:23:04 2012 UTC vs.
Revision 1.5 by root, Mon Jan 9 14:13:54 2012 UTC

21 21
22 #define u_setenv(name,value) SetEnvironmentVariable (name, value) 22 #define u_setenv(name,value) SetEnvironmentVariable (name, value)
23 #define u_mkdir(path) !CreateDirectory (path, NULL) 23 #define u_mkdir(path) !CreateDirectory (path, NULL)
24 #define u_chdir(path) !SetCurrentDirectory (path) 24 #define u_chdir(path) !SetCurrentDirectory (path)
25 #define u_rename(fr,to) !MoveFile (fr, to) 25 #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) 26 #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) 27 #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) 28 #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) 29 #define u_close(handle) CloseHandle (handle)
30 #define u_append(path,add) PathAppend (path, add) 30 #define u_append(path,add) PathAppend (path, add)
31 #define u_write(handle,data,len) (WriteFile (handle, data, len, &dword, 0) ? dword : -1) 31 #define u_write(handle,data,len) (WriteFile (handle, data, len, &dword, 0) ? dword : -1)
32 32
33 #define u_fsync(handle) FlushFileBuffers (handle) 33 #define u_fsync(handle) FlushFileBuffers (handle)
34 #define u_sync() 34 #define u_sync()
35 35
36 #define u_lockfile(path) CreateFile (path, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL) 36 #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) 37 #define u_cloexec(handle)
38 38
39#else 39#else
40 40
41 #define _GNU_SOURCE 1 41 #define _GNU_SOURCE 1
110static void * 110static void *
111u_malloc (unsigned int size) 111u_malloc (unsigned int size)
112{ 112{
113 void *addr; 113 void *addr;
114 114
115#ifdef _WIN32 115 if (!size)
116 HANDLE handle = CreateFileMapping (0, 0, PAGE_READWRITE, 0, size, NULL);
117
118 if (!handle)
119 return 0; 116 return 0;
120 117
118#ifdef _WIN32
119 {
120 HANDLE handle = CreateFileMapping (0, 0, PAGE_READWRITE, 0, size, NULL);
121
122 addr = 0;
123 if (handle)
124 {
121 addr = MapViewOfFile (handle, FILE_MAP_WRITE, 0, 0, size); 125 addr = MapViewOfFile (handle, FILE_MAP_WRITE, 0, 0, size);
122
123 CloseHandle (handle); 126 CloseHandle (handle);
127 }
128 }
124#elif defined (MAP_ANONYMOUS) 129#elif defined (MAP_ANONYMOUS)
125 addr = mmap (0, size, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANON, -1, 0); 130 addr = mmap (0, size, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANON, -1, 0);
126 131
127 if (addr == (void *)-1) 132 if (addr == (void *)-1)
128 addr = 0; 133 addr = 0;
129#else 134#else
130 addr = malloc (size); 135 addr = malloc (size);
131#endif 136#endif
132 137
138 if (!addr)
139 u_fatal ("memory allocation failure, aborting.");
140
133 return addr; 141 return addr;
134} 142}
135 143
136static void 144static void
137u_free (void *addr, unsigned int size) 145u_free (void *addr, unsigned int size)
138{ 146{
147 if (!addr)
148 return;
149
139#ifdef _WIN32 150#ifdef _WIN32
140 UnmapViewOfFile (addr); 151 UnmapViewOfFile (addr);
141#elif defined (MAP_ANONYMOUS) 152#elif defined (MAP_ANONYMOUS)
142 munmap (addr, size); 153 munmap (addr, size);
143#else 154#else
144 free (addr); 155 free (addr);
145#endif 156#endif
146} 157}
147 158
148static void * 159static void *
160u_realloc (void *addr, unsigned int old_size, unsigned int new_size)
161{
162 void *addr2 = u_malloc (new_size);
163 memcpy (addr2, addr, (new_size < old_size ? new_size : old_size));
164 u_free (addr, old_size);
165
166 return addr2;
167}
168
169static void *
149u_mmap (u_handle h, unsigned int size) 170u_mmap (u_handle h, unsigned int size)
150{ 171{
151 void *addr; 172 void *addr;
152 173
153#ifdef _WIN32 174#ifdef _WIN32
175#ifdef _WIN32 196#ifdef _WIN32
176 UnmapViewOfFile (addr); 197 UnmapViewOfFile (addr);
177#else 198#else
178 munmap (addr, len); 199 munmap (addr, len);
179#endif 200#endif
201}
202
203/////////////////////////////////////////////////////////////////////////////
204
205typedef struct
206{
207 char *addr;
208 unsigned int used;
209 unsigned int size;
210} u_dynbuf;
211
212static void *
213u_dynbuf_append (u_dynbuf *dynbuf, void *data, unsigned int len)
214{
215 char *dest;
216
217 if ((dynbuf->used += len) > dynbuf->size)
218 {
219 unsigned int new_size = dynbuf->size ? dynbuf->size * 2 : 4096;
220 dynbuf->addr = u_realloc (dynbuf->addr, dynbuf->size, new_size);
221 dynbuf->size = new_size;
222 }
223
224 dest = dynbuf->addr + dynbuf->used - len;
225
226 if (data)
227 memcpy (dest, data, len);
228
229 return dest;
180} 230}
181 231
182///////////////////////////////////////////////////////////////////////////// 232/////////////////////////////////////////////////////////////////////////////
183 233
184static void 234static void

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines