summary refs log tree commit diff
path: root/sysdeps/unix/sysv/linux
diff options
context:
space:
mode:
Diffstat (limited to 'sysdeps/unix/sysv/linux')
-rw-r--r--sysdeps/unix/sysv/linux/Dist4
-rw-r--r--sysdeps/unix/sysv/linux/Makefile2
-rw-r--r--sysdeps/unix/sysv/linux/_G_config.h1
-rw-r--r--sysdeps/unix/sysv/linux/accept.S1
-rw-r--r--sysdeps/unix/sysv/linux/connect.S1
-rw-r--r--sysdeps/unix/sysv/linux/getcwd.c50
-rw-r--r--sysdeps/unix/sysv/linux/net/if.h17
-rw-r--r--sysdeps/unix/sysv/linux/recv.S1
-rw-r--r--sysdeps/unix/sysv/linux/recvfrom.S1
-rw-r--r--sysdeps/unix/sysv/linux/recvmsg.S1
-rw-r--r--sysdeps/unix/sysv/linux/send.S1
-rw-r--r--sysdeps/unix/sysv/linux/sendmsg.S1
-rw-r--r--sysdeps/unix/sysv/linux/sendto.S1
-rw-r--r--sysdeps/unix/sysv/linux/sys/quota.h2
14 files changed, 59 insertions, 25 deletions
diff --git a/sysdeps/unix/sysv/linux/Dist b/sysdeps/unix/sysv/linux/Dist
index 2896953cb7..70baab50ee 100644
--- a/sysdeps/unix/sysv/linux/Dist
+++ b/sysdeps/unix/sysv/linux/Dist
@@ -5,6 +5,8 @@ kernel_sigaction.h
 kernel_stat.h
 kernel_termios.h
 llseek.c
+s_pread64.c
+s_pwrite64.c
 siglist.h
 socketcall.h
 sysctl.c
@@ -12,6 +14,7 @@ termio.h
 net/ethernet.h
 net/if.h
 net/if_arp.h
+net/if_packet.h
 net/if_ppp.h
 net/if_slip.h
 net/ppp-comp.h
@@ -28,6 +31,7 @@ netinet/tcp.h
 netinet/udp.h
 netipx/ipx.h
 nfs/nfs.h
+scsi/sg.h
 sys/acct.h
 sys/debugreg.h
 sys/fsuid.h
diff --git a/sysdeps/unix/sysv/linux/Makefile b/sysdeps/unix/sysv/linux/Makefile
index 005278068a..7331b38588 100644
--- a/sysdeps/unix/sysv/linux/Makefile
+++ b/sysdeps/unix/sysv/linux/Makefile
@@ -52,7 +52,7 @@ endif
 ifeq ($(subdir),socket)
 sysdep_headers += net/if.h net/if_ppp.h net/ppp-comp.h \
 		  net/ppp_defs.h net/if_arp.h net/route.h net/ethernet.h \
-		  net/if_slip.h
+		  net/if_slip.h net/if_packet.h
 sysdep_routines += cmsg_nxthdr
 endif
 
diff --git a/sysdeps/unix/sysv/linux/_G_config.h b/sysdeps/unix/sysv/linux/_G_config.h
index ccb84ad8f7..9ad897644e 100644
--- a/sysdeps/unix/sysv/linux/_G_config.h
+++ b/sysdeps/unix/sysv/linux/_G_config.h
@@ -9,6 +9,7 @@
 #include <bits/types.h>
 #define __need_size_t
 #define __need_wint_t
