aboutsummaryrefslogtreecommitdiff
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 2896953..70baab5 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 0052780..7331b38 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 ccb84ad..9ad8976 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 014684c..b713a6e 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 93aad35..2840c58 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 eea0b46..2af3b78 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 f4c1a48..861ca26 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 ae17ba3..d895080 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 ed03d3c..a2c94a7 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 bb897d2..e5d8cdd 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 596135e..5191265 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 f0aabb7..6f511af 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 3464d46..b34a609 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 3a1c696..47e88d7 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>