Added better missing function emulation.

diff --git a/configure b/configure
index 139ff44..4228461 100755
--- a/configure
+++ b/configure
@@ -4555,11 +4555,21 @@
 for ac_func in \
 	_lwp_create \
 	clone \
+	getnetbyaddr \
+	getnetbyname \
 	getpagesize \
+	getprotobyname \
+	getprotobynumber \
+	getservbyport \
+	getsockopt \
+	inet_network \
 	memmove \
 	rfork \
+	select \
 	sendmsg \
+	settimeofday \
 	sigaltstack \
+	statfs \
 	strcasecmp \
 	strerror \
 	strncasecmp \
@@ -4572,12 +4582,12 @@
 
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:4576: checking for $ac_func" >&5
+echo "configure:4586: checking for $ac_func" >&5
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 4581 "configure"
+#line 4591 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -4600,7 +4610,7 @@
 
 ; return 0; }
 EOF
-if { (eval echo configure:4604: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+if { (eval echo configure:4614: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -4677,17 +4687,17 @@
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:4681: checking for $ac_hdr" >&5
+echo "configure:4691: checking for $ac_hdr" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 4686 "configure"
+#line 4696 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:4691: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:4701: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -4714,12 +4724,12 @@
 done
 
 echo $ac_n "checking whether stat file-mode macros are broken""... $ac_c" 1>&6
-echo "configure:4718: checking whether stat file-mode macros are broken" >&5
+echo "configure:4728: checking whether stat file-mode macros are broken" >&5
 if eval "test \"`echo '$''{'ac_cv_header_stat_broken'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 4723 "configure"
+#line 4733 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <sys/stat.h>
@@ -4772,12 +4782,12 @@
 
 
 echo $ac_n "checking for working const""... $ac_c" 1>&6
-echo "configure:4776: checking for working const" >&5
+echo "configure:4786: checking for working const" >&5
 if eval "test \"`echo '$''{'ac_cv_c_const'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 4781 "configure"
+#line 4791 "configure"
 #include "confdefs.h"
 
 int main() {
@@ -4826,7 +4836,7 @@
 
 ; return 0; }
 EOF
-if { (eval echo configure:4830: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:4840: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_c_const=yes
 else
@@ -4847,21 +4857,21 @@
 fi
 
 echo $ac_n "checking for inline""... $ac_c" 1>&6
-echo "configure:4851: checking for inline" >&5
+echo "configure:4861: checking for inline" >&5
 if eval "test \"`echo '$''{'ac_cv_c_inline'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   ac_cv_c_inline=no
 for ac_kw in inline __inline__ __inline; do
   cat > conftest.$ac_ext <<EOF
-#line 4858 "configure"
+#line 4868 "configure"
 #include "confdefs.h"
 
 int main() {
 } $ac_kw foo() {
 ; return 0; }
 EOF
-if { (eval echo configure:4865: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:4875: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_c_inline=$ac_kw; break
 else
@@ -4887,12 +4897,12 @@
 esac
 
 echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6
-echo "configure:4891: checking for ANSI C header files" >&5
+echo "configure:4901: checking for ANSI C header files" >&5
 if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 4896 "configure"
+#line 4906 "configure"
 #include "confdefs.h"
 #include <stdlib.h>
 #include <stdarg.h>
@@ -4900,7 +4910,7 @@
 #include <float.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:4904: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:4914: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -4917,7 +4927,7 @@
 if test $ac_cv_header_stdc = yes; then
   # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
 cat > conftest.$ac_ext <<EOF
-#line 4921 "configure"
+#line 4931 "configure"
 #include "confdefs.h"
 #include <string.h>
 EOF
@@ -4935,7 +4945,7 @@
 if test $ac_cv_header_stdc = yes; then
   # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
 cat > conftest.$ac_ext <<EOF
-#line 4939 "configure"
+#line 4949 "configure"
 #include "confdefs.h"
 #include <stdlib.h>
 EOF
@@ -4956,7 +4966,7 @@
   :
 else
   cat > conftest.$ac_ext <<EOF
-#line 4960 "configure"
+#line 4970 "configure"
 #include "confdefs.h"
 #include <ctype.h>
 #define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
@@ -4967,7 +4977,7 @@
 exit (0); }
 
 EOF
-if { (eval echo configure:4971: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:4981: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null
 then
   :
 else
@@ -4991,12 +5001,12 @@
 fi
 
 echo $ac_n "checking for size_t""... $ac_c" 1>&6
-echo "configure:4995: checking for size_t" >&5
+echo "configure:5005: checking for size_t" >&5
 if eval "test \"`echo '$''{'ac_cv_type_size_t'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 5000 "configure"
+#line 5010 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #if STDC_HEADERS
@@ -5024,7 +5034,7 @@
 fi
 
 echo $ac_n "checking size of long long""... $ac_c" 1>&6
-echo "configure:5028: checking size of long long" >&5
+echo "configure:5038: checking size of long long" >&5
 if eval "test \"`echo '$''{'ac_cv_sizeof_long_long'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -5032,7 +5042,7 @@
   ac_cv_sizeof_long_long=0
 else
   cat > conftest.$ac_ext <<EOF
-#line 5036 "configure"
+#line 5046 "configure"
 #include "confdefs.h"
 #include <stdio.h>
 main()
@@ -5043,7 +5053,7 @@
   exit(0);
 }
 EOF
-if { (eval echo configure:5047: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:5057: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null
 then
   ac_cv_sizeof_long_long=`cat conftestval`
 else
@@ -5066,12 +5076,12 @@
 if test "$ac_cv_header_linux_joystick_h" = "yes"
 then
    echo $ac_n "checking "whether linux/joystick.h uses the Linux 2.2+ API"""... $ac_c" 1>&6
-echo "configure:5070: checking "whether linux/joystick.h uses the Linux 2.2+ API"" >&5
+echo "configure:5080: checking "whether linux/joystick.h uses the Linux 2.2+ API"" >&5
 if eval "test \"`echo '$''{'wine_cv_linux_joystick_22_api'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 5075 "configure"
+#line 5085 "configure"
 #include "confdefs.h"
 
 	#include <sys/ioctl.h>
@@ -5086,7 +5096,7 @@
 /*empty*/
 ; return 0; }
 EOF
-if { (eval echo configure:5090: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:5100: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   wine_cv_linux_joystick_22_api=yes
 else
@@ -5113,12 +5123,12 @@
 if test "$ac_cv_header_sys_vfs_h" = "yes"
 then
     echo $ac_n "checking "whether sys/vfs.h defines statfs"""... $ac_c" 1>&6
-echo "configure:5117: checking "whether sys/vfs.h defines statfs"" >&5
+echo "configure:5127: checking "whether sys/vfs.h defines statfs"" >&5
 if eval "test \"`echo '$''{'wine_cv_sys_vfs_has_statfs'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 5122 "configure"
+#line 5132 "configure"
 #include "confdefs.h"
 
 	#include <sys/types.h>
@@ -5135,7 +5145,7 @@
 	
 ; return 0; }
 EOF
-if { (eval echo configure:5139: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:5149: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   wine_cv_sys_vfs_has_statfs=yes
 else
@@ -5162,12 +5172,12 @@
 if test "$ac_cv_header_sys_statfs_h" = "yes"
 then
     echo $ac_n "checking "whether sys/statfs.h defines statfs"""... $ac_c" 1>&6
-echo "configure:5166: checking "whether sys/statfs.h defines statfs"" >&5
+echo "configure:5176: checking "whether sys/statfs.h defines statfs"" >&5
 if eval "test \"`echo '$''{'wine_cv_sys_statfs_has_statfs'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 5171 "configure"
+#line 5181 "configure"
 #include "confdefs.h"
 
 	#include <sys/types.h>
@@ -5182,7 +5192,7 @@
 	
 ; return 0; }
 EOF
-if { (eval echo configure:5186: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:5196: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   wine_cv_sys_statfs_has_statfs=yes
 else
@@ -5209,12 +5219,12 @@
 if test "$ac_cv_header_sys_mount_h" = "yes"
 then
     echo $ac_n "checking "whether sys/mount.h defines statfs"""... $ac_c" 1>&6
-echo "configure:5213: checking "whether sys/mount.h defines statfs"" >&5
+echo "configure:5223: checking "whether sys/mount.h defines statfs"" >&5
 if eval "test \"`echo '$''{'wine_cv_sys_mount_has_statfs'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 5218 "configure"
+#line 5228 "configure"
 #include "confdefs.h"
 
 	#include <sys/types.h>
@@ -5229,7 +5239,7 @@
 	
 ; return 0; }
 EOF
-if { (eval echo configure:5233: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:5243: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   wine_cv_sys_mount_has_statfs=yes
 else
@@ -5255,7 +5265,7 @@
 
 
 echo $ac_n "checking "for statfs.f_bfree"""... $ac_c" 1>&6
-echo "configure:5259: checking "for statfs.f_bfree"" >&5
+echo "configure:5269: checking "for statfs.f_bfree"" >&5
 if eval "test \"`echo '$''{'wine_cv_statfs_bfree'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -5264,7 +5274,7 @@
         wine_cv_statfs_bfree=no
     else
     	cat > conftest.$ac_ext <<EOF
-#line 5268 "configure"
+#line 5278 "configure"
 #include "confdefs.h"
 
 	#include <sys/types.h>
@@ -5291,7 +5301,7 @@
 	
 ; return 0; }
 EOF
-if { (eval echo configure:5295: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:5305: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   wine_cv_statfs_bfree=yes
 else
@@ -5315,7 +5325,7 @@
 fi
 
 echo $ac_n "checking "for statfs.f_bavail"""... $ac_c" 1>&6
-echo "configure:5319: checking "for statfs.f_bavail"" >&5
+echo "configure:5329: checking "for statfs.f_bavail"" >&5
 if eval "test \"`echo '$''{'wine_cv_statfs_bavail'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -5324,7 +5334,7 @@
         wine_cv_statfs_bavail=no
     else
     	cat > conftest.$ac_ext <<EOF
-#line 5328 "configure"
+#line 5338 "configure"
 #include "confdefs.h"
 
 	#include <sys/types.h>
@@ -5351,7 +5361,7 @@
 	
 ; return 0; }
 EOF
-if { (eval echo configure:5355: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:5365: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   wine_cv_statfs_bavail=yes
 else
@@ -5376,7 +5386,7 @@
 
 
 echo $ac_n "checking "for working sigaltstack"""... $ac_c" 1>&6
-echo "configure:5380: checking "for working sigaltstack"" >&5
+echo "configure:5390: checking "for working sigaltstack"" >&5
 if eval "test \"`echo '$''{'ac_cv_c_working_sigaltstack'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -5385,7 +5395,7 @@
 
 else
   cat > conftest.$ac_ext <<EOF
-#line 5389 "configure"
+#line 5399 "configure"
 #include "confdefs.h"
 
 	#include <stdio.h>
@@ -5423,7 +5433,7 @@
 	}
 	
 EOF
-if { (eval echo configure:5427: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:5437: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null
 then
   ac_cv_c_working_sigaltstack="yes"
 else
@@ -5450,12 +5460,12 @@
 
 
 echo $ac_n "checking "for msg_accrights in struct msghdr"""... $ac_c" 1>&6
-echo "configure:5454: checking "for msg_accrights in struct msghdr"" >&5
+echo "configure:5464: checking "for msg_accrights in struct msghdr"" >&5
 if eval "test \"`echo '$''{'ac_cv_c_msg_accrights'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 5459 "configure"
+#line 5469 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <sys/socket.h>
@@ -5463,7 +5473,7 @@
 struct msghdr hdr; hdr.msg_accrights=0
 ; return 0; }
 EOF
-if { (eval echo configure:5467: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:5477: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_c_msg_accrights="yes"
 else
@@ -5486,12 +5496,12 @@
 
 
 echo $ac_n "checking "whether we need to define __i386__"""... $ac_c" 1>&6
-echo "configure:5490: checking "whether we need to define __i386__"" >&5
+echo "configure:5500: checking "whether we need to define __i386__"" >&5
 if eval "test \"`echo '$''{'ac_cv_cpp_def_i386'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 5495 "configure"
+#line 5505 "configure"
 #include "confdefs.h"
 #if (defined(i386) || defined(__i386)) && !defined(__i386__)
 yes
diff --git a/configure.in b/configure.in
index 3f05ff1..95ed29f 100644
--- a/configure.in
+++ b/configure.in
@@ -513,11 +513,21 @@
 AC_CHECK_FUNCS(\
 	_lwp_create \
 	clone \
+	getnetbyaddr \
+	getnetbyname \
 	getpagesize \
+	getprotobyname \
+	getprotobynumber \
+	getservbyport \
+	getsockopt \
+	inet_network \
 	memmove \
 	rfork \
+	select \
 	sendmsg \
+	settimeofday \
 	sigaltstack \
+	statfs \
 	strcasecmp \
 	strerror \
 	strncasecmp \
diff --git a/files/drive.c b/files/drive.c
index ef12bb9..26f3b50 100644
--- a/files/drive.c
+++ b/files/drive.c
@@ -41,6 +41,7 @@
 #include "heap.h"
 #include "msdos.h"
 #include "options.h"
+#include "wine/port.h"
 #include "task.h"
 #include "debugtools.h"
 
diff --git a/include/config.h.in b/include/config.h.in
index d88778d..b4118f2 100644
--- a/include/config.h.in
+++ b/include/config.h.in
@@ -151,21 +151,51 @@
 /* Define if you have the gethostbyname function.  */
 #undef HAVE_GETHOSTBYNAME
 
+/* Define if you have the getnetbyaddr function.  */
+#undef HAVE_GETNETBYADDR
+
+/* Define if you have the getnetbyname function.  */
+#undef HAVE_GETNETBYNAME
+
 /* Define if you have the getpagesize function.  */
 #undef HAVE_GETPAGESIZE
 
+/* Define if you have the getprotobyname function.  */
+#undef HAVE_GETPROTOBYNAME
+
+/* Define if you have the getprotobynumber function.  */
+#undef HAVE_GETPROTOBYNUMBER
+
+/* Define if you have the getservbyport function.  */
+#undef HAVE_GETSERVBYPORT
+
+/* Define if you have the getsockopt function.  */
+#undef HAVE_GETSOCKOPT
+
+/* Define if you have the inet_network function.  */
+#undef HAVE_INET_NETWORK
+
 /* Define if you have the memmove function.  */
 #undef HAVE_MEMMOVE
 
 /* Define if you have the rfork function.  */
 #undef HAVE_RFORK
 
+/* Define if you have the select function.  */
+#undef HAVE_SELECT
+
 /* Define if you have the sendmsg function.  */
 #undef HAVE_SENDMSG
 
+/* Define if you have the settimeofday function.  */
+#undef HAVE_SETTIMEOFDAY
+
 /* Define if you have the sigaltstack function.  */
 #undef HAVE_SIGALTSTACK
 
+/* Define if you have the statfs function.  */
+#undef HAVE_STATFS
+
 /* Define if you have the strcasecmp function.  */
 #undef HAVE_STRCASECMP
 
diff --git a/include/wine/port.h b/include/wine/port.h
new file mode 100644
index 0000000..27de191
--- /dev/null
+++ b/include/wine/port.h
@@ -0,0 +1,108 @@
+/*
+ * Wine porting definitions
+ *
+ */
+
+#ifndef __WINE_WINE_PORT_H
+#define __WINE_WINE_PORT_H
+
+#include "config.h"
+
+#include <sys/types.h>
+#include <sys/time.h>
+
+/* Types */
+
+#if !defined(HAVE_GETNETBYADDR) && !defined(HAVE_GETNETBYNAME)
+struct netent {
+  char         *n_name;
+  char        **n_aliases;
+  int           n_addrtype;
+  unsigned long n_net;
+};
+#endif /* !defined(HAVE_GETNETBYADDR) && !defined(HAVE_GETNETBYNAME) */
+
+#if !defined(HAVE_GETPROTOBYNAME) && !defined(HAVE_GETPROTOBYNUMBER)
+struct  protoent {
+  char  *p_name;
+  char **p_aliases;
+  int    p_proto;
+};
+#endif /* !defined(HAVE_GETPROTOBYNAME) && !defined(HAVE_GETPROTOBYNUMBER) */
+
+#ifndef HAVE_STATFS
+# ifdef __BEOS__
+#  define STATFS_HAS_BFREE
+struct statfs {
+  long   f_bsize;  /* block_size */
+  long   f_blocks; /* total_blocks */
+  long   f_bfree;  /* free_blocks */
+};
+# else /* defined(__BEOS__) */
+struct statfs;
+# endif /* defined(__BEOS__) */
+#endif /* !defined(HAVE_STATFS) */
+
+/* Functions */
+
+#if !defined(HAVE_CLONE) && defined(linux)
+int clone(int (*fn)(void *arg), void *stack, int flags, void *arg);
+#endif /* !defined(HAVE_CLONE) && defined(linux) */
+
+#ifndef HAVE_GETNETBYADDR
+struct netent *getnetbyaddr(unsigned long net, int type);
+#endif /* defined(HAVE_GETNETBYNAME) */
+
+#ifndef HAVE_GETNETBYNAME
+struct netent *getnetbyname(const char *name);
+#endif /* defined(HAVE_GETNETBYNAME) */
+
+#ifndef HAVE_GETPROTOBYNAME
+struct protoent *getprotobyname(const char *name);
+#endif /* !defined(HAVE_GETPROTOBYNAME) */
+
+#ifndef HAVE_GETPROTOBYNUMBER
+struct protoent *getprotobynumber(int proto);
+#endif /* !defined(HAVE_GETPROTOBYNUMBER) */
+
+#ifndef HAVE_GETSERVBYPORT
+struct servent *getservbyport(int port, const char *proto);
+#endif /* !defined(HAVE_GETSERVBYPORT) */
+
+#ifndef HAVE_GETSOCKOPT
+int getsockopt(int socket, int level, int option_name, void *option_value, size_t *option_len);
+#endif /* !defined(HAVE_GETSOCKOPT) */
+
+#ifndef HAVE_MEMMOVE
+void *memmove(void *dest, const void *src, unsigned int len);
+#endif /* !defined(HAVE_MEMMOVE) */
+
+#ifndef HAVE_INET_NETWORK
+unsigned long inet_network(const char *cp);
+#endif /* !defined(HAVE_INET_NETWORK) */
+
+#ifndef HAVE_SETTIMEOFDAY
+int settimeofday(struct timeval *tp, void *reserved);
+#endif /* !defined(HAVE_SETTIMEOFDAY) */
+
+#ifndef HAVE_STATFS
+int statfs(const char *name, struct statfs *info);
+#endif /* !defined(HAVE_STATFS) */
+
+#ifndef HAVE_STRNCASECMP
+int strncasecmp(const char *str1, const char *str2, size_t n);
+#endif /* !defined(HAVE_STRNCASECMP) */
+
+#ifndef HAVE_STRERROR
+const char *strerror(int err);
+#endif /* !defined(HAVE_STRERROR) */
+
+#ifndef HAVE_STRCASECMP
+int strcasecmp(const char *str1, const char *str2);
+#endif /* !defined(HAVE_STRCASECMP) */
+
+#ifndef HAVE_USLEEP
+int usleep (unsigned int useconds);
+#endif /* !defined(HAVE_USLEEP) */
+
+#endif /* !defined(__WINE_WINE_PORT_H) */
diff --git a/misc/port.c b/misc/port.c
index 934d0f8..c03819b 100644
--- a/misc/port.c
+++ b/misc/port.c
@@ -4,8 +4,14 @@
  * Copyright 1996 Alexandre Julliard
  */
 
-#include "config.h"
+#include "wine/port.h"
 
+#ifdef __BEOS__
+#include <be/kernel/fs_info.h>
+#include <be/kernel/OS.h>
+#endif
+
+#include <assert.h>
 #include <ctype.h>
 #include <stdio.h>
 #include <string.h>
@@ -20,13 +26,22 @@
 #ifdef HAVE_LIBIO_H
 # include <libio.h>
 #endif
+#ifdef HAVE_SYSCALL_H
+# include <syscall.h>
+#endif
 
+/***********************************************************************
+ *		usleep
+ */
 #ifndef HAVE_USLEEP
-#ifdef __EMX__
-unsigned int usleep (unsigned int useconds) { DosSleep(useconds); }
-#else
 unsigned int usleep (unsigned int useconds)
 {
+#if defined(__EMX__)
+    DosSleep(useconds);
+    return 0;
+#elif defined(__BEOS__)
+    return snooze(useconds);
+#elif defined(HAVE_SELECT)
     struct timeval delay;
 
     delay.tv_sec = 0;
@@ -34,10 +49,16 @@
 
     select( 0, 0, 0, 0, &delay );
     return 0;
+#else /* defined(__EMX__) || defined(__BEOS__) || defined(HAVE_SELECT) */
+    errno = ENOSYS;
+    return -1;
+#endif /* defined(__EMX__) || defined(__BEOS__) || defined(HAVE_SELECT) */
 }
-#endif
 #endif /* HAVE_USLEEP */
 
+/***********************************************************************
+ *		memmove
+ */
 #ifndef HAVE_MEMMOVE
 void *memmove( void *dest, const void *src, unsigned int len )
 {
@@ -63,6 +84,9 @@
 }
 #endif  /* HAVE_MEMMOVE */
 
+/***********************************************************************
+ *		strerror
+ */
 #ifndef HAVE_STRERROR
 const char *strerror( int err )
 {
@@ -71,12 +95,10 @@
 }
 #endif  /* HAVE_STRERROR */
 
+/***********************************************************************
+ *		clone
+ */
 #if !defined(HAVE_CLONE) && defined(__linux__)
-#include <assert.h>
-#include <errno.h>
-#ifdef HAVE_SYSCALL_H
-# include <syscall.h>
-#endif
 int clone( int (*fn)(void *), void *stack, int flags, void *arg )
 {
 #ifdef __i386__
@@ -106,7 +128,9 @@
 }
 #endif  /* !HAVE_CLONE && __linux__ */
 
-
+/***********************************************************************
+ *		strcasecmp
+ */
 #ifndef HAVE_STRCASECMP
 int strcasecmp( const char *str1, const char *str2 )
 {
@@ -115,6 +139,9 @@
 }
 #endif /* HAVE_STRCASECMP */
 
+/***********************************************************************
+ *		strncasecmp
+ */
 #ifndef HAVE_STRNCASECMP
 int strncasecmp( const char *str1, const char *str2, size_t n )
 {
@@ -126,13 +153,16 @@
 }
 #endif /* HAVE_STRNCASECMP */
 
-/** 
- *  It looks like the openpty that comes with glibc in RedHat 5.0
- *  is buggy (second call returns what looks like a dup of 0 and 1
- *  instead of a new pty), this is a generic replacement.
+/***********************************************************************
+ *		wine_openpty
+ * NOTE
+ *   It looks like the openpty that comes with glibc in RedHat 5.0
+ *   is buggy (second call returns what looks like a dup of 0 and 1
+ *   instead of a new pty), this is a generic replacement.
+ *
+ * FIXME
+ *   We should have a autoconf check for this.
  */
-/** We will have an autoconf check for this soon... */
-
 int wine_openpty(int *master, int *slave, char *name, 
 			struct termios *term, struct winsize *winsize)
 {
@@ -170,3 +200,131 @@
     return -1;
 }
 
+/***********************************************************************
+ *		getnetbyaddr
+ */
+#ifndef HAVE_GETNETBYADDR
+struct netent *getnetbyaddr(unsigned long net, int type)
+{
+    errno = ENOSYS;
+    return NULL;
+}
+#endif /* defined(HAVE_GETNETBYNAME) */
+
+/***********************************************************************
+ *		getnetbyname
+ */
+#ifndef HAVE_GETNETBYNAME
+struct netent *getnetbyname(const char *name)
+{
+    errno = ENOSYS;
+    return NULL;
+}
+#endif /* defined(HAVE_GETNETBYNAME) */
+
+/***********************************************************************
+ *		getprotobyname
+ */
+#ifndef HAVE_GETPROTOBYNAME
+struct protoent *getprotobyname(const char *name)
+{
+    errno = ENOSYS;
+    return NULL;
+}
+#endif /* !defined(HAVE_GETPROTOBYNAME) */
+
+/***********************************************************************
+ *		getprotobynumber
+ */
+#ifndef HAVE_GETPROTOBYNUMBER
+struct protoent *getprotobynumber(int proto)
+{
+    errno = ENOSYS;
+    return NULL;
+}
+#endif /* !defined(HAVE_GETPROTOBYNUMBER) */
+
+/***********************************************************************
+ *		getservbyport
+ */
+#ifndef HAVE_GETSERVBYPORT
+struct servent *getservbyport(int port, const char *proto)
+{
+    errno = ENOSYS;
+    return NULL;
+}
+#endif /* !defined(HAVE_GETSERVBYPORT) */
+
+/***********************************************************************
+ *		getsockopt
+ */
+#ifndef HAVE_GETSOCKOPT
+int getsockopt(int socket, int level, int option_name,
+	       void *option_value, size_t *option_len)
+{
+    errno = ENOSYS;
+    return -1;
+}
+#endif /* !defined(HAVE_GETSOCKOPT) */
+
+/***********************************************************************
+ *		inet_network
+ */
+#ifndef HAVE_INET_NETWORK
+unsigned long inet_network(const char *cp)
+{
+    errno = ENOSYS;
+    return 0;
+}
+#endif /* defined(HAVE_INET_NETWORK) */
+
+/***********************************************************************
+ *		settimeofday
+ */
+#ifndef HAVE_SETTIMEOFDAY
+int settimeofday(struct timeval *tp, void *reserved)
+{
+    tp->tv_sec = 0;
+    tp->tv_usec = 0;
+
+    errno = ENOSYS;
+    return -1;
+}
+#endif /* HAVE_SETTIMEOFDAY */
+
+/***********************************************************************
+ *		statfs
+ */
+#ifndef HAVE_STATFS
+int statfs(const char *name, struct statfs *info)
+{
+#ifdef __BEOS__
+    dev_t mydev;
+    fs_info fsinfo;
+    
+    if(!info) {
+        errno = ENOSYS;
+        return -1;
+    }
+
+    if ((mydev = dev_for_path(name)) < 0) {
+        errno = ENOSYS;
+	return -1;
+    }
+
+    if (fs_stat_dev(mydev,&fsinfo) < 0) {
+        errno = ENOSYS;
+	return -1;
+    }
+
+    info->f_bsize = fsinfo.block_size;
+    info->f_blocks = fsinfo.total_blocks;
+    info->f_bfree = fsinfo.free_blocks;
+  
+    return 0;
+#else /* defined(__BEOS__) */
+    errno = ENOSYS;
+    return -1;
+#endif /* defined(__BEOS__) */
+}
+#endif /* !defined(HAVE_STATFS) */
diff --git a/misc/winsock.c b/misc/winsock.c
index 8d7d881..b234906 100644
--- a/misc/winsock.c
+++ b/misc/winsock.c
@@ -77,6 +77,7 @@
 #include "task.h"
 #include "message.h"
 #include "miscemu.h"
+#include "wine/port.h"
 #include "services.h"
 #include "server.h"
 #include "debugtools.h"
diff --git a/misc/winsock_async.c b/misc/winsock_async.c
index 17852ae..df88bd7 100644
--- a/misc/winsock_async.c
+++ b/misc/winsock_async.c
@@ -83,6 +83,7 @@
 #include "task.h"
 #include "message.h"
 #include "miscemu.h"
+#include "wine/port.h"
 #include "debugtools.h"
 
 DEFAULT_DEBUG_CHANNEL(winsock)
diff --git a/scheduler/sysdeps.c b/scheduler/sysdeps.c
index c9ea1b0..ab3f6d9 100644
--- a/scheduler/sysdeps.c
+++ b/scheduler/sysdeps.c
@@ -25,6 +25,7 @@
 #ifdef HAVE_UCONTEXT_H
 # include <ucontext.h>
 #endif
+#include "wine/port.h"
 #include "thread.h"
 #include "server.h"
 #include "winbase.h"
@@ -33,14 +34,10 @@
 
 DEFAULT_DEBUG_CHANNEL(thread)
 
-#ifdef linux
-#define HAVE_CLONE_SYSCALL
-#endif
-
 /* Xlib critical section (FIXME: does not belong here) */
 CRITICAL_SECTION X11DRV_CritSection = { 0, };
 
-#ifdef HAVE_CLONE_SYSCALL
+#ifdef linux
 # ifdef HAVE_SCHED_H
 #  include <sched.h>
 # endif
@@ -50,10 +47,8 @@
 #  define CLONE_FILES   0x00000400
 #  define CLONE_SIGHAND 0x00000800
 #  define CLONE_PID     0x00001000
-/* If we didn't get the flags, we probably didn't get the prototype either */
-extern int clone( int (*fn)(void *arg), void *stack, int flags, void *arg );
 # endif  /* CLONE_VM */
-#endif  /* HAVE_CLONE_SYSCALL */
+#endif  /* linux */
 
 static int init_done;
 
@@ -155,7 +150,7 @@
 {
 #ifndef NO_REENTRANT_LIBC
 
-#ifdef HAVE_CLONE_SYSCALL
+#ifdef linux
     if (clone( (int (*)(void *))SYSDEPS_StartThread, teb->stack_top,
                CLONE_VM | CLONE_FS | CLONE_FILES | SIGCHLD, teb ) < 0)
         return -1;