+#define __need_NULL
 #include <stddef.h>
 #ifndef _WINT_T
 /* Integral type unchanged by default argument promotions that can
diff --git a/sysdeps/unix/sysv/linux/accept.S b/sysdeps/unix/sysv/linux/accept.S
index 014684c708..b713a6e267 100644
--- a/sysdeps/unix/sysv/linux/accept.S
+++ b/sysdeps/unix/sysv/linux/accept.S
@@ -1,3 +1,4 @@
 #define	socket	accept
 #define	NARGS	3
 #include <socket.S>
+strong_alias (__accept, __libc_accept)
diff --git a/sysdeps/unix/sysv/linux/connect.S b/sysdeps/unix/sysv/linux/connect.S
index 93aad35d85..2840c58174 100644
--- a/sysdeps/unix/sysv/linux/connect.S
+++ b/sysdeps/unix/sysv/linux/connect.S
@@ -1,3 +1,4 @@
 #define	socket	connect
 #define	NARGS	3
 #include <socket.S>
+strong_alias (__connect, __libc_connect)
diff --git a/sysdeps/unix/sysv/linux/getcwd.c b/sysdeps/unix/sysv/linux/getcwd.c
index eea0b469e1..2af3b78da5 100644
--- a/sysdeps/unix/sysv/linux/getcwd.c
+++ b/sysdeps/unix/sysv/linux/getcwd.c
@@ -23,23 +23,26 @@
 #include <stdlib.h>
 #include <unistd.h>
 
-/* #define NDEBUG 1 */
-#include <assert.h>
 
 /* The "proc" filesystem provides an easy method to retrieve the value.
    For each process, the corresponding directory contains a symbolic link
    named `cwd'.  Reading the content of this link immediate gives us the
    information.  But we have to take care for systems which do not have
    the proc filesystem mounted.  Use the POSIX implementation in this case.  */
-static char *generic_getcwd (char *buf, size_t size);
+static char *generic_getcwd (char *buf, size_t size) internal_function;
 
 char *
 __getcwd (char *buf, size_t size)
 {
+  static int no_new_dcache = 0;
   int save_errno;
   char *path;
   int n;
   char *result;
+  size_t alloc_size = size;
+
+  if (no_new_dcache)
+    return generic_getcwd (buf, size);
 
   if (size == 0)
     {
@@ -49,39 +52,56 @@ __getcwd (char *buf, size_t size)
 	  return NULL;
 	}
 
-      size = PATH_MAX + 1;
+      alloc_size = PATH_MAX + 1;
     }
 
   if (buf != NULL)
     path = buf;
   else
     {
-      path = malloc (size);
+      path = malloc (alloc_size);
       if (path == NULL)
 	return NULL;
     }
 
   save_errno = errno;
-  n = __readlink ("/proc/self/cwd", path, size);
+
+  n = __readlink ("/proc/self/cwd", path, alloc_size - 1);
   if (n != -1)
     {
-      if (n >= size)
+      if (n >= alloc_size - 1)
 	{
-	  /* This should never happen when we allocate the buffer here.  */
-	  assert (buf == NULL);
-	  __set_errno (ERANGE);
-	  return NULL;
+	  if (size > 0)
+	    return NULL;
 	}
-      path[n] = '\0';
-      return buf ?: (char *) realloc (path, (size_t) n + 1);
+      else
+	if (path[0] == '/')
+	  {
+	    path[n] = '\0';
+	    return buf ?: (char *) realloc (path, (size_t) n + 1);
+	  }
+	else
+	  no_new_dcache = 1;
     }
 
+  /* Set to no_new_dcache only if error indicates that proc doesn't exist.  */
+  if (errno != EACCES && errno != ENAMETOOLONG)
+    no_new_dcache = 1;
+
   /* Something went wrong.  Restore the error number and use the generic
      version.  */
   __set_errno (save_errno);
+
+  /* Don't put restrictions on the length of the path unless the user does.  */
+  if (size == 0)
+    {
+      free (path);
+      path = NULL;
+    }
+
   result = generic_getcwd (path, size);
 
-  if (result == NULL && buf == NULL)
+  if (result == NULL && buf == NULL && size != 0)
     free (path);
 
   return result;
@@ -89,6 +109,6 @@ __getcwd (char *buf, size_t size)
 weak_alias (__getcwd, getcwd)
 
 /* Get the code for the generic version.  */
-#define GETCWD_STORAGE_CLASS	static
+#define GETCWD_STORAGE_CLASS	static internal_function
 #define __getcwd		generic_getcwd
 #include <sysdeps/posix/getcwd.c>
diff --git a/sysdeps/unix/sysv/linux/net/if.h b/sysdeps/unix/sysv/linux/net/if.h
index f4c1a48579..861ca261de 100644
--- a/sysdeps/unix/sysv/linux/net/if.h
+++ b/sysdeps/unix/sysv/linux/net/if.h
@@ -150,20 +150,21 @@ struct ifconf
 
 /* Convert an interface name to an index, and vice versa.  */
 
-unsigned int  if_nametoindex(const char *ifname);
-char  *if_indextoname(unsigned int ifindex, char *ifname);
+extern unsigned int if_nametoindex __P ((__const char *__ifname));
+extern char *if_indextoname __P ((unsigned int __ifindex, char *__ifname));
 
 /* Return a list of all interfaces and their indices.  */
 
