aboutsummaryrefslogtreecommitdiffhomepage
path: root/include
diff options
context:
space:
mode:
authorGravatar Ian Lynagh <igloo@earth.li>2009-02-11 18:29:06 +0000
committerGravatar Ian Lynagh <igloo@earth.li>2009-02-11 18:29:06 +0000
commitcfd7c9a5bdcc7f7c414b408d19c8a39a2917eec8 (patch)
tree82f403994bd5733d1e0d501fa35ec1d3ad33f768 /include
parent414744644cb19d2233a9c49ee1a6bc707a9da765 (diff)
Don't put inline'd functions in HsUnix.h; fixes trac #2969
If they are included into a C file which also has certain symbols defined, then the behaviour of the HsUnix.h functions can change (e.g. lstat can become the 32bit, rather than 64bit, version).
Diffstat (limited to 'include')
-rw-r--r--include/HsUnix.h98
1 files changed, 21 insertions, 77 deletions
diff --git a/include/HsUnix.h b/include/HsUnix.h
index 5acdb74..d460698 100644
--- a/include/HsUnix.h
+++ b/include/HsUnix.h
@@ -93,27 +93,19 @@
extern char **environ;
-#ifndef INLINE
-# if defined(__GNUC__)
-# define INLINE extern inline
-# else
-# define INLINE inline
-# endif
-#endif
-
-INLINE int __hsunix_wifexited (int stat) { return WIFEXITED(stat); }
-INLINE int __hsunix_wexitstatus (int stat) { return WEXITSTATUS(stat); }
-INLINE int __hsunix_wifsignaled (int stat) { return WIFSIGNALED(stat); }
-INLINE int __hsunix_wtermsig (int stat) { return WTERMSIG(stat); }
-INLINE int __hsunix_wifstopped (int stat) { return WIFSTOPPED(stat); }
-INLINE int __hsunix_wstopsig (int stat) { return WSTOPSIG(stat); }
+int __hsunix_wifexited (int stat);
+int __hsunix_wexitstatus (int stat);
+int __hsunix_wifsignaled (int stat);
+int __hsunix_wtermsig (int stat);
+int __hsunix_wifstopped (int stat);
+int __hsunix_wstopsig (int stat);
#ifdef HAVE_RTLDNEXT
-INLINE void *__hsunix_rtldNext (void) {return RTLD_NEXT;}
+void *__hsunix_rtldNext (void);
#endif
#ifdef HAVE_RTLDDEFAULT
-INLINE void *__hsunix_rtldDefault (void) {return RTLD_DEFAULT;}
+void *__hsunix_rtldDefault (void);
#endif
/* O_SYNC doesn't exist on Mac OS X and (at least some versions of) FreeBSD,
@@ -123,94 +115,46 @@ fall back to O_FSYNC, which should be the same */
#endif
#ifdef SIGINFO
-INLINE int __hsunix_SIGINFO() { return SIGINFO; }
+int __hsunix_SIGINFO();
#endif
#ifdef SIGWINCH
-INLINE int __hsunix_SIGWINCH() { return SIGWINCH; }
+int __hsunix_SIGWINCH();
#endif
// lstat is a macro on some platforms, so we need a wrapper:
-INLINE int __hsunix_lstat(const char *path, struct stat *buf)
-{
- return lstat(path,buf);
-}
+int __hsunix_lstat(const char *path, struct stat *buf);
// lstat is a macro on some platforms, so we need a wrapper:
-INLINE int __hsunix_mknod(const char *pathname, mode_t mode, dev_t dev)
-{
- return mknod(pathname,mode,dev);
-}
+int __hsunix_mknod(const char *pathname, mode_t mode, dev_t dev);
#ifdef HAVE_PTSNAME
// I cannot figure out how to make the definitions of the following
// functions visible in <stdlib.h> on Linux. But these definitions
// follow the POSIX specs, and everything links and runs.
-INLINE char *__hsunix_ptsname(int fd)
-{
- extern char *ptsname(int);
- return ptsname(fd);
-}
-
-INLINE int __hsunix_grantpt(int fd)
-{
- extern int grantpt(int);
- return grantpt(fd);
-}
-
-INLINE int __hsunix_unlockpt(int fd)
-{
- extern int unlockpt(int);
- return unlockpt(fd);
-}
+char *__hsunix_ptsname(int fd);
+int __hsunix_grantpt(int fd);
+int __hsunix_unlockpt(int fd);
#endif
// push a SVR4 STREAMS module; do nothing if STREAMS not available
-INLINE int __hsunix_push_module(int fd, const char *module)
-{
-#if defined(I_PUSH) && !defined(__CYGWIN__) && !defined(HAVE_DEV_PTC)
- return ioctl(fd, I_PUSH, module);
-#else
- return 0;
-#endif
-}
+int __hsunix_push_module(int fd, const char *module);
#if !defined(__MINGW32__)
-INLINE int __hscore_mkstemp(char *filetemplate) {
- return (mkstemp(filetemplate));
-}
+int __hscore_mkstemp(char *filetemplate);
#endif
#if !defined(__MINGW32__) && !defined(irix_HOST_OS)
-INLINE int __hscore_getrlimit(int resource, struct rlimit *rlim) {
- return (getrlimit(resource, rlim));
-}
-
-INLINE int __hscore_setrlimit(int resource, struct rlimit *rlim) {
- return (setrlimit(resource, rlim));
-}
+int __hscore_getrlimit(int resource, struct rlimit *rlim);
+int __hscore_setrlimit(int resource, struct rlimit *rlim);
#endif
-INLINE int __hsunix_unsetenv(const char *name)
-{
-#ifdef UNSETENV_RETURNS_VOID
- unsetenv(name);
- return 0;
-#else
- return unsetenv(name);
-#endif
-}
+int __hsunix_unsetenv(const char *name);
/* A size that will contain many path names, but not necessarily all
* (PATH_MAX is not defined on systems with unlimited path length,
* e.g. the Hurd).
*/
-INLINE HsInt __hsunix_long_path_size() {
-#ifdef PATH_MAX
- return PATH_MAX;
-#else
- return 4096;
-#endif
-}
+HsInt __hsunix_long_path_size();
#endif