summaryrefslogtreecommitdiff
path: root/sysdeps/unix
diff options
context:
space:
mode:
Diffstat (limited to 'sysdeps/unix')
-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>