-struct if_nameindex {
-  unsigned int   if_index;  /* 1, 2, ... */
-  char          *if_name;   /* null terminated name: "eth0", ... */
-};
+struct if_nameindex
+  {
+    unsigned int if_index;	/* 1, 2, ... */
+    char *if_name;		/* null terminated name: "eth0", ... */
+  };
 
-struct if_nameindex  *if_nameindex(void);
+extern struct if_nameindex *if_nameindex __P ((void));
 
 /* Free the data returned from if_nameindex.  */
 
-void  if_freenameindex(struct if_nameindex *ptr);
+extern void if_freenameindex __P ((struct if_nameindex *__ptr));
 
 #endif /* net/if.h */
diff --git a/sysdeps/unix/sysv/linux/recv.S b/sysdeps/unix/sysv/linux/recv.S
index ae17ba3fd3..d895080f9a 100644
--- a/sysdeps/unix/sysv/linux/recv.S
+++ b/sysdeps/unix/sysv/linux/recv.S
@@ -1,3 +1,4 @@
 #define	socket	recv
 #define	NARGS	4
 #include <socket.S>
+strong_alias (__recv, __libc_recv)
diff --git a/sysdeps/unix/sysv/linux/recvfrom.S b/sysdeps/unix/sysv/linux/recvfrom.S
index ed03d3c44b..a2c94a71bc 100644
--- a/sysdeps/unix/sysv/linux/recvfrom.S
+++ b/sysdeps/unix/sysv/linux/recvfrom.S
@@ -1,3 +1,4 @@
 #define	socket	recvfrom
 #define	NARGS	6
 #include <socket.S>
+strong_alias (__recvfrom, __libc_recvfrom)
diff --git a/sysdeps/unix/sysv/linux/recvmsg.S b/sysdeps/unix/sysv/linux/recvmsg.S
index bb897d2b63..e5d8cdd16a 100644
--- a/sysdeps/unix/sysv/linux/recvmsg.S
+++ b/sysdeps/unix/sysv/linux/recvmsg.S
@@ -1,3 +1,4 @@
 #define	socket	recvmsg
 #define	NARGS	3
 #include <socket.S>
+strong_alias (__recvmsg, __libc_recvmsg)
diff --git a/sysdeps/unix/sysv/linux/send.S b/sysdeps/unix/sysv/linux/send.S
index 596135e690..5191265f62 100644
--- a/sysdeps/unix/sysv/linux/send.S
+++ b/sysdeps/unix/sysv/linux/send.S
@@ -1,3 +1,4 @@
 #define	socket	send
 #define	NARGS	4
 #include <socket.S>
+strong_alias (__send, __libc_send)
diff --git a/sysdeps/unix/sysv/linux/sendmsg.S b/sysdeps/unix/sysv/linux/sendmsg.S
index f0aabb7023..6f511af1c7 100644
--- a/sysdeps/unix/sysv/linux/sendmsg.S
+++ b/sysdeps/unix/sysv/linux/sendmsg.S
@@ -1,3 +1,4 @@
 #define	socket	sendmsg
 #define	NARGS	3
 #include <socket.S>
+strong_alias (__sendmsg, __libc_sendmsg)
diff --git a/sysdeps/unix/sysv/linux/sendto.S b/sysdeps/unix/sysv/linux/sendto.S
index 3464d46e52..b34a609a93 100644
--- a/sysdeps/unix/sysv/linux/sendto.S
+++ b/sysdeps/unix/sysv/linux/sendto.S
@@ -1,3 +1,4 @@
 #define	socket	sendto
 #define	NARGS	6
 #include <socket.S>
+strong_alias (__sendto, __libc_sendto)
diff --git a/sysdeps/unix/sysv/linux/sys/quota.h b/sysdeps/unix/sysv/linux/sys/quota.h
index 3a1c696790..47e88d7176 100644
--- a/sysdeps/unix/sysv/linux/sys/quota.h
+++ b/sysdeps/unix/sysv/linux/sys/quota.h
@@ -1,3 +1,3 @@
 /* The kernel header file contains all declarations and definitions.  */
-#include <asm/types.h>
+#include <sys/types.h>
 #include <linux/quota.h>