Skip to content

Commit

Permalink
reimplement mingw mmap
Browse files Browse the repository at this point in the history
  • Loading branch information
WinterMute committed May 16, 2012
1 parent d2c78b9 commit 8e4efc3
Show file tree
Hide file tree
Showing 4 changed files with 34 additions and 144 deletions.
3 changes: 1 addition & 2 deletions configure.ac
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,7 @@ AM_PROG_CC_C_O

AC_CHECK_HEADERS(sys/mman.h)
AC_CHECK_HEADERS(sys/poll.h)
AC_CHECK_FUNCS(mmap)
AC_REPLACE_FUNCS(mmap pread)
AC_REPLACE_FUNCS(mmap)

# Checks for libraries.
PKG_CHECK_MODULES(USB, libusb-1.0 >= 1.0.0,,
Expand Down
74 changes: 19 additions & 55 deletions src/mmap.c
Original file line number Diff line number Diff line change
@@ -1,69 +1,33 @@
/* mmap.c -- version of mmap for gold. */

/* Copyright 2009 Free Software Foundation, Inc.
Written by Vladimir Simonov <[email protected]>.
This file is part of gold.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
MA 02110-1301, USA. */

//#include "config.h"
//#include "ansidecl.h"

#include <string.h>
#include <sys/types.h>
#ifdef HAVE_STDLIB_H
#include <stdlib.h>
#endif
#include <unistd.h>

#include "mmap.h"

extern ssize_t pread (int, void *, size_t, off_t);

void *
mmap (void *__addr, size_t __len, int __prot,
int __flags, int __fd, long long __offset)
{
void *ret;
ssize_t count;
void *mmap (void *addr, size_t len, int prot, int flags, int fd, long long offset) {

if (__addr || (__fd != -1 && (__prot & PROT_WRITE))
|| (__flags & MAP_SHARED))
return MAP_FAILED;
void *buf;
ssize_t count;

ret = malloc (__len);
if (!ret)
return MAP_FAILED;
if ( addr || fd == -1 || (prot & PROT_WRITE)) return MAP_FAILED;

if (__fd == -1)
return ret;
buf = malloc(len);
if ( NULL == buf ) return MAP_FAILED;

count = pread (__fd, ret, __len, __offset);
if ((size_t) count != __len)
{
free (ret);
return MAP_FAILED;
}
if (lseek(fd,offset,SEEK_SET) != offset) return MAP_FAILED;

count = read(fd, buf, len);

if (count != len) {
free (buf);
return MAP_FAILED;
}

return ret;
return buf;
}

int
munmap (void *__addr, size_t __len)
{
free (__addr);
return 0;
int munmap (void *addr, size_t len) {
free (addr);
return 0;
}
59 changes: 14 additions & 45 deletions src/mmap.h
Original file line number Diff line number Diff line change
@@ -1,62 +1,31 @@
/* mmap.h -- mmap family functions prototypes for gold. */

/* Copyright 2009 Free Software Foundation, Inc.
Written by Vladimir Simonov <[email protected]>
This file is part of gold.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
MA 02110-1301, USA. */

#ifndef GOLD_MMAP_H
#define GOLD_MMAP_H
#ifndef STLINK_MMAP_H
#define STLINK_MMAP_H

#ifdef HAVE_SYS_MMAN_H

#include <sys/mman.h>

/* Some BSD systems still use MAP_ANON instead of MAP_ANONYMOUS. */

#ifndef MAP_ANONYMOUS
# define MAP_ANONYMOUS MAP_ANON
#endif

#else

#define PROT_READ 0x1
#define PROT_WRITE 0x2
#define PROT_READ (1<<0)
#define PROT_WRITE (1<<1)

#define MAP_SHARED 0x01
#define MAP_PRIVATE 0x02
#define MAP_SHARED (1<<0)
#define MAP_PRIVATE (1<<1)

#define MAP_ANONYMOUS 0x20
#define MAP_ANONYMOUS (1<<5)

#define MAP_FAILED ((void *) -1)
#endif /* HAVE_SYS_MMAN_H */
#define MAP_FAILED ((void *)-1)

#ifndef HAVE_MMAP
#ifdef __cplusplus
extern "C" {
#endif
extern void *mmap (void *__addr, size_t __len, int __prot,
int __flags, int __fd, long long __offset);
extern int munmap (void *__addr, size_t __len);

void *mmap(void *addr, size_t len, int prot, int flags, int fd, long long offset);
int munmap(void *addr, size_t len);

#ifdef __cplusplus
}
#endif

#endif /* HAVE_MMAP */
#endif /* HAVE_SYS_MMAN_H */

#endif /* GOLD_MMAP_H */
#endif /* STLINK_MMAP_H */
42 changes: 0 additions & 42 deletions src/pread.c

This file was deleted.

0 comments on commit 8e4efc3

Please sign in to comment.