summaryrefslogtreecommitdiff
path: root/package/busybox/patches
diff options
context:
space:
mode:
Diffstat (limited to 'package/busybox/patches')
-rw-r--r--package/busybox/patches/000-autoconf.patch18
-rw-r--r--package/busybox/patches/003-brctl_show_fix.patch14
-rw-r--r--package/busybox/patches/241-udhcpc-oversized_packets.patch80
-rw-r--r--package/busybox/patches/242-udhcpc_msgs.patch14
-rw-r--r--package/busybox/patches/300-netmsg.patch30
-rw-r--r--package/busybox/patches/340-lock_util.patch16
-rw-r--r--package/busybox/patches/350-httpd_redir.patch27
-rw-r--r--package/busybox/patches/460-truncated_ping_results.patch46
-rw-r--r--package/busybox/patches/470-insmod_search.patch10
-rw-r--r--package/busybox/patches/510-awk_include.patch30
-rw-r--r--package/busybox/patches/610-syslog-remote-retry-connection.patch57
-rw-r--r--package/busybox/patches/801-brctl_zero_time.patch13
-rw-r--r--package/busybox/patches/802-brctl_linux24.patch4
-rw-r--r--package/busybox/patches/920-freebsd_fixes.patch11
-rw-r--r--package/busybox/patches/920-mktemp.patch11
-rw-r--r--package/busybox/patches/921-sed.patch65
-rw-r--r--package/busybox/patches/922-shell.patch104
17 files changed, 323 insertions, 227 deletions
diff --git a/package/busybox/patches/000-autoconf.patch b/package/busybox/patches/000-autoconf.patch
deleted file mode 100644
index 54f61c4323..0000000000
--- a/package/busybox/patches/000-autoconf.patch
+++ /dev/null
@@ -1,18 +0,0 @@
---- a/applets/Kbuild
-+++ b/applets/Kbuild
-@@ -28,13 +28,13 @@ HOSTCFLAGS_usage_pod.o = -I$(srctree_sla
- applets/applets.o: include/usage_compressed.h include/applet_tables.h
-
- applets/applet_tables: .config $(srctree_slash)include/applets.h
--applets/usage: .config $(srctree_slash)include/applets.h
-+applets/usage: .config $(srctree_slash)include/applets.h include/autoconf.h
- applets/usage_pod: .config include/applet_tables.h $(srctree_slash)include/applets.h
-
- quiet_cmd_gen_usage_compressed = GEN include/usage_compressed.h
- cmd_gen_usage_compressed = $(srctree_slash)applets/usage_compressed include/usage_compressed.h applets
-
--include/usage_compressed.h: applets/usage $(srctree_slash)applets/usage_compressed
-+include/usage_compressed.h: applets/usage $(srctree_slash)applets/usage_compressed include/autoconf.h
- $(call cmd,gen_usage_compressed)
-
- quiet_cmd_gen_applet_tables = GEN include/applet_tables.h
diff --git a/package/busybox/patches/003-brctl_show_fix.patch b/package/busybox/patches/003-brctl_show_fix.patch
index b921c7890e..9a0e4e13b2 100644
--- a/package/busybox/patches/003-brctl_show_fix.patch
+++ b/package/busybox/patches/003-brctl_show_fix.patch
@@ -18,20 +18,14 @@
};
int fd;
---- a/networking/Config.in
-+++ b/networking/Config.in
-@@ -77,12 +77,12 @@ config FEATURE_BRCTL_FANCY
+--- a/networking/Config.src
++++ b/networking/Config.src
+@@ -79,7 +79,7 @@ config FEATURE_BRCTL_FANCY
This adds about 600 bytes.
config FEATURE_BRCTL_SHOW
- bool "Support show, showmac and showstp"
+ bool "Support show"
- default n
+ default y
depends on BRCTL && FEATURE_BRCTL_FANCY
help
- Add support for option which prints the current config:
-- showmacs, showstp, show
-+ show
-
- config DNSD
- bool "dnsd"
diff --git a/package/busybox/patches/241-udhcpc-oversized_packets.patch b/package/busybox/patches/241-udhcpc-oversized_packets.patch
index 0ee4c542ee..b810752fcb 100644
--- a/package/busybox/patches/241-udhcpc-oversized_packets.patch
+++ b/package/busybox/patches/241-udhcpc-oversized_packets.patch
@@ -1,52 +1,60 @@
--- a/networking/udhcp/packet.c
+++ b/networking/udhcp/packet.c
-@@ -164,6 +164,11 @@ uint16_t FAST_FUNC udhcp_checksum(void *
+@@ -165,6 +165,11 @@ uint16_t FAST_FUNC udhcp_checksum(void *
return ~sum;
}
+int udhcp_get_payload_len(struct dhcp_packet *dhcp_pkt)
+{
-+ return sizeof(struct dhcp_packet) - DHCP_OPTIONS_BUFSIZE + end_option(dhcp_pkt->options) + sizeof(dhcp_pkt->options[0]);
++ return sizeof(struct dhcp_packet) - DHCP_OPTIONS_BUFSIZE + udhcp_end_option(dhcp_pkt->options) + sizeof(dhcp_pkt->options[0]);
+}
+
/* Construct a ip/udp header for a packet, send packet */
int FAST_FUNC udhcp_send_raw_packet(struct dhcp_packet *dhcp_pkt,
- uint32_t source_ip, int source_port,
-@@ -175,11 +180,7 @@ int FAST_FUNC udhcp_send_raw_packet(stru
+ uint32_t source_nip, int source_port,
+@@ -173,11 +178,12 @@ int FAST_FUNC udhcp_send_raw_packet(stru
+ {
+ struct sockaddr_ll dest_sll;
+ struct ip_udp_dhcp_packet packet;
+- unsigned padding;
int fd;
int result = -1;
const char *msg;
--
-- enum {
-- IP_UPD_DHCP_SIZE = sizeof(struct ip_udp_dhcp_packet) - CONFIG_UDHCPC_SLACK_FOR_BUGGY_SERVERS,
-- UPD_DHCP_SIZE = IP_UPD_DHCP_SIZE - offsetof(struct ip_udp_dhcp_packet, udp),
-- };
-+ int p_len = udhcp_get_payload_len(dhcp_pkt);
++ int p_len = udhcp_get_payload_len(dhcp_pkt);
++
fd = socket(PF_PACKET, SOCK_DGRAM, htons(ETH_P_IP));
if (fd < 0) {
-@@ -189,7 +190,7 @@ int FAST_FUNC udhcp_send_raw_packet(stru
+ msg = "socket(%s)";
+@@ -186,7 +192,7 @@ int FAST_FUNC udhcp_send_raw_packet(stru
- memset(&dest, 0, sizeof(dest));
- memset(&packet, 0, sizeof(packet));
+ memset(&dest_sll, 0, sizeof(dest_sll));
+ memset(&packet, 0, offsetof(struct ip_udp_dhcp_packet, data));
- packet.data = *dhcp_pkt; /* struct copy */
+ memcpy(&(packet.data), dhcp_pkt, p_len);
- dest.sll_family = AF_PACKET;
- dest.sll_protocol = htons(ETH_P_IP);
-@@ -206,24 +207,19 @@ int FAST_FUNC udhcp_send_raw_packet(stru
- packet.ip.daddr = dest_ip;
+ dest_sll.sll_family = AF_PACKET;
+ dest_sll.sll_protocol = htons(ETH_P_IP);
+@@ -208,27 +214,25 @@ int FAST_FUNC udhcp_send_raw_packet(stru
+ * In order to work with those buggy servers,
+ * we truncate packets after end option byte.
+ */
+- padding = DHCP_OPTIONS_BUFSIZE - 1 - udhcp_end_option(packet.data.options);
+
+ packet.ip.protocol = IPPROTO_UDP;
+ packet.ip.saddr = source_nip;
+ packet.ip.daddr = dest_nip;
packet.udp.source = htons(source_port);
packet.udp.dest = htons(dest_port);
- /* size, excluding IP header: */
-- packet.udp.len = htons(UPD_DHCP_SIZE);
+- packet.udp.len = htons(UPD_DHCP_SIZE - padding);
- /* for UDP checksumming, ip.len is set to UDP packet len */
+ p_len += sizeof(packet.udp);
+ packet.udp.len = htons(p_len);
packet.ip.tot_len = packet.udp.len;
-- packet.udp.check = udhcp_checksum(&packet, IP_UPD_DHCP_SIZE);
+- packet.udp.check = udhcp_checksum(&packet, IP_UPD_DHCP_SIZE - padding);
- /* but for sending, it is set to IP packet len */
-- packet.ip.tot_len = htons(IP_UPD_DHCP_SIZE);
+- packet.ip.tot_len = htons(IP_UPD_DHCP_SIZE - padding);
+ p_len += sizeof(packet.ip);
+ packet.udp.check = udhcp_checksum(&packet, p_len);
+ packet.ip.tot_len = htons(p_len);
@@ -55,34 +63,26 @@
packet.ip.ttl = IPDEFTTL;
packet.ip.check = udhcp_checksum(&packet.ip, sizeof(packet.ip));
-- /* Currently we send full-sized DHCP packets (zero padded).
-- * If you need to change this: last byte of the packet is
-- * packet.data.options[end_option(packet.data.options)]
-- */
udhcp_dump_packet(dhcp_pkt);
-- result = sendto(fd, &packet, IP_UPD_DHCP_SIZE, 0,
+- result = sendto(fd, &packet, IP_UPD_DHCP_SIZE - padding, /*flags:*/ 0,
+ result = sendto(fd, &packet, p_len, 0,
- (struct sockaddr *) &dest, sizeof(dest));
+ (struct sockaddr *) &dest_sll, sizeof(dest_sll));
msg = "sendto";
ret_close:
-@@ -245,10 +241,6 @@ int FAST_FUNC udhcp_send_kernel_packet(s
+@@ -246,7 +250,6 @@ int FAST_FUNC udhcp_send_kernel_packet(s
+ uint32_t dest_nip, int dest_port)
+ {
+ struct sockaddr_in client;
+- unsigned padding;
+ int fd;
int result = -1;
const char *msg;
+@@ -278,8 +281,7 @@ int FAST_FUNC udhcp_send_kernel_packet(s
-- enum {
-- DHCP_SIZE = sizeof(struct dhcp_packet) - CONFIG_UDHCPC_SLACK_FOR_BUGGY_SERVERS,
-- };
--
- fd = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP);
- if (fd < 0) {
- msg = "socket(%s)";
-@@ -274,9 +266,8 @@ int FAST_FUNC udhcp_send_kernel_packet(s
- goto ret_close;
- }
-
-- /* Currently we send full-sized DHCP packets (see above) */
udhcp_dump_packet(dhcp_pkt);
-- result = safe_write(fd, dhcp_pkt, DHCP_SIZE);
+
+- padding = DHCP_OPTIONS_BUFSIZE - 1 - udhcp_end_option(dhcp_pkt->options);
+- result = safe_write(fd, dhcp_pkt, DHCP_SIZE - padding);
+ result = safe_write(fd, dhcp_pkt, udhcp_get_payload_len(dhcp_pkt));
msg = "write";
ret_close:
diff --git a/package/busybox/patches/242-udhcpc_msgs.patch b/package/busybox/patches/242-udhcpc_msgs.patch
index 1200c34c7d..ea606ecc3c 100644
--- a/package/busybox/patches/242-udhcpc_msgs.patch
+++ b/package/busybox/patches/242-udhcpc_msgs.patch
@@ -1,16 +1,16 @@
---- a/networking/udhcp/clientpacket.c
-+++ b/networking/udhcp/clientpacket.c
-@@ -126,6 +126,7 @@ int FAST_FUNC send_decline(uint32_t xid,
- int FAST_FUNC send_discover(uint32_t xid, uint32_t requested)
+--- a/networking/udhcp/dhcpc.c
++++ b/networking/udhcp/dhcpc.c
+@@ -428,6 +428,7 @@ static int raw_bcast_from_client_config_
+ static int send_discover(uint32_t xid, uint32_t requested)
{
struct dhcp_packet packet;
+ static int msgs = 0;
init_packet(&packet, DHCPDISCOVER);
packet.xid = xid;
-@@ -138,6 +139,7 @@ int FAST_FUNC send_discover(uint32_t xid
-
- add_param_req_option(&packet);
+@@ -438,6 +439,7 @@ static int send_discover(uint32_t xid, u
+ udhcp_add_simple_option(&packet, DHCP_MAX_SIZE, htons(576));
+ add_client_options(&packet);
+ if (msgs++ < 3)
bb_info_msg("Sending discover...");
diff --git a/package/busybox/patches/300-netmsg.patch b/package/busybox/patches/300-netmsg.patch
index 08e77ab471..3553b640c0 100644
--- a/package/busybox/patches/300-netmsg.patch
+++ b/package/busybox/patches/300-netmsg.patch
@@ -1,5 +1,5 @@
---- a/include/applets.h
-+++ b/include/applets.h
+--- a/include/applets.src.h
++++ b/include/applets.src.h
@@ -282,6 +282,7 @@ IF_MT(APPLET(mt, _BB_DIR_BIN, _BB_SUID_D
IF_MV(APPLET(mv, _BB_DIR_BIN, _BB_SUID_DROP))
IF_NAMEIF(APPLET(nameif, _BB_DIR_SBIN, _BB_SUID_DROP))
@@ -8,8 +8,8 @@
IF_NETSTAT(APPLET(netstat, _BB_DIR_BIN, _BB_SUID_DROP))
IF_NICE(APPLET(nice, _BB_DIR_BIN, _BB_SUID_DROP))
IF_NMETER(APPLET(nmeter, _BB_DIR_USR_BIN, _BB_SUID_DROP))
---- a/include/usage.h
-+++ b/include/usage.h
+--- a/include/usage.src.h
++++ b/include/usage.src.h
@@ -3166,6 +3166,9 @@
#endif
@@ -20,23 +20,23 @@
#define netstat_trivial_usage \
"[-laentuwxr"IF_FEATURE_NETSTAT_WIDE("W")IF_FEATURE_NETSTAT_PRG("p")"]"
#define netstat_full_usage "\n\n" \
---- a/networking/Config.in
-+++ b/networking/Config.in
-@@ -628,6 +628,12 @@ config NC
- A simple Unix utility which reads and writes data across network
- connections.
+--- a/networking/Config.src
++++ b/networking/Config.src
+@@ -623,6 +623,12 @@ config FEATURE_NAMEIF_EXTENDED
+ new_interface_name mac=00:80:C8:38:91:B5
+ new_interface_name 00:80:C8:38:91:B5
+config NETMSG
+ bool "netmsg"
+ default n
+ help
-+ simple program for sending udp broadcast messages
++ simple program for sending udp broadcast messages
+
- config NC_SERVER
- bool "Netcat server options (-l)"
- default n
---- a/networking/Kbuild
-+++ b/networking/Kbuild
+ config NETSTAT
+ bool "netstat"
+ default y
+--- a/networking/Kbuild.src
++++ b/networking/Kbuild.src
@@ -25,6 +25,7 @@ lib-$(CONFIG_IP) += ip.o
lib-$(CONFIG_IPCALC) += ipcalc.o
lib-$(CONFIG_NAMEIF) += nameif.o
diff --git a/package/busybox/patches/340-lock_util.patch b/package/busybox/patches/340-lock_util.patch
index 05cf7e09a3..4783ad11eb 100644
--- a/package/busybox/patches/340-lock_util.patch
+++ b/package/busybox/patches/340-lock_util.patch
@@ -1,5 +1,5 @@
---- a/include/applets.h
-+++ b/include/applets.h
+--- a/include/applets.src.h
++++ b/include/applets.src.h
@@ -234,6 +234,7 @@ IF_LN(APPLET_NOEXEC(ln, ln, _BB_DIR_BIN,
IF_LOAD_POLICY(APPLET(load_policy, _BB_DIR_USR_SBIN, _BB_SUID_DROP))
IF_LOADFONT(APPLET(loadfont, _BB_DIR_USR_SBIN, _BB_SUID_DROP))
@@ -8,8 +8,8 @@
IF_LOGGER(APPLET(logger, _BB_DIR_USR_BIN, _BB_SUID_DROP))
IF_LOGIN(APPLET(login, _BB_DIR_BIN, _BB_SUID_REQUIRE))
IF_LOGNAME(APPLET_NOFORK(logname, logname, _BB_DIR_USR_BIN, _BB_SUID_DROP, logname))
---- a/include/usage.h
-+++ b/include/usage.h
+--- a/include/usage.src.h
++++ b/include/usage.src.h
@@ -2357,6 +2357,9 @@
#define loadkmap_example_usage \
"$ loadkmap < /etc/i18n/lang-keymap\n"
@@ -20,8 +20,8 @@
#define logger_trivial_usage \
"[OPTIONS] [MESSAGE]"
#define logger_full_usage "\n\n" \
---- a/miscutils/Config.in
-+++ b/miscutils/Config.in
+--- a/miscutils/Config.src
++++ b/miscutils/Config.src
@@ -463,6 +463,11 @@ config FEATURE_HDPARM_HDIO_GETSET_DMA
help
Enables the 'hdparm -d' option to get/set using_dma flag.
@@ -34,8 +34,8 @@
config MAKEDEVS
bool "makedevs"
default n
---- a/miscutils/Kbuild
-+++ b/miscutils/Kbuild
+--- a/miscutils/Kbuild.src
++++ b/miscutils/Kbuild.src
@@ -27,6 +27,7 @@ lib-$(CONFIG_INOTIFYD) += inotifyd.o
lib-$(CONFIG_FEATURE_LAST_SMALL)+= last.o
lib-$(CONFIG_FEATURE_LAST_FANCY)+= last_fancy.o
diff --git a/package/busybox/patches/350-httpd_redir.patch b/package/busybox/patches/350-httpd_redir.patch
index bbb8eb4aab..6161871cf8 100644
--- a/package/busybox/patches/350-httpd_redir.patch
+++ b/package/busybox/patches/350-httpd_redir.patch
@@ -1,22 +1,25 @@
---- a/include/usage.h
-+++ b/include/usage.h
-@@ -1727,6 +1727,7 @@
+--- a/include/usage.src.h
++++ b/include/usage.src.h
+@@ -1718,7 +1718,8 @@ INSERT
+ IF_FEATURE_HTTPD_SETUID(" [-u USER[:GRP]]") \
IF_FEATURE_HTTPD_BASIC_AUTH(" [-r REALM]") \
" [-h HOME]\n" \
- "or httpd -d/-e" IF_FEATURE_HTTPD_AUTH_MD5("/-m") " STRING"
+- "or httpd -d/-e" IF_FEATURE_HTTPD_AUTH_MD5("/-m") " STRING"
++ "or httpd -d/-e" IF_FEATURE_HTTPD_AUTH_MD5("/-m") " STRING" \
+ " [-R <path> [-H <host>]]"
#define httpd_full_usage "\n\n" \
"Listen for incoming HTTP requests\n" \
"\nOptions:" \
-@@ -1744,6 +1745,8 @@
- "\n -m STRING MD5 crypt STRING") \
- "\n -e STRING HTML encode STRING" \
- "\n -d STRING URL decode STRING" \
-+ "\n -R PATH Redirect target path" \
-+ "\n -H HOST Redirect target host" \
+@@ -2319,6 +2320,9 @@ INSERT
+ #define loadkmap_example_usage \
+ "$ loadkmap < /etc/i18n/lang-keymap\n"
- #define hwclock_trivial_usage \
- IF_FEATURE_HWCLOCK_LONG_OPTIONS( \
++#define lock_trivial_usage NOUSAGE_STR
++#define lock_full_usage ""
++
+ #define logger_trivial_usage \
+ "[OPTIONS] [MESSAGE]"
+ #define logger_full_usage "\n\n" \
--- a/networking/httpd.c
+++ b/networking/httpd.c
@@ -250,6 +250,8 @@ struct globals {
diff --git a/package/busybox/patches/460-truncated_ping_results.patch b/package/busybox/patches/460-truncated_ping_results.patch
deleted file mode 100644
index 25f0555497..0000000000
--- a/package/busybox/patches/460-truncated_ping_results.patch
+++ /dev/null
@@ -1,46 +0,0 @@
---- a/networking/ping.c
-+++ b/networking/ping.c
-@@ -79,6 +79,7 @@ static int in_cksum(unsigned short *buf,
- /* simple version */
-
- static char *hostname;
-+static unsigned datalen = DEFDATALEN;
-
- static void noresp(int ign UNUSED_PARAM)
- {
-@@ -91,7 +92,7 @@ static void ping4(len_and_sockaddr *lsa)
- struct sockaddr_in pingaddr;
- struct icmp *pkt;
- int pingsock, c;
-- char packet[DEFDATALEN + MAXIPLEN + MAXICMPLEN];
-+ char packet[datalen + ICMP_MINLEN + MAXIPLEN + MAXICMPLEN];
-
- pingsock = create_icmp_socket();
- pingaddr = lsa->u.sin;
-@@ -101,7 +102,7 @@ static void ping4(len_and_sockaddr *lsa)
- pkt->icmp_type = ICMP_ECHO;
- pkt->icmp_cksum = in_cksum((unsigned short *) pkt, sizeof(packet));
-
-- c = xsendto(pingsock, packet, DEFDATALEN + ICMP_MINLEN,
-+ c = xsendto(pingsock, packet, datalen + ICMP_MINLEN,
- (struct sockaddr *) &pingaddr, sizeof(pingaddr));
-
- /* listen for replies */
-@@ -135,7 +136,7 @@ static void ping6(len_and_sockaddr *lsa)
- struct icmp6_hdr *pkt;
- int pingsock, c;
- int sockopt;
-- char packet[DEFDATALEN + MAXIPLEN + MAXICMPLEN];
-+ char packet[datalen + ICMP_MINLEN + MAXIPLEN + MAXICMPLEN];
-
- pingsock = create_icmp6_socket();
- pingaddr = lsa->u.sin6;
-@@ -147,7 +148,7 @@ static void ping6(len_and_sockaddr *lsa)
- sockopt = offsetof(struct icmp6_hdr, icmp6_cksum);
- setsockopt(pingsock, SOL_RAW, IPV6_CHECKSUM, &sockopt, sizeof(sockopt));
-
-- c = xsendto(pingsock, packet, DEFDATALEN + sizeof (struct icmp6_hdr),
-+ c = xsendto(pingsock, packet, datalen + sizeof (struct icmp6_hdr),
- (struct sockaddr *) &pingaddr, sizeof(pingaddr));
-
- /* listen for replies */
diff --git a/package/busybox/patches/470-insmod_search.patch b/package/busybox/patches/470-insmod_search.patch
index 6f2da661bf..fc060dda84 100644
--- a/package/busybox/patches/470-insmod_search.patch
+++ b/package/busybox/patches/470-insmod_search.patch
@@ -117,14 +117,14 @@
+done:
return rc;
}
---- a/modutils/Config.in
-+++ b/modutils/Config.in
-@@ -226,7 +226,7 @@ config FEATURE_MODUTILS_SYMBOLS
+--- a/modutils/Config.src
++++ b/modutils/Config.src
+@@ -228,7 +228,7 @@ config FEATURE_MODUTILS_SYMBOLS
config DEFAULT_MODULES_DIR
string "Default directory containing modules"
default "/lib/modules"
-- depends on DEPMOD || MODPROBE || MODPROBE_SMALL
-+ depends on DEPMOD || INSMOD || MODPROBE || MODPROBE_SMALL
+- depends on DEPMOD || MODPROBE || MODPROBE_SMALL || MODINFO
++ depends on DEPMOD || MODPROBE || MODPROBE_SMALL || MODINFO || INSMOD
help
Directory that contains kernel modules.
Defaults to "/lib/modules"
diff --git a/package/busybox/patches/510-awk_include.patch b/package/busybox/patches/510-awk_include.patch
index eda5beee9d..36dd080f97 100644
--- a/package/busybox/patches/510-awk_include.patch
+++ b/package/busybox/patches/510-awk_include.patch
@@ -1,6 +1,6 @@
--- a/editors/awk.c
+++ b/editors/awk.c
-@@ -53,9 +53,14 @@ typedef struct chain_s {
+@@ -70,9 +70,14 @@ typedef struct chain_s {
} chain;
/* Function */
@@ -15,7 +15,7 @@
} func;
/* I/O stream */
-@@ -1424,7 +1429,8 @@ static void parse_program(char *p)
+@@ -1453,7 +1458,8 @@ static void parse_program(char *p)
next_token(TC_FUNCTION);
g_pos++;
f = newfunc(t_string);
@@ -25,38 +25,38 @@
f->nargs = 0;
while (next_token(TC_VARIABLE | TC_SEQTERM) & TC_VARIABLE) {
v = findvar(ahash, t_string);
-@@ -1433,7 +1439,7 @@ static void parse_program(char *p)
+@@ -1462,7 +1468,7 @@ static void parse_program(char *p)
if (next_token(TC_COMMA | TC_SEQTERM) & TC_SEQTERM)
break;
}
-- seq = &(f->body);
-+ seq = &(f->x.body);
+- seq = &f->body;
++ seq = &f->x.body;
chain_group();
clear_array(ahash);
-@@ -2446,7 +2452,8 @@ static var *evaluate(node *op, var *res)
- break;
+@@ -2547,7 +2553,8 @@ static var *evaluate(node *op, var *res)
+ var *vbeg, *v;
+ const char *sv_progname;
- case XC( OC_FUNC ):
- if (!op->r.f->body.first)
+ if ((op->r.f->type == AWKFUNC) &&
+ !op->r.f->x.body.first)
syntax_error(EMSG_UNDEF_FUNC);
- X.v = R.v = nvalloc(op->r.f->nargs + 1);
-@@ -2463,7 +2470,10 @@ static var *evaluate(node *op, var *res)
- fnargs = X.v;
+ vbeg = v = nvalloc(op->r.f->nargs + 1);
+@@ -2564,7 +2571,10 @@ static var *evaluate(node *op, var *res)
+ fnargs = vbeg;
+ sv_progname = g_progname;
- L.s = g_progname;
- res = evaluate(op->r.f->body.first, res);
+ if (op->r.f->type == AWKFUNC)
+ res = evaluate(op->r.f->x.body.first, res);
+ else if (op->r.f->type == CFUNC)
+ res = op->r.f->x.cfunc(res, fnargs, op->r.f->nargs);
- g_progname = L.s;
+ g_progname = sv_progname;
nvfree(fnargs);
-@@ -2829,6 +2839,143 @@ static rstream *next_input_file(void)
+@@ -2942,6 +2952,143 @@ static rstream *next_input_file(void)
#undef files_happen
}
@@ -200,7 +200,7 @@
int awk_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
int awk_main(int argc, char **argv)
{
-@@ -2894,6 +3041,9 @@ int awk_main(int argc, char **argv)
+@@ -3007,6 +3154,9 @@ int awk_main(int argc, char **argv)
*s1 = '=';
}
}
diff --git a/package/busybox/patches/610-syslog-remote-retry-connection.patch b/package/busybox/patches/610-syslog-remote-retry-connection.patch
index 5602e2b51d..949ac9fd47 100644
--- a/package/busybox/patches/610-syslog-remote-retry-connection.patch
+++ b/package/busybox/patches/610-syslog-remote-retry-connection.patch
@@ -1,40 +1,47 @@
-Index: busybox-1.16.1/sysklogd/syslogd.c
-===================================================================
---- busybox-1.16.1.orig/sysklogd/syslogd.c 2010-03-28 13:44:04.000000000 -0400
-+++ busybox-1.16.1/sysklogd/syslogd.c 2010-06-17 21:48:11.000000000 -0400
-@@ -555,6 +555,7 @@
+--- a/sysklogd/syslogd.c
++++ b/sysklogd/syslogd.c
+@@ -98,6 +98,8 @@ struct globals {
+ GLOBALS
+
+ #if ENABLE_FEATURE_REMOTE_LOG
++ len_and_sockaddr *remoteAddr;
++ int remoteFD;
+ llist_t *remoteHosts;
+ #endif
+ #if ENABLE_FEATURE_IPC_SYSLOG
+@@ -554,6 +556,7 @@ static void do_syslogd(void) NORETURN;
static void do_syslogd(void)
{
int sock_fd;
+ int send_err = 0;
- #if ENABLE_FEATURE_SYSLOGD_DUP
- int last_sz = -1;
- char *last_buf;
-@@ -632,10 +633,23 @@
- * over network, mimic that */
- recvbuf[sz] = '\n';
- /* send message to remote logger, ignore possible error */
+ #if ENABLE_FEATURE_REMOTE_LOG
+ llist_t *item;
+ #endif
+@@ -637,10 +640,23 @@ static void do_syslogd(void)
+ continue;
+ }
+ /* Send message to remote logger, ignore possible error */
- /* TODO: on some errors, close and set G.remoteFD to -1
- * so that DNS resolution and connect is retried? */
-- sendto(G.remoteFD, recvbuf, sz+1, MSG_DONTWAIT,
-- &G.remoteAddr->u.sa, G.remoteAddr->len);
-+ if ( sendto(G.remoteFD, recvbuf, sz+1, MSG_DONTWAIT,
-+ &G.remoteAddr->u.sa, G.remoteAddr->len) == -1 ) {
+- sendto(rh->remoteFD, recvbuf, sz+1, MSG_DONTWAIT,
+- &(rh->remoteAddr->u.sa), rh->remoteAddr->len);
++ if (sendto(rh->remoteFD, recvbuf, sz+1, MSG_DONTWAIT,
++ &G.remoteAddr->u.sa, G.remoteAddr->len) == -1 ) {
+ send_err = errno;
-+ }
++ }
+
+ /* On some errors, close and set G.remoteFD to -1
+ * so that DNS resolution and connect is retried */
-+ switch (send_err) {
-+ case ECONNRESET:
-+ case EDESTADDRREQ:
-+ case EISCONN:
-+ case ENOTCONN:
-+ case EPIPE:
++ switch (send_err) {
++ case ECONNRESET:
++ case EDESTADDRREQ:
++ case EISCONN:
++ case ENOTCONN:
++ case EPIPE:
+ close(G.remoteFD);
+ G.remoteFD = -1;
+ break;
-+ }
- no_luck: ;
++ }
}
#endif
+ if (!ENABLE_FEATURE_REMOTE_LOG || (option_mask32 & OPT_locallog)) {
diff --git a/package/busybox/patches/801-brctl_zero_time.patch b/package/busybox/patches/801-brctl_zero_time.patch
deleted file mode 100644
index 52e5623e64..0000000000
--- a/package/busybox/patches/801-brctl_zero_time.patch
+++ /dev/null
@@ -1,13 +0,0 @@
---- a/networking/brctl.c
-+++ b/networking/brctl.c
-@@ -48,8 +48,9 @@ static ALWAYS_INLINE void strtotimeval(s
- {
- double secs;
- #if BRCTL_USE_INTERNAL
-+ errno = 0;
- secs = /*bb_*/strtod(time_str, NULL);
-- if (!secs)
-+ if (errno)
- #else
- if (sscanf(time_str, "%lf", &secs) != 1)
- #endif
diff --git a/package/busybox/patches/802-brctl_linux24.patch b/package/busybox/patches/802-brctl_linux24.patch
index 9081e5adc4..09ee8be1ee 100644
--- a/package/busybox/patches/802-brctl_linux24.patch
+++ b/package/busybox/patches/802-brctl_linux24.patch
@@ -4,8 +4,8 @@
/* Maximum number of ports supported per bridge interface. */
#ifndef MAX_PORTS
--#define MAX_PORTS 32
-+#define MAX_PORTS 1024
+-# define MAX_PORTS 32
++# define MAX_PORTS 1024
#endif
/* Use internal number parsing and not the "exact" conversion. */
diff --git a/package/busybox/patches/920-freebsd_fixes.patch b/package/busybox/patches/920-freebsd_fixes.patch
deleted file mode 100644
index f823417ea9..0000000000
--- a/package/busybox/patches/920-freebsd_fixes.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/include/platform.h
-+++ b/include/platform.h
-@@ -253,7 +253,7 @@ typedef int socklen_t;
- # define HAVE_FEATURES_H
- # include <stdint.h>
- # define HAVE_STDINT_H
--#elif !defined __APPLE__
-+#elif !defined(__APPLE__) && !defined(__FreeBSD__)
- /* Largest integral types. */
- # if BB_BIG_ENDIAN
- /* Looks BROKEN! */
diff --git a/package/busybox/patches/920-mktemp.patch b/package/busybox/patches/920-mktemp.patch
new file mode 100644
index 0000000000..7116b1ee6a
--- /dev/null
+++ b/package/busybox/patches/920-mktemp.patch
@@ -0,0 +1,11 @@
+--- a/debianutils/mktemp.ci
++++ b/debianutils/mktemp.c
+@@ -50,7 +50,7 @@ int mktemp_main(int argc UNUSED_PARAM, c
+ opts = getopt32(argv, "dqtp:", &path);
+
+ chp = argv[optind] ? argv[optind] : xstrdup("tmp.XXXXXX");
+- if (chp[0] != '/' || (opts & 8))
++ if (!strchr(chp, '/') || (opts & 8))
+ chp = concat_path_file(path, chp);
+
+ if (opts & 1) { /* -d */
diff --git a/package/busybox/patches/921-sed.patch b/package/busybox/patches/921-sed.patch
new file mode 100644
index 0000000000..08bfa2a7e8
--- /dev/null
+++ b/package/busybox/patches/921-sed.patch
@@ -0,0 +1,65 @@
+--- a/editors/sed.c
++++ b/editors/sed.c
+@@ -61,6 +61,10 @@
+ #include "libbb.h"
+ #include "xregex.h"
+
++enum {
++ OPT_in_place = 1 << 0,
++};
++
+ /* Each sed command turns into one of these structures. */
+ typedef struct sed_cmd_s {
+ /* Ordered by alignment requirements: currently 36 bytes on x86 */
+@@ -938,8 +942,11 @@ static void process_files(void)
+
+ if (matched) {
+ /* once matched, "n,xxx" range is dead, disabling it */
+- if (sed_cmd->beg_line > 0)
++ if (sed_cmd->beg_line > 0
++ && !(option_mask32 & OPT_in_place) /* but not for -i */
++ ) {
+ sed_cmd->beg_line = -2;
++ }
+ sed_cmd->in_match = !(
+ /* has the ending line come, or is this a single address command? */
+ (sed_cmd->end_line ?
+@@ -1270,9 +1277,6 @@ static void add_cmd_block(char *cmdstr)
+ int sed_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
+ int sed_main(int argc UNUSED_PARAM, char **argv)
+ {
+- enum {
+- OPT_in_place = 1 << 0,
+- };
+ unsigned opt;
+ llist_t *opt_e, *opt_f;
+ int status = EXIT_SUCCESS;
+@@ -1292,6 +1296,7 @@ int sed_main(int argc UNUSED_PARAM, char
+ opt_e = opt_f = NULL;
+ opt_complementary = "e::f::" /* can occur multiple times */
+ "nn"; /* count -n */
++ /* -i must be first, to match OPT_in_place definition */
+ opt = getopt32(argv, "irne:f:", &opt_e, &opt_f,
+ &G.be_quiet); /* counter for -n */
+ //argc -= optind;
+diff -urpN busybox-1.17.1/testsuite/sed.tests busybox-1.17.1-sed/testsuite/sed.tests
+--- busybox-1.17.1/testsuite/sed.tests 2010-07-06 04:25:54.000000000 +0200
++++ busybox-1.17.1-sed/testsuite/sed.tests 2010-08-01 04:19:26.000000000 +0200
+@@ -270,11 +270,16 @@ testing "sed a cmd ended by double backs
+ | two \\
+ '
+
+-# fisrt three lines are deleted; 4th line is matched and printed by "2,3" and by "4" ranges
++# first three lines are deleted; 4th line is matched and printed by "2,3" and by "4" ranges
+ testing "sed with N skipping lines past ranges on next cmds" \
+ "sed -n '1{N;N;d};1p;2,3p;3p;4p'" \
+ "4\n4\n" "" "1\n2\n3\n4\n"
+
++testing "sed -i with address modifies all files, not only first" \
++ "cp input input2; sed -i -e '1s/foo/bar/' input input2 && cat input input2; rm input2" \
++ "bar\nbar\n" "foo\n" ""
++
++
+ # testing "description" "arguments" "result" "infile" "stdin"
+
+ exit $FAILCOUNT
diff --git a/package/busybox/patches/922-shell.patch b/package/busybox/patches/922-shell.patch
new file mode 100644
index 0000000000..66d3506fc3
--- /dev/null
+++ b/package/busybox/patches/922-shell.patch
@@ -0,0 +1,104 @@
+--- a/shell/ash.c
++++ b/shell/ash.c
+@@ -4515,6 +4515,7 @@ clear_traps(void)
+ INT_ON;
+ }
+ }
++ may_have_traps = 0;
+ }
+
+ /* Lives far away from here, needed for forkchild */
+diff -urpN busybox-1.17.1/shell/ash_test/ash-signals/signal7.right busybox-1.17.1-shell/shell/ash_test/ash-signals/signal7.right
+--- busybox-1.17.1/shell/ash_test/ash-signals/signal7.right 1970-01-01 01:00:00.000000000 +0100
++++ busybox-1.17.1-shell/shell/ash_test/ash-signals/signal7.right 2010-07-25 13:09:32.000000000 +0200
+@@ -0,0 +1 @@
++Bug detected: 0
+diff -urpN busybox-1.17.1/shell/ash_test/ash-signals/signal7.tests busybox-1.17.1-shell/shell/ash_test/ash-signals/signal7.tests
+--- busybox-1.17.1/shell/ash_test/ash-signals/signal7.tests 1970-01-01 01:00:00.000000000 +0100
++++ busybox-1.17.1-shell/shell/ash_test/ash-signals/signal7.tests 2010-07-25 13:09:32.000000000 +0200
+@@ -0,0 +1,18 @@
++bug() {
++ trap : exit
++ # Bug was causing sh to be run in subshell,
++ # as if this line is replaced with (sh -c ...; exit $?) &
++ # here:
++ sh -c 'echo REAL_CHILD=$$' &
++ echo PARENTS_IDEA_OF_CHILD=$!
++ wait # make sure bkgd shell completes
++}
++
++bug | {
++while read varval; do
++ eval $varval
++done
++test x"$REAL_CHILD" != x"" \
++&& test x"$REAL_CHILD" = x"$PARENTS_IDEA_OF_CHILD"
++echo "Bug detected: $?"
++}
+diff -urpN busybox-1.17.1/shell/hush.c busybox-1.17.1-shell/shell/hush.c
+--- busybox-1.17.1/shell/hush.c 2010-07-25 00:12:43.000000000 +0200
++++ busybox-1.17.1-shell/shell/hush.c 2010-07-25 13:09:32.000000000 +0200
+@@ -3901,8 +3901,6 @@ static void insert_bg_job(struct pipe *p
+
+ if (G_interactive_fd)
+ printf("[%d] %d %s\n", job->jobid, job->cmds[0].pid, job->cmdtext);
+- /* Last command's pid goes to $! */
+- G.last_bg_pid = job->cmds[job->num_cmds - 1].pid;
+ G.last_jobid = job->jobid;
+ }
+
+@@ -4825,6 +4823,8 @@ static int run_list(struct pipe *pi)
+ if (G.run_list_level == 1)
+ insert_bg_job(pi);
+ #endif
++ /* Last command's pid goes to $! */
++ G.last_bg_pid = pi->cmds[pi->num_cmds - 1].pid;
+ G.last_exitcode = rcode = EXIT_SUCCESS;
+ debug_printf_exec(": cmd&: exitcode EXIT_SUCCESS\n");
+ } else {
+diff -urpN busybox-1.17.1/shell/hush_test/hush-trap/signal7.right busybox-1.17.1-shell/shell/hush_test/hush-trap/signal7.right
+--- busybox-1.17.1/shell/hush_test/hush-trap/signal7.right 1970-01-01 01:00:00.000000000 +0100
++++ busybox-1.17.1-shell/shell/hush_test/hush-trap/signal7.right 2010-07-25 13:09:32.000000000 +0200
+@@ -0,0 +1 @@
++Bug detected: 0
+diff -urpN busybox-1.17.1/shell/hush_test/hush-trap/signal7.tests busybox-1.17.1-shell/shell/hush_test/hush-trap/signal7.tests
+--- busybox-1.17.1/shell/hush_test/hush-trap/signal7.tests 1970-01-01 01:00:00.000000000 +0100
++++ busybox-1.17.1-shell/shell/hush_test/hush-trap/signal7.tests 2010-07-25 13:09:32.000000000 +0200
+@@ -0,0 +1,18 @@
++bug() {
++ trap : exit
++ # Bug was causing sh to be run in subshell,
++ # as if this line is replaced with (sh -c ...; exit $?) &
++ # here:
++ sh -c 'echo REAL_CHILD=$$' &
++ echo PARENTS_IDEA_OF_CHILD=$!
++ wait # make sure bkgd shell completes
++}
++
++bug | {
++while read varval; do
++ eval $varval
++done
++test x"$REAL_CHILD" != x"" \
++&& test x"$REAL_CHILD" = x"$PARENTS_IDEA_OF_CHILD"
++echo "Bug detected: $?"
++}
+diff -urpN busybox-1.17.1/shell/shell_common.c busybox-1.17.1-shell/shell/shell_common.c
+--- busybox-1.17.1/shell/shell_common.c 2010-07-06 04:25:54.000000000 +0200
++++ busybox-1.17.1-shell/shell/shell_common.c 2010-07-27 08:41:43.000000000 +0200
+@@ -428,9 +428,14 @@ shell_builtin_ulimit(char **argv)
+ val <<= l->factor_shift;
+ }
+ //bb_error_msg("opt %c val_str:'%s' val:%lld", opt_char, val_str, (long long)val);
++ /* from man bash: "If neither -H nor -S
++ * is specified, both the soft and hard
++ * limits are set. */
++ if (!opts)
++ opts = OPT_hard + OPT_soft;
+ if (opts & OPT_hard)
+ limit.rlim_max = val;
+- if ((opts & OPT_soft) || opts == 0)
++ if (opts & OPT_soft)
+ limit.rlim_cur = val;
+ //bb_error_msg("setrlimit(%d, %lld, %lld)", l->cmd, (long long)limit.rlim_cur, (long long)limit.rlim_max);
+ if (setrlimit(l->cmd, &limit) < 0) {