root/src/gauche/mingw-compat.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


   1 /*
   2  * mingw-compat.h - MinGW compatibility
   3  *
   4  *  Collection of #defines and typedefs to fool Gauche source enough
   5  *  to compile it on Windows/MinGW.
   6  *  I tried to put mingw-specific stuff here as much as possible,
   7  *  instead of scattering #ifdefs around the sources.
   8  *
   9  *  $Id: mingw-compat.h,v 1.3 2004/11/21 22:42:27 shirok Exp $
  10  */
  11 
  12 #ifndef GAUCHE_MINGW_COMPAT_H
  13 #define GAUCHE_MINGW_COMPAT_H
  14 
  15 #include <windows.h>
  16 #include <shlwapi.h>
  17 
  18 /* MinGW's sys/types.h doesn't define these.
  19    It appearse that _BSDTYPES_DEFINED is the symbol commonly used
  20    to guard them from being typedef'ed multiple times.  
  21    (see gmon.h or winsock.h in MinGW distribution) */
  22 
  23 #ifndef _BSDTYPES_DEFINED
  24 typedef unsigned char u_char;
  25 typedef unsigned short u_short;
  26 typedef unsigned int u_int;
  27 typedef unsigned long u_long;
  28 #define _BSDTYPES_DEFINED
  29 #endif /* _BSDTYPES_DEFINED */
  30 
  31 /*
  32  * Users and groups
  33  * MinGW doesn't really have users and groups in the sense of POSIX,
  34  * so we fake them.
  35  */
  36 #ifndef gid_t
  37 typedef int gid_t;
  38 #endif
  39 #ifndef uid_t
  40 typedef int uid_t;
  41 #endif
  42 
  43 struct passwd {
  44     char *pw_name;
  45     char *pw_passwd;
  46     int   pw_uid;
  47     int   pw_gid;
  48     char *pw_comment;
  49     char *pw_gecos;
  50     char *pw_dir;
  51     char *pw_shell;
  52 };
  53 
  54 struct passwd *getpwuid(uid_t);
  55 struct passwd *getpwnam(const char *t);
  56 
  57 struct group {
  58     char  *gr_name;
  59     char  *gr_passwd;
  60     gid_t gr_gid;
  61     char  **gr_mem;
  62 };
  63 
  64 struct group *getgrgid(gid_t);
  65 struct group *getgrnam(const char *t);
  66 
  67 /* No sigsetjmps.  Fake it with ordinary setjmps. */
  68 typedef jmp_buf  sigjmp_buf;
  69 
  70 #define sigsetjmp(jbuf, flag)  setjmp(jbuf)
  71 #define siglongjmp(jbuf, val)  longjmp(jbuf, val)
  72 
  73 /*
  74  * sinaction emulation layer
  75  * NB: this may need to be changed if MinGW starts supporting
  76  * sigemptyset etc.
  77  */
  78 #ifndef _SIGSET_T_
  79 #define _SIGSET_T_
  80 typedef unsigned long sigset_t;
  81 #endif /* _SIGSET_T_ */
  82 
  83 #define sigemptyset(pset)    (*(pset) = 0)
  84 #define sigfillset(pset)     (*(pset) = (unsigned int)-1)
  85 #define sigaddset(pset, num) (*(pset) |= (1L<<(num)))
  86 #define sigdelset(pset, num) (*(pset) &= ~(1L<<(num)))
  87 #define sigismember(pset, num) (*(pset) & (1L<<(num)))
  88 
  89 #ifndef SIG_SETMASK
  90 #define SIG_SETMASK (0)
  91 #define SIG_BLOCK   (1)
  92 #define SIG_UNBLOCK (2)
  93 #endif /*SIG_SETMASK*/
  94 
  95 struct sigaction {
  96     int          sa_flags;
  97     sigset_t     sa_mask;
  98     __p_sig_fn_t sa_handler;   /* see mingw/include/signal.h about the type */
  99 };
 100 
 101 /* there's a dummy sigaction defined in src/signal.c */
 102 int sigaction(int signum, const struct sigaction *act, struct sigaction *oact);
 103 
 104 /*
 105  * Miscellaneous POSIX stuff
 106  */
 107 
 108 uid_t getuid(void);
 109 uid_t geteuid(void);
 110 gid_t getgid(void);
 111 gid_t getegid(void);
 112 pid_t getppid(void);
 113 
 114 int link(const char *existing, const char *newpath);
 115 int fork(void);
 116 int kill(pid_t pid, int signal);
 117 int pipe(int fd[]);
 118 char *ttyname(int desc);
 119 int truncate(const char *path, off_t len);
 120 int ftruncate(int fd, off_t len);
 121 unsigned int alarm(unsigned int seconds);
 122 
 123 /* followings are in auxsys.c */
 124 const char *getlogin(void);
 125 
 126 /*
 127  * Fakes for networking (ext/net)
 128  */
 129 struct sockaddr_un {
 130     unsigned short sun_family;
 131     char sun_path[108];
 132 };
 133 
 134 /* winsock2 appears to have only inet_addr(), the obsolete interaface */
 135 int inet_aton(const char *cp, struct in_addr *inp);
 136 
 137 /*
 138  * Fakes for ext/fcntl
 139  */
 140 struct flock {
 141     short l_type;
 142     short l_whence;
 143     off_t l_start;
 144     off_t l_len;
 145     pid_t l_pid;
 146 };
 147 
 148 #define F_DUPFD  0
 149 #define F_GETFD  1
 150 #define F_SETFD  2
 151 #define F_GETFL  3
 152 #define F_SETFL  4
 153 #define F_GETLK  5
 154 #define F_SETLK  6
 155 #define F_SETLKW 7
 156 
 157 #define F_RDLCK  0
 158 #define F_WRLCK  1
 159 #define F_UNLCK  2
 160 
 161 #endif /* GAUCHE_MINGW_COMPAT_H */

/* [<][>][^][v][top][bottom][index][help] */