Merge pull request #77 from WinterMute/mingw
[fw/stlink] / src / mmap.c
1 /* mmap.c -- version of mmap for gold.  */
2
3 /* Copyright 2009 Free Software Foundation, Inc.
4    Written by Vladimir Simonov <sv@sw.ru>.
5
6    This file is part of gold.
7
8    This program is free software; you can redistribute it and/or modify
9    it under the terms of the GNU General Public License as published by
10    the Free Software Foundation; either version 3 of the License, or
11    (at your option) any later version.
12
13    This program is distributed in the hope that it will be useful,
14    but WITHOUT ANY WARRANTY; without even the implied warranty of
15    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16    GNU General Public License for more details.
17
18    You should have received a copy of the GNU General Public License
19    along with this program; if not, write to the Free Software
20    Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
21    MA 02110-1301, USA.  */
22
23 //#include "config.h"
24 //#include "ansidecl.h"
25
26 #include <string.h>
27 #include <sys/types.h>
28 #ifdef HAVE_STDLIB_H
29 #include <stdlib.h>
30 #endif
31
32 #include "mmap.h"
33
34 extern ssize_t pread (int, void *, size_t, off_t);
35
36 void *
37 mmap (void *__addr, size_t __len, int __prot,
38        int __flags, int __fd, long long  __offset)
39 {
40   void *ret;
41   ssize_t count;
42
43   if (__addr || (__fd != -1 && (__prot & PROT_WRITE))
44              || (__flags & MAP_SHARED))
45     return MAP_FAILED;
46
47   ret = malloc (__len);
48   if (!ret)
49     return MAP_FAILED;
50
51   if (__fd == -1)
52     return ret;
53
54   count = pread (__fd, ret, __len, __offset);
55   if ((size_t) count != __len)
56     {
57     free (ret);
58     return MAP_FAILED;
59     }
60
61   return ret;
62 }
63
64 int
65 munmap (void *__addr, size_t __len)
66 {
67   free (__addr);
68   return 0;
69 }