diff options
author | Waldemar Brodkorb <wbx@openadk.org> | 2010-07-30 00:05:36 +0200 |
---|---|---|
committer | Waldemar Brodkorb <wbx@openadk.org> | 2010-07-30 00:05:36 +0200 |
commit | f173d6ae31082439be71d9f5dcf6074ca6355520 (patch) | |
tree | 694102a6649c92339b17ad29c70886c5bf32ab80 /package | |
parent | f317da803e8a1ccba33cddae4c4e7be28f9b0b47 (diff) | |
parent | 049456b052c54b6c148438075bea9c4853d9bc95 (diff) |
Merge branch 'master' of git+ssh://openadk.org/git/openadk
Diffstat (limited to 'package')
-rw-r--r-- | package/atftp/patches/patch-test_Makefile | 152 | ||||
-rw-r--r-- | package/busybox/patches/005-bsd-compat.patch | 2306 | ||||
-rw-r--r-- | package/tslib/Makefile | 3 | ||||
-rw-r--r-- | package/tslib/patches/autotool.patch | 2608 |
4 files changed, 1334 insertions, 3735 deletions
diff --git a/package/atftp/patches/patch-test_Makefile b/package/atftp/patches/patch-test_Makefile deleted file mode 100644 index 097b3a5e3..000000000 --- a/package/atftp/patches/patch-test_Makefile +++ /dev/null @@ -1,152 +0,0 @@ -$Id: update-patches 24 2008-08-31 14:56:13Z wbx $ ---- atftp-0.7.orig/test/Makefile 2004-03-16 02:53:37.000000000 +0100 -+++ atftp-0.7/test/Makefile 2008-10-09 11:58:55.000000000 +0200 -@@ -13,9 +13,9 @@ - # PARTICULAR PURPOSE. - - --srcdir = . --top_srcdir = .. -- -+srcdir = /home/wbrodkorb/adk-glibc/build_x86/w-atftp-0.7-2/atftp-0.7/test -+top_srcdir = /home/wbrodkorb/adk-glibc/build_x86/w-atftp-0.7-2/atftp-0.7 -+VPATH = /home/wbrodkorb/adk-glibc/build_x86/w-atftp-0.7-2/atftp-0.7/test - pkgdatadir = $(datadir)/atftp - pkglibdir = $(libdir)/atftp - pkgincludedir = $(includedir)/atftp -@@ -33,7 +33,7 @@ POST_INSTALL = : - NORMAL_UNINSTALL = : - PRE_UNINSTALL = : - POST_UNINSTALL = : --host_triplet = i686-pc-linux-gnu -+host_triplet = i586-pc-linux-gnu - subdir = test - DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in - ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -@@ -46,24 +46,24 @@ CONFIG_CLEAN_FILES = - SOURCES = - DIST_SOURCES = - DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) --ACLOCAL = ${SHELL} /home/jp/projets/sources/atftp/atftp-0.7/atftp/missing --run aclocal-1.8 --AMDEP_FALSE = # --AMDEP_TRUE = --AMTAR = ${SHELL} /home/jp/projets/sources/atftp/atftp-0.7/atftp/missing --run tar --AUTOCONF = ${SHELL} /home/jp/projets/sources/atftp/atftp-0.7/atftp/missing --run autoconf --AUTOHEADER = ${SHELL} /home/jp/projets/sources/atftp/atftp-0.7/atftp/missing --run autoheader --AUTOMAKE = ${SHELL} /home/jp/projets/sources/atftp/atftp-0.7/atftp/missing --run automake-1.8 -+ACLOCAL = ${SHELL} /home/wbrodkorb/adk-glibc/build_x86/w-atftp-0.7-2/atftp-0.7/missing --run aclocal-1.8 -+AMDEP_FALSE = -+AMDEP_TRUE = # -+AMTAR = ${SHELL} /home/wbrodkorb/adk-glibc/build_x86/w-atftp-0.7-2/atftp-0.7/missing --run tar -+AUTOCONF = ${SHELL} /home/wbrodkorb/adk-glibc/build_x86/w-atftp-0.7-2/atftp-0.7/missing --run autoconf -+AUTOHEADER = ${SHELL} /home/wbrodkorb/adk-glibc/build_x86/w-atftp-0.7-2/atftp-0.7/missing --run autoheader -+AUTOMAKE = ${SHELL} /home/wbrodkorb/adk-glibc/build_x86/w-atftp-0.7-2/atftp-0.7/missing --run automake-1.8 - AWK = gawk --CC = gcc --CCDEPMODE = depmode=gcc3 -+CC = /home/wbrodkorb/adk-glibc/cross_x86/host/bin/i586-linux-gnu-gcc -+CCDEPMODE = depmode=none - CFLAGS = -g -Wall -D_REENTRANT -O2 --CPP = gcc -E --CPPFLAGS = -+CPP = /home/wbrodkorb/adk-glibc/cross_x86/host/bin/i586-linux-gnu-gcc -E -+CPPFLAGS = -isystem /home/wbrodkorb/adk-glibc/cross_x86/target/include -isystem /home/wbrodkorb/adk-glibc/cross_x86/target/usr/include -DNDEBUG - CYGPATH_W = echo - DEFS = -DHAVE_CONFIG_H - DEPDIR = .deps --ECHO_C = --ECHO_N = -n -+ECHO_C = \c -+ECHO_N = - ECHO_T = - EGREP = grep -E - EXEEXT = -@@ -71,17 +71,17 @@ INSTALL_DATA = ${INSTALL} -m 644 - INSTALL_PROGRAM = ${INSTALL} - INSTALL_SCRIPT = ${INSTALL} - INSTALL_STRIP_PROGRAM = ${SHELL} $(install_sh) -c -s --ISODATE = 2004-03-15 --LDFLAGS = -+ISODATE = 2008-10-09 -+LDFLAGS = -Wl,-O2 -Wl,-rpath -Wl,/usr/lib -Wl,-rpath-link -Wl,/home/wbrodkorb/adk-glibc/cross_x86/target/usr/lib -L/home/wbrodkorb/adk-glibc/cross_x86/target/lib -L/home/wbrodkorb/adk-glibc/cross_x86/target/usr/lib - LIBOBJS = --LIBPCRE = -lpcre -+LIBPCRE = - LIBPTHREAD = -lpthread - LIBREADLINE = -lreadline - LIBS = --LIBTERMCAP = --LIBWRAP = -lnsl -lwrap -+LIBTERMCAP = -lncurses -+LIBWRAP = - LTLIBOBJS = --MAKEINFO = ${SHELL} /home/jp/projets/sources/atftp/atftp-0.7/atftp/missing --run makeinfo -+MAKEINFO = ${SHELL} /home/wbrodkorb/adk-glibc/build_x86/w-atftp-0.7-2/atftp-0.7/missing --run makeinfo - OBJEXT = o - PACKAGE = atftp - PACKAGE_BUGREPORT = -@@ -90,46 +90,46 @@ PACKAGE_STRING = - PACKAGE_TARNAME = - PACKAGE_VERSION = - PATH_SEPARATOR = : --PLATFORM = pc-i686-linux-gnu -+PLATFORM = pc-i586-linux-gnu - SET_MAKE = - SHELL = /bin/sh --STRIP = -+STRIP = i586-linux-strip - VERSION = 0.7 --ac_ct_CC = gcc -+ac_ct_CC = - ac_ct_STRIP = --am__fastdepCC_FALSE = # --am__fastdepCC_TRUE = -+am__fastdepCC_FALSE = -+am__fastdepCC_TRUE = # - am__include = include - am__leading_dot = . - am__quote = - bindir = ${exec_prefix}/bin - build = i686-pc-linux-gnu --build_alias = -+build_alias = i686-linux-gnu - build_cpu = i686 - build_os = linux-gnu - build_vendor = pc --datadir = ${prefix}/share -+datadir = /usr/share - exec_prefix = ${prefix} --host = i686-pc-linux-gnu --host_alias = --host_cpu = i686 -+host = i586-pc-linux-gnu -+host_alias = i586-linux -+host_cpu = i586 - host_os = linux-gnu - host_vendor = pc - includedir = ${prefix}/include - infodir = ${prefix}/info --install_sh = /home/jp/projets/sources/atftp/atftp-0.7/atftp/install-sh -+install_sh = /home/wbrodkorb/adk-glibc/build_x86/w-atftp-0.7-2/atftp-0.7/install-sh - libdir = ${exec_prefix}/lib --libexecdir = ${exec_prefix}/libexec --localstatedir = ${prefix}/var --mandir = ${prefix}/man -+libexecdir = /usr/lib -+localstatedir = /var -+mandir = /usr/share/man - mkdir_p = mkdir -p -- . - oldincludedir = /usr/include --prefix = /usr/local --program_transform_name = s,x,x, -+prefix = /usr -+program_transform_name = s,$$,,;s,^,, - sbindir = ${exec_prefix}/sbin - sharedstatedir = ${prefix}/com --sysconfdir = ${prefix}/etc --target_alias = -+sysconfdir = /etc -+target_alias = i586-linux - TESTS = test.sh - CLEANFILES = *~ - all: all-am diff --git a/package/busybox/patches/005-bsd-compat.patch b/package/busybox/patches/005-bsd-compat.patch index 9ec8d5d29..fc7317d20 100644 --- a/package/busybox/patches/005-bsd-compat.patch +++ b/package/busybox/patches/005-bsd-compat.patch @@ -1,6 +1,6 @@ diff -Nur busybox-1.17.1.orig/include/libbb.h busybox-1.17.1/include/libbb.h ---- busybox-1.17.1.orig/include/libbb.h 2010-07-25 00:12:43.000000000 +0200 -+++ busybox-1.17.1/include/libbb.h 2010-07-28 20:13:21.000000000 +0200 +--- busybox-1.17.1.orig/include/libbb.h Sun Jul 25 00:12:43 2010 ++++ busybox-1.17.1/include/libbb.h Thu Jul 29 20:27:07 2010 @@ -40,6 +40,7 @@ /* Try to pull in PATH_MAX */ #include <limits.h> @@ -9,1777 +9,17 @@ diff -Nur busybox-1.17.1.orig/include/libbb.h busybox-1.17.1/include/libbb.h #ifdef HAVE_MNTENT_H #include <mntent.h> #endif -@@ -52,6 +53,7 @@ +@@ -51,6 +52,7 @@ + #include <selinux/context.h> #include <selinux/flask.h> #include <selinux/av_permissions.h> - #endif +#endif + #endif #if ENABLE_LOCALE_SUPPORT # include <locale.h> - #else -diff -Nur busybox-1.17.1.orig/include/libbb.h.orig busybox-1.17.1/include/libbb.h.orig ---- busybox-1.17.1.orig/include/libbb.h.orig 1970-01-01 01:00:00.000000000 +0100 -+++ busybox-1.17.1/include/libbb.h.orig 2010-07-25 00:12:43.000000000 +0200 -@@ -0,0 +1,1756 @@ -+/* vi: set sw=4 ts=4: */ -+/* -+ * Busybox main internal header file -+ * -+ * Based in part on code from sash, Copyright (c) 1999 by David I. Bell -+ * Permission has been granted to redistribute this code under the GPL. -+ * -+ * Licensed under the GPL version 2, see the file LICENSE in this tarball. -+ */ -+#ifndef LIBBB_H -+#define LIBBB_H 1 -+ -+#include "platform.h" -+ -+#include <ctype.h> -+#include <dirent.h> -+#include <errno.h> -+#include <fcntl.h> -+#include <inttypes.h> -+#include <netdb.h> -+#include <setjmp.h> -+#include <signal.h> -+#include <stdint.h> -+#include <stdio.h> -+#include <stdlib.h> -+#include <stdarg.h> -+#include <stddef.h> -+#include <string.h> -+#include <sys/poll.h> -+#include <sys/ioctl.h> -+#include <sys/mman.h> -+#include <sys/socket.h> -+#include <sys/stat.h> -+#include <sys/time.h> -+#include <sys/types.h> -+#include <sys/wait.h> -+#include <termios.h> -+#include <time.h> -+#include <unistd.h> -+/* Try to pull in PATH_MAX */ -+#include <limits.h> -+#include <sys/param.h> -+#ifdef HAVE_MNTENT_H -+#include <mntent.h> -+#endif -+#ifdef HAVE_SYS_STATFS_H -+#include <sys/statfs.h> -+#endif -+#if ENABLE_SELINUX -+#include <selinux/selinux.h> -+#include <selinux/context.h> -+#include <selinux/flask.h> -+#include <selinux/av_permissions.h> -+#endif -+#if ENABLE_LOCALE_SUPPORT -+# include <locale.h> -+#else -+# define setlocale(x,y) ((void)0) -+#endif -+#ifdef DMALLOC -+# include <dmalloc.h> -+#endif -+#include <pwd.h> -+#include <grp.h> -+#if ENABLE_FEATURE_SHADOWPASSWDS -+# if !ENABLE_USE_BB_SHADOW -+/* If using busybox's shadow implementation, do not include the shadow.h -+ * header as the toolchain may not provide it at all. -+ */ -+# include <shadow.h> -+# endif -+#endif -+#if defined __FreeBSD__ -+# include <netinet/in.h> -+# include <arpa/inet.h> -+#elif defined __APPLE__ -+# include <netinet/in.h> -+#else -+# include <arpa/inet.h> -+# if !defined(__socklen_t_defined) && !defined(_SOCKLEN_T_DECLARED) -+/* We #define socklen_t *after* includes, otherwise we get -+ * typedef redefinition errors from system headers -+ * (in case "is it defined already" detection above failed) -+ */ -+# define socklen_t bb_socklen_t -+ typedef unsigned socklen_t; -+# endif -+#endif -+ -+ -+/* Some libc's forget to declare these, do it ourself */ -+ -+extern char **environ; -+#if defined(__GLIBC__) && __GLIBC__ < 2 -+int vdprintf(int d, const char *format, va_list ap); -+#endif -+/* klogctl is in libc's klog.h, but we cheat and not #include that */ -+int klogctl(int type, char *b, int len); -+/* This is declared here rather than #including <libgen.h> in order to avoid -+ * confusing the two versions of basename. See the dirname/basename man page -+ * for details. */ -+#if !defined __FreeBSD__ -+char *dirname(char *path); -+#endif -+/* Include our own copy of struct sysinfo to avoid binary compatibility -+ * problems with Linux 2.4, which changed things. Grumble, grumble. */ -+struct sysinfo { -+ long uptime; /* Seconds since boot */ -+ unsigned long loads[3]; /* 1, 5, and 15 minute load averages */ -+ unsigned long totalram; /* Total usable main memory size */ -+ unsigned long freeram; /* Available memory size */ -+ unsigned long sharedram; /* Amount of shared memory */ -+ unsigned long bufferram; /* Memory used by buffers */ -+ unsigned long totalswap; /* Total swap space size */ -+ unsigned long freeswap; /* swap space still available */ -+ unsigned short procs; /* Number of current processes */ -+ unsigned short pad; /* Padding needed for m68k */ -+ unsigned long totalhigh; /* Total high memory size */ -+ unsigned long freehigh; /* Available high memory size */ -+ unsigned int mem_unit; /* Memory unit size in bytes */ -+ char _f[20 - 2 * sizeof(long) - sizeof(int)]; /* Padding: libc5 uses this.. */ -+}; -+int sysinfo(struct sysinfo* info); -+#ifndef PATH_MAX -+# define PATH_MAX 256 -+#endif -+#ifndef BUFSIZ -+# define BUFSIZ 4096 -+#endif -+ -+ -+/* Make all declarations hidden (-fvisibility flag only affects definitions) */ -+/* (don't include system headers after this until corresponding pop!) */ -+PUSH_AND_SET_FUNCTION_VISIBILITY_TO_HIDDEN -+ -+ -+#if ENABLE_USE_BB_PWD_GRP -+# include "pwd_.h" -+# include "grp_.h" -+#endif -+#if ENABLE_FEATURE_SHADOWPASSWDS -+# if ENABLE_USE_BB_SHADOW -+# include "shadow_.h" -+# endif -+#endif -+ -+/* Tested to work correctly with all int types (IIRC :]) */ -+#define MAXINT(T) (T)( \ -+ ((T)-1) > 0 \ -+ ? (T)-1 \ -+ : (T)~((T)1 << (sizeof(T)*8-1)) \ -+ ) -+ -+#define MININT(T) (T)( \ -+ ((T)-1) > 0 \ -+ ? (T)0 \ -+ : ((T)1 << (sizeof(T)*8-1)) \ -+ ) -+ -+/* Large file support */ -+/* Note that CONFIG_LFS=y forces bbox to be built with all common ops -+ * (stat, lseek etc) mapped to "largefile" variants by libc. -+ * Practically it means that open() automatically has O_LARGEFILE added -+ * and all filesize/file_offset parameters and struct members are "large" -+ * (in today's world - signed 64bit). For full support of large files, -+ * we need a few helper #defines (below) and careful use of off_t -+ * instead of int/ssize_t. No lseek64(), O_LARGEFILE etc necessary */ -+#if ENABLE_LFS -+/* CONFIG_LFS is on */ -+# if ULONG_MAX > 0xffffffff -+/* "long" is long enough on this system */ -+typedef unsigned long uoff_t; -+# define XATOOFF(a) xatoul_range(a, 0, LONG_MAX) -+/* usage: sz = BB_STRTOOFF(s, NULL, 10); if (errno || sz < 0) die(); */ -+# define BB_STRTOOFF bb_strtoul -+# define STRTOOFF strtoul -+/* usage: printf("size: %"OFF_FMT"d (%"OFF_FMT"x)\n", sz, sz); */ -+# define OFF_FMT "l" -+# else -+/* "long" is too short, need "long long" */ -+typedef unsigned long long uoff_t; -+# define XATOOFF(a) xatoull_range(a, 0, LLONG_MAX) -+# define BB_STRTOOFF bb_strtoull -+# define STRTOOFF strtoull -+# define OFF_FMT "ll" -+# endif -+#else -+/* CONFIG_LFS is off */ -+# if UINT_MAX == 0xffffffff -+/* While sizeof(off_t) == sizeof(int), off_t is typedef'ed to long anyway. -+ * gcc will throw warnings on printf("%d", off_t). Crap... */ -+typedef unsigned long uoff_t; -+# define XATOOFF(a) xatoi_u(a) -+# define BB_STRTOOFF bb_strtou -+# define STRTOOFF strtol -+# define OFF_FMT "l" -+# else -+typedef unsigned long uoff_t; -+# define XATOOFF(a) xatoul_range(a, 0, LONG_MAX) -+# define BB_STRTOOFF bb_strtoul -+# define STRTOOFF strtol -+# define OFF_FMT "l" -+# endif -+#endif -+/* scary. better ideas? (but do *test* them first!) */ -+#define OFF_T_MAX ((off_t)~((off_t)1 << (sizeof(off_t)*8-1))) -+ -+/* Some useful definitions */ -+#undef FALSE -+#define FALSE ((int) 0) -+#undef TRUE -+#define TRUE ((int) 1) -+#undef SKIP -+#define SKIP ((int) 2) -+ -+/* for mtab.c */ -+#define MTAB_GETMOUNTPT '1' -+#define MTAB_GETDEVICE '2' -+ -+#define BUF_SIZE 8192 -+#define EXPAND_ALLOC 1024 -+ -+/* Macros for min/max. */ -+#ifndef MIN -+#define MIN(a,b) (((a)<(b))?(a):(b)) -+#endif -+ -+#ifndef MAX -+#define MAX(a,b) (((a)>(b))?(a):(b)) -+#endif -+ -+/* buffer allocation schemes */ -+#if ENABLE_FEATURE_BUFFERS_GO_ON_STACK -+#define RESERVE_CONFIG_BUFFER(buffer,len) char buffer[len] -+#define RESERVE_CONFIG_UBUFFER(buffer,len) unsigned char buffer[len] -+#define RELEASE_CONFIG_BUFFER(buffer) ((void)0) -+#else -+#if ENABLE_FEATURE_BUFFERS_GO_IN_BSS -+#define RESERVE_CONFIG_BUFFER(buffer,len) static char buffer[len] -+#define RESERVE_CONFIG_UBUFFER(buffer,len) static unsigned char buffer[len] -+#define RELEASE_CONFIG_BUFFER(buffer) ((void)0) -+#else -+#define RESERVE_CONFIG_BUFFER(buffer,len) char *buffer = xmalloc(len) -+#define RESERVE_CONFIG_UBUFFER(buffer,len) unsigned char *buffer = xmalloc(len) -+#define RELEASE_CONFIG_BUFFER(buffer) free(buffer) -+#endif -+#endif -+ -+#if defined(__GLIBC__) -+/* glibc uses __errno_location() to get a ptr to errno */ -+/* We can just memorize it once - no multithreading in busybox :) */ -+extern int *const bb_errno; -+#undef errno -+#define errno (*bb_errno) -+#endif -+ -+unsigned long long monotonic_ns(void) FAST_FUNC; -+unsigned long long monotonic_us(void) FAST_FUNC; -+unsigned long long monotonic_ms(void) FAST_FUNC; -+unsigned monotonic_sec(void) FAST_FUNC; -+ -+extern void chomp(char *s) FAST_FUNC; -+extern void trim(char *s) FAST_FUNC; -+extern char *skip_whitespace(const char *) FAST_FUNC; -+extern char *skip_non_whitespace(const char *) FAST_FUNC; -+extern char *skip_dev_pfx(const char *tty_name) FAST_FUNC; -+ -+extern char *strrstr(const char *haystack, const char *needle) FAST_FUNC; -+ -+//TODO: supply a pointer to char[11] buffer (avoid statics)? -+extern const char *bb_mode_string(mode_t mode) FAST_FUNC; -+extern int is_directory(const char *name, int followLinks, struct stat *statBuf) FAST_FUNC; -+enum { /* DO NOT CHANGE THESE VALUES! cp.c, mv.c, install.c depend on them. */ -+ FILEUTILS_PRESERVE_STATUS = 1 << 0, /* -p */ -+ FILEUTILS_DEREFERENCE = 1 << 1, /* !-d */ -+ FILEUTILS_RECUR = 1 << 2, /* -R */ -+ FILEUTILS_FORCE = 1 << 3, /* -f */ -+ FILEUTILS_INTERACTIVE = 1 << 4, /* -i */ -+ FILEUTILS_MAKE_HARDLINK = 1 << 5, /* -l */ -+ FILEUTILS_MAKE_SOFTLINK = 1 << 6, /* -s */ -+ FILEUTILS_DEREF_SOFTLINK = 1 << 7, /* -L */ -+ FILEUTILS_DEREFERENCE_L0 = 1 << 8, /* -H */ -+#if ENABLE_SELINUX -+ FILEUTILS_PRESERVE_SECURITY_CONTEXT = 1 << 9, /* -c */ -+ FILEUTILS_SET_SECURITY_CONTEXT = 1 << 10, -+#endif -+}; -+#define FILEUTILS_CP_OPTSTR "pdRfilsLH" IF_SELINUX("c") -+extern int remove_file(const char *path, int flags) FAST_FUNC; -+/* NB: without FILEUTILS_RECUR in flags, it will basically "cat" -+ * the source, not copy (unless "source" is a directory). -+ * This makes "cp /dev/null file" and "install /dev/null file" (!!!) -+ * work coreutils-compatibly. */ -+extern int copy_file(const char *source, const char *dest, int flags) FAST_FUNC; -+ -+enum { -+ ACTION_RECURSE = (1 << 0), -+ ACTION_FOLLOWLINKS = (1 << 1), -+ ACTION_FOLLOWLINKS_L0 = (1 << 2), -+ ACTION_DEPTHFIRST = (1 << 3), -+ /*ACTION_REVERSE = (1 << 4), - unused */ -+ ACTION_QUIET = (1 << 5), -+ ACTION_DANGLING_OK = (1 << 6), -+}; -+typedef uint8_t recurse_flags_t; -+extern int recursive_action(const char *fileName, unsigned flags, -+ int FAST_FUNC (*fileAction)(const char *fileName, struct stat* statbuf, void* userData, int depth), -+ int FAST_FUNC (*dirAction)(const char *fileName, struct stat* statbuf, void* userData, int depth), -+ void* userData, unsigned depth) FAST_FUNC; -+extern int device_open(const char *device, int mode) FAST_FUNC; -+enum { GETPTY_BUFSIZE = 16 }; /* more than enough for "/dev/ttyXXX" */ -+extern int xgetpty(char *line) FAST_FUNC; -+extern int get_console_fd_or_die(void) FAST_FUNC; -+extern void console_make_active(int fd, const int vt_num) FAST_FUNC; -+extern char *find_block_device(const char *path) FAST_FUNC; -+/* bb_copyfd_XX print read/write errors and return -1 if they occur */ -+extern off_t bb_copyfd_eof(int fd1, int fd2) FAST_FUNC; -+extern off_t bb_copyfd_size(int fd1, int fd2, off_t size) FAST_FUNC; -+extern void bb_copyfd_exact_size(int fd1, int fd2, off_t size) FAST_FUNC; -+/* "short" copy can be detected by return value < size */ -+/* this helper yells "short read!" if param is not -1 */ -+extern void complain_copyfd_and_die(off_t sz) NORETURN FAST_FUNC; -+extern char bb_process_escape_sequence(const char **ptr) FAST_FUNC; -+/* xxxx_strip version can modify its parameter: -+ * "/" -> "/" -+ * "abc" -> "abc" -+ * "abc/def" -> "def" -+ * "abc/def/" -> "def" !! -+ */ -+extern char *bb_get_last_path_component_strip(char *path) FAST_FUNC; -+/* "abc/def/" -> "" and it never modifies 'path' */ -+extern char *bb_get_last_path_component_nostrip(const char *path) FAST_FUNC; -+ -+int ndelay_on(int fd) FAST_FUNC; -+int ndelay_off(int fd) FAST_FUNC; -+int close_on_exec_on(int fd) FAST_FUNC; -+void xdup2(int, int) FAST_FUNC; -+void xmove_fd(int, int) FAST_FUNC; -+ -+ -+DIR *xopendir(const char *path) FAST_FUNC; -+DIR *warn_opendir(const char *path) FAST_FUNC; -+ -+char *xmalloc_realpath(const char *path) FAST_FUNC RETURNS_MALLOC; -+char *xmalloc_readlink(const char *path) FAST_FUNC RETURNS_MALLOC; -+char *xmalloc_readlink_or_warn(const char *path) FAST_FUNC RETURNS_MALLOC; -+/* !RETURNS_MALLOC: it's a realloc-like function */ -+char *xrealloc_getcwd_or_warn(char *cwd) FAST_FUNC; -+ -+char *xmalloc_follow_symlinks(const char *path) FAST_FUNC RETURNS_MALLOC; -+ -+ -+enum { -+ /* bb_signals(BB_FATAL_SIGS, handler) catches all signals which -+ * otherwise would kill us, except for those resulting from bugs: -+ * SIGSEGV, SIGILL, SIGFPE. -+ * Other fatal signals not included (TODO?): -+ * SIGBUS Bus error (bad memory access) -+ * SIGPOLL Pollable event. Synonym of SIGIO -+ * SIGPROF Profiling timer expired -+ * SIGSYS Bad argument to routine -+ * SIGTRAP Trace/breakpoint trap -+ * -+ * The only known arch with some of these sigs not fitting -+ * into 32 bits is parisc (SIGXCPU=33, SIGXFSZ=34, SIGSTKFLT=36). -+ * Dance around with long long to guard against that... -+ */ -+ BB_FATAL_SIGS = (int)(0 -+ + (1LL << SIGHUP) -+ + (1LL << SIGINT) -+ + (1LL << SIGTERM) -+ + (1LL << SIGPIPE) // Write to pipe with no readers -+ + (1LL << SIGQUIT) // Quit from keyboard -+ + (1LL << SIGABRT) // Abort signal from abort(3) -+ + (1LL << SIGALRM) // Timer signal from alarm(2) -+ + (1LL << SIGVTALRM) // Virtual alarm clock -+ + (1LL << SIGXCPU) // CPU time limit exceeded -+ + (1LL << SIGXFSZ) // File size limit exceeded -+ + (1LL << SIGUSR1) // Yes kids, these are also fatal! -+ + (1LL << SIGUSR2) -+ + 0), -+}; -+void bb_signals(int sigs, void (*f)(int)) FAST_FUNC; -+/* Unlike signal() and bb_signals, sets handler with sigaction() -+ * and in a way that while signal handler is run, no other signals -+ * will be blocked; syscalls will not be restarted: */ -+void bb_signals_recursive_norestart(int sigs, void (*f)(int)) FAST_FUNC; -+/* syscalls like read() will be interrupted with EINTR: */ -+void signal_no_SA_RESTART_empty_mask(int sig, void (*handler)(int)) FAST_FUNC; -+/* syscalls like read() won't be interrupted (though select/poll will be): */ -+void signal_SA_RESTART_empty_mask(int sig, void (*handler)(int)) FAST_FUNC; -+void wait_for_any_sig(void) FAST_FUNC; -+void kill_myself_with_sig(int sig) NORETURN FAST_FUNC; -+void sig_block(int sig) FAST_FUNC; -+void sig_unblock(int sig) FAST_FUNC; -+/* Will do sigaction(signum, act, NULL): */ -+int sigaction_set(int sig, const struct sigaction *act) FAST_FUNC; -+/* SIG_BLOCK/SIG_UNBLOCK all signals: */ -+int sigprocmask_allsigs(int how) FAST_FUNC; -+/* Standard handler which just records signo */ -+extern smallint bb_got_signal; -+void record_signo(int signo); /* not FAST_FUNC! */ -+ -+ -+void xsetgid(gid_t gid) FAST_FUNC; -+void xsetuid(uid_t uid) FAST_FUNC; -+void xchdir(const char *path) FAST_FUNC; -+void xchroot(const char *path) FAST_FUNC; -+void xsetenv(const char *key, const char *value) FAST_FUNC; -+void bb_unsetenv(const char *key) FAST_FUNC; -+void bb_unsetenv_and_free(char *key) FAST_FUNC; -+void xunlink(const char *pathname) FAST_FUNC; -+void xstat(const char *pathname, struct stat *buf) FAST_FUNC; -+int xopen(const char *pathname, int flags) FAST_FUNC; -+int xopen_nonblocking(const char *pathname) FAST_FUNC; -+int xopen3(const char *pathname, int flags, int mode) FAST_FUNC; -+int open_or_warn(const char *pathname, int flags) FAST_FUNC; -+int open3_or_warn(const char *pathname, int flags, int mode) FAST_FUNC; -+int open_or_warn_stdin(const char *pathname) FAST_FUNC; -+void xrename(const char *oldpath, const char *newpath) FAST_FUNC; -+int rename_or_warn(const char *oldpath, const char *newpath) FAST_FUNC; -+off_t xlseek(int fd, off_t offset, int whence) FAST_FUNC; -+off_t fdlength(int fd) FAST_FUNC; -+ -+uoff_t FAST_FUNC get_volume_size_in_bytes(int fd, -+ const char *override, -+ unsigned override_units, -+ int extend); -+ -+void xpipe(int filedes[2]) FAST_FUNC; -+/* In this form code with pipes is much more readable */ -+struct fd_pair { int rd; int wr; }; -+#define piped_pair(pair) pipe(&((pair).rd)) -+#define xpiped_pair(pair) xpipe(&((pair).rd)) -+ -+/* Useful for having small structure members/global variables */ -+typedef int8_t socktype_t; -+typedef int8_t family_t; -+struct BUG_too_small { -+ char BUG_socktype_t_too_small[(0 -+ | SOCK_STREAM -+ | SOCK_DGRAM -+ | SOCK_RDM -+ | SOCK_SEQPACKET -+ | SOCK_RAW -+ ) <= 127 ? 1 : -1]; -+ char BUG_family_t_too_small[(0 -+ | AF_UNSPEC -+ | AF_INET -+ | AF_INET6 -+ | AF_UNIX -+#ifdef AF_PACKET -+ | AF_PACKET -+#endif -+#ifdef AF_NETLINK -+ | AF_NETLINK -+#endif -+ /* | AF_DECnet */ -+ /* | AF_IPX */ -+ ) <= 127 ? 1 : -1]; -+}; -+ -+ -+void parse_datestr(const char *date_str, struct tm *ptm) FAST_FUNC; -+time_t validate_tm_time(const char *date_str, struct tm *ptm) FAST_FUNC; -+ -+ -+int xsocket(int domain, int type, int protocol) FAST_FUNC; -+void xbind(int sockfd, struct sockaddr *my_addr, socklen_t addrlen) FAST_FUNC; -+void xlisten(int s, int backlog) FAST_FUNC; -+void xconnect(int s, const struct sockaddr *s_addr, socklen_t addrlen) FAST_FUNC; -+ssize_t xsendto(int s, const void *buf, size_t len, const struct sockaddr *to, -+ socklen_t tolen) FAST_FUNC; -+/* SO_REUSEADDR allows a server to rebind to an address that is already -+ * "in use" by old connections to e.g. previous server instance which is -+ * killed or crashed. Without it bind will fail until all such connections -+ * time out. Linux does not allow multiple live binds on same ip:port -+ * regardless of SO_REUSEADDR (unlike some other flavors of Unix). -+ * Turn it on before you call bind(). */ -+void setsockopt_reuseaddr(int fd) FAST_FUNC; /* On Linux this never fails. */ -+int setsockopt_broadcast(int fd) FAST_FUNC; -+int setsockopt_bindtodevice(int fd, const char *iface) FAST_FUNC; -+/* NB: returns port in host byte order */ -+unsigned bb_lookup_port(const char *port, const char *protocol, unsigned default_port) FAST_FUNC; -+typedef struct len_and_sockaddr { -+ socklen_t len; -+ union { -+ struct sockaddr sa; -+ struct sockaddr_in sin; -+#if ENABLE_FEATURE_IPV6 -+ struct sockaddr_in6 sin6; -+#endif -+ } u; -+} len_and_sockaddr; -+enum { -+ LSA_LEN_SIZE = offsetof(len_and_sockaddr, u), -+ LSA_SIZEOF_SA = sizeof( -+ union { -+ struct sockaddr sa; -+ struct sockaddr_in sin; -+#if ENABLE_FEATURE_IPV6 -+ struct sockaddr_in6 sin6; -+#endif -+ } -+ ) -+}; -+/* Create stream socket, and allocate suitable lsa. -+ * (lsa of correct size and lsa->sa.sa_family (AF_INET/AF_INET6)) -+ * af == AF_UNSPEC will result in trying to create IPv6 socket, -+ * and if kernel doesn't support it, fall back to IPv4. -+ * This is useful if you plan to bind to resulting local lsa. -+ */ -+#if ENABLE_FEATURE_IPV6 -+int xsocket_type(len_and_sockaddr **lsap, int af, int sock_type) FAST_FUNC; -+#else -+int xsocket_type(len_and_sockaddr **lsap, int sock_type) FAST_FUNC; -+#define xsocket_type(lsap, af, sock_type) xsocket_type((lsap), (sock_type)) -+#endif -+int xsocket_stream(len_and_sockaddr **lsap) FAST_FUNC; -+/* Create server socket bound to bindaddr:port. bindaddr can be NULL, -+ * numeric IP ("N.N.N.N") or numeric IPv6 address, -+ * and can have ":PORT" suffix (for IPv6 use "[X:X:...:X]:PORT"). -+ * Only if there is no suffix, port argument is used */ -+/* NB: these set SO_REUSEADDR before bind */ -+int create_and_bind_stream_or_die(const char *bindaddr, int port) FAST_FUNC; -+int create_and_bind_dgram_or_die(const char *bindaddr, int port) FAST_FUNC; -+/* Create client TCP socket connected to peer:port. Peer cannot be NULL. -+ * Peer can be numeric IP ("N.N.N.N"), numeric IPv6 address or hostname, -+ * and can have ":PORT" suffix (for IPv6 use "[X:X:...:X]:PORT"). -+ * If there is no suffix, port argument is used */ -+int create_and_connect_stream_or_die(const char *peer, int port) FAST_FUNC; -+/* Connect to peer identified by lsa */ -+int xconnect_stream(const len_and_sockaddr *lsa) FAST_FUNC; -+/* Get local address of bound or accepted socket */ -+len_and_sockaddr *get_sock_lsa(int fd) FAST_FUNC RETURNS_MALLOC; -+/* Get remote address of connected or accepted socket */ -+len_and_sockaddr *get_peer_lsa(int fd) FAST_FUNC RETURNS_MALLOC; -+/* Return malloc'ed len_and_sockaddr with socket address of host:port -+ * Currently will return IPv4 or IPv6 sockaddrs only -+ * (depending on host), but in theory nothing prevents e.g. -+ * UNIX socket address being returned, IPX sockaddr etc... -+ * On error does bb_error_msg and returns NULL */ -+len_and_sockaddr* host2sockaddr(const char *host, int port) FAST_FUNC RETURNS_MALLOC; -+/* Version which dies on error */ -+len_and_sockaddr* xhost2sockaddr(const char *host, int port) FAST_FUNC RETURNS_MALLOC; -+len_and_sockaddr* xdotted2sockaddr(const char *host, int port) FAST_FUNC RETURNS_MALLOC; -+/* Same, useful if you want to force family (e.g. IPv6) */ -+#if !ENABLE_FEATURE_IPV6 -+#define host_and_af2sockaddr(host, port, af) host2sockaddr((host), (port)) -+#define xhost_and_af2sockaddr(host, port, af) xhost2sockaddr((host), (port)) -+#else -+len_and_sockaddr* host_and_af2sockaddr(const char *host, int port, sa_family_t af) FAST_FUNC RETURNS_MALLOC; -+len_and_sockaddr* xhost_and_af2sockaddr(const char *host, int port, sa_family_t af) FAST_FUNC RETURNS_MALLOC; -+#endif -+/* Assign sin[6]_port member if the socket is an AF_INET[6] one, -+ * otherwise no-op. Useful for ftp. -+ * NB: does NOT do htons() internally, just direct assignment. */ -+void set_nport(len_and_sockaddr *lsa, unsigned port) FAST_FUNC; -+/* Retrieve sin[6]_port or return -1 for non-INET[6] lsa's */ -+int get_nport(const struct sockaddr *sa) FAST_FUNC; -+/* Reverse DNS. Returns NULL on failure. */ -+char* xmalloc_sockaddr2host(const struct sockaddr *sa) FAST_FUNC RETURNS_MALLOC; -+/* This one doesn't append :PORTNUM */ -+char* xmalloc_sockaddr2host_noport(const struct sockaddr *sa) FAST_FUNC RETURNS_MALLOC; -+/* This one also doesn't fall back to dotted IP (returns NULL) */ -+char* xmalloc_sockaddr2hostonly_noport(const struct sockaddr *sa) FAST_FUNC RETURNS_MALLOC; -+/* inet_[ap]ton on steroids */ -+char* xmalloc_sockaddr2dotted(const struct sockaddr *sa) FAST_FUNC RETURNS_MALLOC; -+char* xmalloc_sockaddr2dotted_noport(const struct sockaddr *sa) FAST_FUNC RETURNS_MALLOC; -+// "old" (ipv4 only) API -+// users: traceroute.c hostname.c - use _list_ of all IPs -+struct hostent *xgethostbyname(const char *name) FAST_FUNC; -+// Also mount.c and inetd.c are using gethostbyname(), -+// + inet_common.c has additional IPv4-only stuff -+ -+ -+void socket_want_pktinfo(int fd) FAST_FUNC; -+ssize_t send_to_from(int fd, void *buf, size_t len, int flags, -+ const struct sockaddr *to, -+ const struct sockaddr *from, -+ socklen_t tolen) FAST_FUNC; -+ssize_t recv_from_to(int fd, void *buf, size_t len, int flags, -+ struct sockaddr *from, -+ struct sockaddr *to, -+ socklen_t sa_size) FAST_FUNC; -+ -+ -+char *xstrdup(const char *s) FAST_FUNC RETURNS_MALLOC; -+char *xstrndup(const char *s, int n) FAST_FUNC RETURNS_MALLOC; -+void overlapping_strcpy(char *dst, const char *src) FAST_FUNC; -+char *safe_strncpy(char *dst, const char *src, size_t size) FAST_FUNC; -+char *strncpy_IFNAMSIZ(char *dst, const char *src) FAST_FUNC; -+/* Guaranteed to NOT be a macro (smallest code). Saves nearly 2k on uclibc. -+ * But potentially slow, don't use in one-billion-times loops */ -+int bb_putchar(int ch) FAST_FUNC; -+/* Note: does not use stdio, writes to fd 2 directly */ -+int bb_putchar_stderr(char ch) FAST_FUNC; -+char *xasprintf(const char *format, ...) __attribute__ ((format(printf, 1, 2))) FAST_FUNC RETURNS_MALLOC; -+// gcc-4.1.1 still isn't good enough at optimizing it -+// (+200 bytes compared to macro) -+//static ALWAYS_INLINE -+//int LONE_DASH(const char *s) { return s[0] == '-' && !s[1]; } -+//static ALWAYS_INLINE -+//int NOT_LONE_DASH(const char *s) { return s[0] != '-' || s[1]; } -+#define LONE_DASH(s) ((s)[0] == '-' && !(s)[1]) -+#define NOT_LONE_DASH(s) ((s)[0] != '-' || (s)[1]) -+#define LONE_CHAR(s,c) ((s)[0] == (c) && !(s)[1]) -+#define NOT_LONE_CHAR(s,c) ((s)[0] != (c) || (s)[1]) -+#define DOT_OR_DOTDOT(s) ((s)[0] == '.' && (!(s)[1] || ((s)[1] == '.' && !(s)[2]))) -+ -+typedef struct uni_stat_t { -+ unsigned byte_count; -+ unsigned unicode_count; -+ unsigned unicode_width; -+} uni_stat_t; -+/* Returns a string with unprintable chars replaced by '?' or -+ * SUBST_WCHAR. This function is unicode-aware. */ -+const char* FAST_FUNC printable_string(uni_stat_t *stats, const char *str); -+/* Prints unprintable char ch as ^C or M-c to file -+ * (M-c is used only if ch is ORed with PRINTABLE_META), -+ * else it is printed as-is (except for ch = 0x9b) */ -+enum { PRINTABLE_META = 0x100 }; -+void fputc_printable(int ch, FILE *file) FAST_FUNC; -+ -+/* dmalloc will redefine these to it's own implementation. It is safe -+ * to have the prototypes here unconditionally. */ -+void *malloc_or_warn(size_t size) FAST_FUNC RETURNS_MALLOC; -+void *xmalloc(size_t size) FAST_FUNC RETURNS_MALLOC; -+void *xzalloc(size_t size) FAST_FUNC RETURNS_MALLOC; -+void *xrealloc(void *old, size_t size) FAST_FUNC; -+/* After xrealloc_vector(v, 4, idx) it's ok to use -+ * at least v[idx] and v[idx+1], for all idx values. -+ * shift specifies how many new elements are added (1: 2, 2: 4... 8: 256...) -+ * when all elements are used up. New elements are zeroed out. */ -+#define xrealloc_vector(vector, shift, idx) \ -+ xrealloc_vector_helper((vector), (sizeof((vector)[0]) << 8) + (shift), (idx)) -+void* xrealloc_vector_helper(void *vector, unsigned sizeof_and_shift, int idx) FAST_FUNC; -+ -+ -+extern ssize_t safe_read(int fd, void *buf, size_t count) FAST_FUNC; -+extern ssize_t nonblock_safe_read(int fd, void *buf, size_t count) FAST_FUNC; -+// NB: will return short read on error, not -1, -+// if some data was read before error occurred -+extern ssize_t full_read(int fd, void *buf, size_t count) FAST_FUNC; -+extern void xread(int fd, void *buf, size_t count) FAST_FUNC; -+extern unsigned char xread_char(int fd) FAST_FUNC; -+extern ssize_t read_close(int fd, void *buf, size_t maxsz) FAST_FUNC; -+extern ssize_t open_read_close(const char *filename, void *buf, size_t maxsz) FAST_FUNC; -+// Reads one line a-la fgets (but doesn't save terminating '\n'). -+// Reads byte-by-byte. Useful when it is important to not read ahead. -+// Bytes are appended to pfx (which must be malloced, or NULL). -+extern char *xmalloc_reads(int fd, char *pfx, size_t *maxsz_p) FAST_FUNC; -+/* Reads block up to *maxsz_p (default: INT_MAX - 4095) */ -+extern void *xmalloc_read(int fd, size_t *maxsz_p) FAST_FUNC RETURNS_MALLOC; -+/* Returns NULL if file can't be opened (default max size: INT_MAX - 4095) */ -+extern void *xmalloc_open_read_close(const char *filename, size_t *maxsz_p) FAST_FUNC RETURNS_MALLOC; -+/* Autodetects gzip/bzip2 formats. fd may be in the middle of the file! */ -+#if ENABLE_FEATURE_SEAMLESS_LZMA \ -+ || ENABLE_FEATURE_SEAMLESS_BZ2 \ -+ || ENABLE_FEATURE_SEAMLESS_GZ \ -+ /* || ENABLE_FEATURE_SEAMLESS_Z */ -+extern void setup_unzip_on_fd(int fd /*, int fail_if_not_detected*/) FAST_FUNC; -+#else -+# define setup_unzip_on_fd(...) ((void)0) -+#endif -+/* Autodetects .gz etc */ -+extern int open_zipped(const char *fname) FAST_FUNC; -+extern void *xmalloc_open_zipped_read_close(const char *fname, size_t *maxsz_p) FAST_FUNC RETURNS_MALLOC; -+/* Never returns NULL */ -+extern void *xmalloc_xopen_read_close(const char *filename, size_t *maxsz_p) FAST_FUNC RETURNS_MALLOC; -+ -+extern ssize_t safe_write(int fd, const void *buf, size_t count) FAST_FUNC; -+// NB: will return short write on error, not -1, -+// if some data was written before error occurred -+extern ssize_t full_write(int fd, const void *buf, size_t count) FAST_FUNC; -+extern void xwrite(int fd, const void *buf, size_t count) FAST_FUNC; -+extern void xwrite_str(int fd, const char *str) FAST_FUNC; -+extern ssize_t full_write1_str(const char *str) FAST_FUNC; -+extern ssize_t full_write2_str(const char *str) FAST_FUNC; -+extern void xopen_xwrite_close(const char* file, const char *str) FAST_FUNC; -+ -+/* Close fd, but check for failures (some types of write errors) */ -+extern void xclose(int fd) FAST_FUNC; -+ -+/* Reads and prints to stdout till eof, then closes FILE. Exits on error: */ -+extern void xprint_and_close_file(FILE *file) FAST_FUNC; -+ -+extern char *bb_get_chunk_from_file(FILE *file, int *end) FAST_FUNC; -+extern char *bb_get_chunk_with_continuation(FILE *file, int *end, int *lineno) FAST_FUNC; -+/* Reads up to (and including) TERMINATING_STRING: */ -+extern char *xmalloc_fgets_str(FILE *file, const char *terminating_string) FAST_FUNC RETURNS_MALLOC; -+/* Same, with limited max size, and returns the length (excluding NUL): */ -+extern char *xmalloc_fgets_str_len(FILE *file, const char *terminating_string, size_t *maxsz_p) FAST_FUNC RETURNS_MALLOC; -+/* Chops off TERMINATING_STRING from the end: */ -+extern char *xmalloc_fgetline_str(FILE *file, const char *terminating_string) FAST_FUNC RETURNS_MALLOC; -+/* Reads up to (and including) "\n" or NUL byte: */ -+extern char *xmalloc_fgets(FILE *file) FAST_FUNC RETURNS_MALLOC; -+/* Chops off '\n' from the end, unlike fgets: */ -+extern char *xmalloc_fgetline(FILE *file) FAST_FUNC RETURNS_MALLOC; -+/* Same, but doesn't try to conserve space (may have some slack after the end) */ -+/* extern char *xmalloc_fgetline_fast(FILE *file) FAST_FUNC RETURNS_MALLOC; */ -+ -+void die_if_ferror(FILE *file, const char *msg) FAST_FUNC; -+void die_if_ferror_stdout(void) FAST_FUNC; -+int fflush_all(void) FAST_FUNC; -+void fflush_stdout_and_exit(int retval) NORETURN FAST_FUNC; -+int fclose_if_not_stdin(FILE *file) FAST_FUNC; -+FILE* xfopen(const char *filename, const char *mode) FAST_FUNC; -+/* Prints warning to stderr and returns NULL on failure: */ -+FILE* fopen_or_warn(const char *filename, const char *mode) FAST_FUNC; -+/* "Opens" stdin if filename is special, else just opens file: */ -+FILE* xfopen_stdin(const char *filename) FAST_FUNC; -+FILE* fopen_or_warn_stdin(const char *filename) FAST_ |