summaryrefslogtreecommitdiffstats
path: root/main/musl
diff options
context:
space:
mode:
authorTimo Teräs <timo.teras@iki.fi>2014-06-06 08:34:31 +0300
committerTimo Teräs <timo.teras@iki.fi>2014-06-06 08:34:31 +0300
commitace7896296b96faa72fcb545501b6efba632f875 (patch)
tree30ac8d90dd4ab894398353fc3aa7008d7646ad84 /main/musl
parentb2c27b78793d9e95c01546e5c5a2326822f4d07e (diff)
downloadaports-ace7896296b96faa72fcb545501b6efba632f875.tar.bz2
aports-ace7896296b96faa72fcb545501b6efba632f875.tar.xz
main/musl: upgrade to git snapshot of 2014-06-05
important bug fixes, as well as few new features
Diffstat (limited to 'main/musl')
-rw-r--r--main/musl/0003-d85d261e-to-2abb70c3.patch540
-rw-r--r--main/musl/APKBUILD6
2 files changed, 545 insertions, 1 deletions
diff --git a/main/musl/0003-d85d261e-to-2abb70c3.patch b/main/musl/0003-d85d261e-to-2abb70c3.patch
new file mode 100644
index 000000000..0ceecf5eb
--- /dev/null
+++ b/main/musl/0003-d85d261e-to-2abb70c3.patch
@@ -0,0 +1,540 @@
+diff --git a/include/netdb.h b/include/netdb.h
+index dfc70e2..703a4b2 100644
+--- a/include/netdb.h
++++ b/include/netdb.h
+@@ -41,7 +41,7 @@ struct addrinfo
+ #define NI_NOFQDN 0x04
+ #define NI_NAMEREQD 0x08
+ #define NI_DGRAM 0x10
+-/*#define NI_NUMERICSCOPE */
++#define NI_NUMERICSCOPE 0x100
+
+ #define EAI_BADFLAGS -1
+ #define EAI_NONAME -2
+diff --git a/src/network/dn_expand.c b/src/network/dn_expand.c
+index 96adf37..849df19 100644
+--- a/src/network/dn_expand.c
++++ b/src/network/dn_expand.c
+@@ -4,10 +4,11 @@
+ int __dn_expand(const unsigned char *base, const unsigned char *end, const unsigned char *src, char *dest, int space)
+ {
+ const unsigned char *p = src;
+- int len = -1, j;
+- if (space > 256) space = 256;
++ char *dend = dest + (space > 254 ? 254 : space);
++ int len = -1, i, j;
+ if (p==end || !*p) return -1;
+- for (;;) {
++ /* detect reference loop using an iteration counter */
++ for (i=0; i < end-base; i+=2) {
+ if (*p & 0xc0) {
+ if (p+1==end) return -1;
+ j = ((p[0] & 0x3f) << 8) | p[1];
+@@ -16,7 +17,7 @@ int __dn_expand(const unsigned char *base, const unsigned char *end, const unsig
+ p = base+j;
+ } else if (*p) {
+ j = *p+1;
+- if (j>=end-p || j>space) return -1;
++ if (j>=end-p || j>dend-dest) return -1;
+ while (--j) *dest++ = *++p;
+ *dest++ = *++p ? '.' : 0;
+ } else {
+@@ -24,6 +25,7 @@ int __dn_expand(const unsigned char *base, const unsigned char *end, const unsig
+ return len;
+ }
+ }
++ return -1;
+ }
+
+ weak_alias(__dn_expand, dn_expand);
+diff --git a/src/network/ent.c b/src/network/ent.c
+index 4c2f24b..ececdc4 100644
+--- a/src/network/ent.c
++++ b/src/network/ent.c
+@@ -16,11 +16,3 @@ void endhostent(void)
+ weak_alias(sethostent, setnetent);
+ weak_alias(gethostent, getnetent);
+ weak_alias(endhostent, endnetent);
+-
+-weak_alias(sethostent, setservent);
+-weak_alias(gethostent, getservent);
+-weak_alias(endhostent, endservent);
+-
+-weak_alias(sethostent, setprotoent);
+-weak_alias(gethostent, getprotoent);
+-weak_alias(endhostent, endprotoent);
+diff --git a/src/network/getaddrinfo.c b/src/network/getaddrinfo.c
+index 70b6cfd..d991344 100644
+--- a/src/network/getaddrinfo.c
++++ b/src/network/getaddrinfo.c
+@@ -105,6 +105,7 @@ int getaddrinfo(const char *restrict host, const char *restrict serv, const stru
+ case AF_INET6:
+ out[k].sa.sin6.sin6_family = AF_INET6;
+ out[k].sa.sin6.sin6_port = htons(ports[j].port);
++ out[k].sa.sin6.sin6_scope_id = addrs[i].scopeid;
+ memcpy(&out[k].sa.sin6.sin6_addr, &addrs[i].addr, 16);
+ break;
+ }
+diff --git a/src/network/getnameinfo.c b/src/network/getnameinfo.c
+index dfcf6ed..588ed76 100644
+--- a/src/network/getnameinfo.c
++++ b/src/network/getnameinfo.c
+@@ -5,6 +5,10 @@
+ #include <sys/socket.h>
+ #include <netinet/in.h>
+ #include <arpa/inet.h>
++#include <net/if.h>
++#include <ctype.h>
++#include "lookup.h"
++#include "stdio_impl.h"
+
+ int __dns_parse(const unsigned char *, int, int (*)(void *, int, const void *, int, const void *), void *);
+ int __dn_expand(const unsigned char *, const unsigned char *, const unsigned char *, char *, int);
+@@ -14,6 +18,16 @@ int __res_send(const unsigned char *, int, unsigned char *, int);
+ #define PTR_MAX (64 + sizeof ".in-addr.arpa")
+ #define RR_PTR 12
+
++static char *itoa(char *p, unsigned x) {
++ p += 3*sizeof(int);
++ *--p = 0;
++ do {
++ *--p = '0' + x % 10;
++ x /= 10;
++ } while (x);
++ return p;
++}
++
+ static void mkptr4(char *s, const unsigned char *ip)
+ {
+ sprintf(s, "%d.%d.%d.%d.in-addr.arpa",
+@@ -31,6 +45,72 @@ static void mkptr6(char *s, const unsigned char *ip)
+ strcpy(s, "ip6.arpa");
+ }
+
++static void reverse_hosts(char *buf, const unsigned char *a, unsigned scopeid, int family)
++{
++ char line[512], *p, *z;
++ unsigned char _buf[1032], atmp[16];
++ struct address iplit;
++ FILE _f, *f = __fopen_rb_ca("/etc/hosts", &_f, _buf, sizeof _buf);
++ if (!f) return;
++ if (family == AF_INET) {
++ memcpy(atmp+12, a, 4);
++ memcpy(atmp, "\0\0\0\0\0\0\0\0\0\0\xff\xff", 12);
++ a = atmp;
++ }
++ while (fgets(line, sizeof line, f)) {
++ if ((p=strchr(line, '#'))) *p++='\n', *p=0;
++
++ for (p=line; *p && !isspace(*p); p++);
++ *p++ = 0;
++ if (__lookup_ipliteral(&iplit, line, AF_UNSPEC)<=0)
++ continue;
++
++ if (iplit.family == AF_INET) {
++ memcpy(iplit.addr+12, iplit.addr, 4);
++ memcpy(iplit.addr, "\0\0\0\0\0\0\0\0\0\0\xff\xff", 12);
++ iplit.scopeid = 0;
++ }
++
++ if (memcmp(a, iplit.addr, 16) || iplit.scopeid != scopeid)
++ continue;
++
++ for (; *p && isspace(*p); p++);
++ for (z=p; *z && !isspace(*z); z++);
++ *z = 0;
++ if (z-p < 256) {
++ memcpy(buf, p, z-p+1);
++ break;
++ }
++ }
++ __fclose_ca(f);
++}
++
++static void reverse_services(char *buf, int port, int dgram)
++{
++ unsigned long svport;
++ char line[128], *p, *z;
++ unsigned char _buf[1032];
++ FILE _f, *f = __fopen_rb_ca("/etc/services", &_f, _buf, sizeof _buf);
++ if (!f) return;
++ while (fgets(line, sizeof line, f)) {
++ if ((p=strchr(line, '#'))) *p++='\n', *p=0;
++
++ for (p=line; *p && !isspace(*p); p++);
++ if (!p) continue;
++ *p++ = 0;
++ svport = strtoul(p, &z, 10);
++
++ if (svport != port || z==p) continue;
++ if (dgram && strncmp(z, "/udp", 4)) continue;
++ if (!dgram && strncmp(z, "/tcp", 4)) continue;
++ if (p-line > 32) continue;
++
++ memcpy(buf, line, p-line);
++ break;
++ }
++ __fclose_ca(f);
++}
++
+ static int dns_parse_callback(void *c, int rr, const void *data, int len, const void *packet)
+ {
+ char tmp[256];
+@@ -48,15 +128,17 @@ int getnameinfo(const struct sockaddr *restrict sa, socklen_t sl,
+ int flags)
+ {
+ char ptr[PTR_MAX];
+- char buf[256];
++ char buf[256], num[3*sizeof(int)+1];
+ int af = sa->sa_family;
+ unsigned char *a;
++ unsigned scopeid;
+
+ switch (af) {
+ case AF_INET:
+ a = (void *)&((struct sockaddr_in *)sa)->sin_addr;
+ if (sl != sizeof(struct sockaddr_in)) return EAI_FAMILY;
+ mkptr4(ptr, a);
++ scopeid = 0;
+ break;
+ case AF_INET6:
+ a = (void *)&((struct sockaddr_in6 *)sa)->sin6_addr;
+@@ -65,6 +147,7 @@ int getnameinfo(const struct sockaddr *restrict sa, socklen_t sl,
+ mkptr6(ptr, a);
+ else
+ mkptr4(ptr, a+12);
++ scopeid = ((struct sockaddr_in6 *)sa)->sin6_scope_id;
+ break;
+ default:
+ return EAI_FAMILY;
+@@ -73,6 +156,9 @@ int getnameinfo(const struct sockaddr *restrict sa, socklen_t sl,
+ if (node && nodelen) {
+ buf[0] = 0;
+ if (!(flags & NI_NUMERICHOST)) {
++ reverse_hosts(buf, a, scopeid, af);
++ }
++ if (!*buf && !(flags & NI_NUMERICHOST)) {
+ unsigned char query[18+PTR_MAX], reply[512];
+ int qlen = __res_mkquery(0, ptr, 1, RR_PTR,
+ 0, 0, 0, query, sizeof query);
+@@ -84,16 +170,33 @@ int getnameinfo(const struct sockaddr *restrict sa, socklen_t sl,
+ if (!*buf) {
+ if (flags & NI_NAMEREQD) return EAI_NONAME;
+ inet_ntop(af, a, buf, sizeof buf);
++ if (scopeid) {
++ char *p = 0, tmp[IF_NAMESIZE+1];
++ if (!(flags & NI_NUMERICSCOPE) &&
++ (IN6_IS_ADDR_LINKLOCAL(a) ||
++ IN6_IS_ADDR_MC_LINKLOCAL(a)))
++ p = if_indextoname(scopeid, tmp+1);
++ if (!p)
++ p = itoa(num, scopeid);
++ *--p = '%';
++ strcat(buf, p);
++ }
+ }
+ if (strlen(buf) >= nodelen) return EAI_OVERFLOW;
+ strcpy(node, buf);
+ }
+
+ if (serv && servlen) {
+- if (snprintf(buf, sizeof buf, "%d",
+- ntohs(((struct sockaddr_in *)sa)->sin_port))>=servlen)
++ char *p = buf;
++ int port = ntohs(((struct sockaddr_in *)sa)->sin_port);
++ buf[0] = 0;
++ if (!(flags & NI_NUMERICSERV))
++ reverse_services(buf, port, flags & NI_DGRAM);
++ if (!*p)
++ p = itoa(num, port);
++ if (strlen(p) >= servlen)
+ return EAI_OVERFLOW;
+- strcpy(serv, buf);
++ strcpy(serv, p);
+ }
+
+ return 0;
+diff --git a/src/network/if_nametoindex.c b/src/network/if_nametoindex.c
+index fb4a147..cb6ec05 100644
+--- a/src/network/if_nametoindex.c
++++ b/src/network/if_nametoindex.c
+@@ -14,5 +14,5 @@ unsigned if_nametoindex(const char *name)
+ strncpy(ifr.ifr_name, name, sizeof ifr.ifr_name);
+ r = ioctl(fd, SIOCGIFINDEX, &ifr);
+ __syscall(SYS_close, fd);
+- return r < 0 ? r : ifr.ifr_ifindex;
++ return r < 0 ? 0 : ifr.ifr_ifindex;
+ }
+diff --git a/src/network/lookup.h b/src/network/lookup.h
+index 82c969e..19c9e48 100644
+--- a/src/network/lookup.h
++++ b/src/network/lookup.h
+@@ -22,5 +22,6 @@ struct service {
+
+ int __lookup_serv(struct service buf[static MAXSERVS], const char *name, int proto, int flags);
+ int __lookup_name(struct address buf[static MAXADDRS], char canon[static 256], const char *name, int family, int flags);
++int __lookup_ipliteral(struct address buf[static 1], const char *name, int family);
+
+ #endif
+diff --git a/src/network/lookup_ipliteral.c b/src/network/lookup_ipliteral.c
+new file mode 100644
+index 0000000..7bcb85f
+--- /dev/null
++++ b/src/network/lookup_ipliteral.c
+@@ -0,0 +1,52 @@
++#include <sys/socket.h>
++#include <netinet/in.h>
++#include <netdb.h>
++#include <net/if.h>
++#include <arpa/inet.h>
++#include <limits.h>
++#include <stdlib.h>
++#include <string.h>
++#include <ctype.h>
++#include "lookup.h"
++
++int __inet_aton(const char *, struct in_addr *);
++
++int __lookup_ipliteral(struct address buf[static 1], const char *name, int family)
++{
++ struct in_addr a4;
++ struct in6_addr a6;
++ if (family != AF_INET6 && __inet_aton(name, &a4)>0) {
++ memcpy(&buf[0].addr, &a4, sizeof a4);
++ buf[0].family = AF_INET;
++ buf[0].scopeid = 0;
++ return 1;
++ }
++ if (family != AF_INET) {
++ char tmp[64];
++ char *p = strchr(name, '%'), *z;
++ unsigned long long scopeid;
++ if (p && p-name < 64) {
++ memcpy(tmp, name, p-name);
++ tmp[p-name] = 0;
++ name = tmp;
++ }
++ if (inet_pton(AF_INET6, name, &a6)<=0) return 0;
++ memcpy(&buf[0].addr, &a6, sizeof a6);
++ buf[0].family = AF_INET6;
++ if (p) {
++ if (isdigit(*++p)) scopeid = strtoull(p, &z, 10);
++ else z = p-1;
++ if (*z) {
++ if (!IN6_IS_ADDR_LINKLOCAL(&a6) &&
++ !IN6_IS_ADDR_MC_LINKLOCAL(&a6))
++ return EAI_NONAME;
++ scopeid = if_nametoindex(p);
++ if (!scopeid) return EAI_NONAME;
++ }
++ if (scopeid > UINT_MAX) return EAI_NONAME;
++ buf[0].scopeid = scopeid;
++ }
++ return 1;
++ }
++ return 0;
++}
+diff --git a/src/network/lookup_name.c b/src/network/lookup_name.c
+index 0292093..68b172b 100644
+--- a/src/network/lookup_name.c
++++ b/src/network/lookup_name.c
+@@ -1,6 +1,7 @@
+ #include <sys/socket.h>
+ #include <netinet/in.h>
+ #include <netdb.h>
++#include <net/if.h>
+ #include <arpa/inet.h>
+ #include <ctype.h>
+ #include <stdlib.h>
+@@ -13,7 +14,7 @@
+ static int is_valid_hostname(const char *host)
+ {
+ const unsigned char *s;
+- if (strnlen(host, 256)-1 > 254 || mbstowcs(0, host, 0) > 255) return 0;
++ if (strnlen(host, 254)-1 >= 253 || mbstowcs(0, host, 0) == -1) return 0;
+ for (s=(void *)host; *s>=0x80 || *s=='.' || *s=='-' || isalnum(*s); s++);
+ return !*s;
+ }
+@@ -36,23 +37,9 @@ static int name_from_null(struct address buf[static 2], const char *name, int fa
+ return cnt;
+ }
+
+-int __inet_aton(const char *, struct in_addr *);
+-
+ static int name_from_numeric(struct address buf[static 1], const char *name, int family)
+ {
+- struct in_addr a4;
+- struct in6_addr a6;
+- if (family != AF_INET6 && __inet_aton(name, &a4)>0) {
+- memcpy(&buf[0].addr, &a4, sizeof a4);
+- buf[0].family = AF_INET;
+- return 1;
+- }
+- if (family != AF_INET && inet_pton(AF_INET6, name, &a6)>0) {
+- memcpy(&buf[0].addr, &a6, sizeof a6);
+- buf[0].family = AF_INET6;
+- return 1;
+- }
+- return 0;
++ return __lookup_ipliteral(buf, name, family);
+ }
+
+ static int name_from_hosts(struct address buf[static MAXADDRS], char canon[static 256], const char *name, int family)
+@@ -110,11 +97,13 @@ static int dns_parse_callback(void *c, int rr, const void *data, int len, const
+ case RR_A:
+ if (len != 4) return -1;
+ ctx->addrs[ctx->cnt].family = AF_INET;
++ ctx->addrs[ctx->cnt].scopeid = 0;
+ memcpy(ctx->addrs[ctx->cnt++].addr, data, 4);
+ break;
+ case RR_AAAA:
+ if (len != 16) return -1;
+ ctx->addrs[ctx->cnt].family = AF_INET6;
++ ctx->addrs[ctx->cnt].scopeid = 0;
+ memcpy(ctx->addrs[ctx->cnt++].addr, data, 16);
+ break;
+ case RR_CNAME:
+@@ -164,7 +153,7 @@ int __lookup_name(struct address buf[static MAXADDRS], char canon[static 256], c
+ *canon = 0;
+ if (name) {
+ size_t l;
+- if ((l = strnlen(name, 256))-1 > 254)
++ if ((l = strnlen(name, 254))-1 >= 253)
+ return EAI_NONAME;
+ memcpy(canon, name, l+1);
+ }
+@@ -179,10 +168,10 @@ int __lookup_name(struct address buf[static MAXADDRS], char canon[static 256], c
+
+ /* Try each backend until there's at least one result. */
+ cnt = name_from_null(buf, name, family, flags);
+- if (cnt<=0) cnt = name_from_numeric(buf, name, family);
+- if (cnt<=0 && !(flags & AI_NUMERICHOST)) {
++ if (!cnt) cnt = name_from_numeric(buf, name, family);
++ if (!cnt && !(flags & AI_NUMERICHOST)) {
+ cnt = name_from_hosts(buf, canon, name, family);
+- if (cnt<=0) cnt = name_from_dns(buf, canon, name, family);
++ if (!cnt) cnt = name_from_dns(buf, canon, name, family);
+ }
+ if (cnt<=0) return cnt ? cnt : EAI_NONAME;
+
+@@ -204,7 +193,6 @@ int __lookup_name(struct address buf[static MAXADDRS], char canon[static 256], c
+ if (buf[i].family != AF_INET) continue;
+ memcpy(buf[i].addr+12, buf[i].addr, 4);
+ memcpy(buf[i].addr, "\0\0\0\0\0\0\0\0\0\0\xff\xff", 12);
+- buf[i].scopeid = 0;
+ buf[i].family = AF_INET6;
+ }
+ }
+diff --git a/src/network/res_mkquery.c b/src/network/res_mkquery.c
+index f7e4e9c..7c49709 100644
+--- a/src/network/res_mkquery.c
++++ b/src/network/res_mkquery.c
+@@ -10,9 +10,9 @@ int __res_mkquery(int op, const char *dname, int class, int type,
+ int id, i, j;
+ unsigned char q[280];
+ struct timespec ts;
+- size_t l = strnlen(dname, 256);
++ size_t l = strnlen(dname, 254);
+
+- if (l-1>=254 || buflen<18+l || op>15u || class>255u || type>255u)
++ if (l-1>=253 || buflen<18+l || op>15u || class>255u || type>255u)
+ return -1;
+
+ /* Construct query template - ID will be filled later */
+diff --git a/src/network/res_msend.c b/src/network/res_msend.c
+index a5b7793..5192b4d 100644
+--- a/src/network/res_msend.c
++++ b/src/network/res_msend.c
+@@ -12,6 +12,7 @@
+ #include <pthread.h>
+ #include "stdio_impl.h"
+ #include "syscall.h"
++#include "lookup.h"
+
+ static void cleanup(void *p)
+ {
+@@ -47,6 +48,7 @@ int __res_msend(int nqueries, const unsigned char *const *queries,
+ int cs;
+ struct pollfd pfd;
+ unsigned long t0, t1, t2;
++ struct address iplit;
+
+ pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, &cs);
+
+@@ -76,13 +78,18 @@ int __res_msend(int nqueries, const unsigned char *const *queries,
+ for (z=s; *z && !isspace(*z); z++);
+ *z=0;
+
+- if (inet_pton(AF_INET, s, &ns[nns].sin.sin_addr)>0) {
+- ns[nns].sin.sin_port = htons(53);
+- ns[nns++].sin.sin_family = AF_INET;
+- } else if (inet_pton(AF_INET6, s, &ns[nns].sin6.sin6_addr)>0) {
+- sl = sizeof sa.sin6;
+- ns[nns].sin6.sin6_port = htons(53);
+- ns[nns++].sin6.sin6_family = family = AF_INET6;
++ if (__lookup_ipliteral(&iplit, s, AF_UNSPEC)>0) {
++ if (iplit.family == AF_INET) {
++ memcpy(&ns[nns].sin.sin_addr, iplit.addr, 4);
++ ns[nns].sin.sin_port = htons(53);
++ ns[nns++].sin.sin_family = AF_INET;
++ } else {
++ sl = sizeof sa.sin6;
++ memcpy(&ns[nns].sin6.sin6_addr, iplit.addr, 16);
++ ns[nns].sin6.sin6_port = htons(53);
++ ns[nns].sin6.sin6_scope_id = iplit.scopeid;
++ ns[nns++].sin6.sin6_family = family = AF_INET6;
++ }
+ }
+ }
+ if (f) __fclose_ca(f);
+diff --git a/src/network/res_querydomain.c b/src/network/res_querydomain.c
+index c746dbe..8ba31f4 100644
+--- a/src/network/res_querydomain.c
++++ b/src/network/res_querydomain.c
+@@ -3,10 +3,10 @@
+
+ int res_querydomain(const char *name, const char *domain, int class, int type, unsigned char *dest, int len)
+ {
+- char tmp[256];
+- size_t nl = strnlen(name, 256);
+- size_t dl = strnlen(domain, 256);
+- if (nl+dl+1 > 255) return -1;
++ char tmp[254];
++ size_t nl = strnlen(name, 254);
++ size_t dl = strnlen(domain, 254);
++ if (nl+dl+1 > 253) return -1;
+ memcpy(tmp, name, nl);
+ tmp[nl] = '.';
+ memcpy(tmp+nl+1, domain, dl+1);
+diff --git a/src/stdio/vasprintf.c b/src/stdio/vasprintf.c
+index 68b7246..08251bc 100644
+--- a/src/stdio/vasprintf.c
++++ b/src/stdio/vasprintf.c
+@@ -3,26 +3,13 @@
+ #include <stdarg.h>
+ #include <stdlib.h>
+
+-#define GUESS 240U
+-
+ int vasprintf(char **s, const char *fmt, va_list ap)
+ {
+ va_list ap2;
+- char *a;
+- int l=GUESS;
+-
+- if (!(a=malloc(GUESS))) return -1;
+-
+ va_copy(ap2, ap);
+- l=vsnprintf(a, GUESS, fmt, ap2);
++ int l = vsnprintf(0, 0, fmt, ap2);
+ va_end(ap2);
+
+- if (l<GUESS) {
+- char *b = realloc(a, l+1U);
+- *s = b ? b : a;
+- return l;
+- }
+- free(a);
+ if (l<0 || !(*s=malloc(l+1U))) return -1;
+ return vsnprintf(*s, l+1U, fmt, ap);
+ }
diff --git a/main/musl/APKBUILD b/main/musl/APKBUILD
index 12a2f4385..450d0d3d8 100644
--- a/main/musl/APKBUILD
+++ b/main/musl/APKBUILD
@@ -2,7 +2,7 @@
# Maintainer: Timo Teräs <timo.teras@iki.fi>
pkgname=musl
pkgver=1.1.1
-pkgrel=2
+pkgrel=3
pkgdesc="the musl c library (libc) implementation"
url="http://www.musl-libc.org/"
arch="all"
@@ -15,6 +15,7 @@ subpackages="$pkgname-dev $pkgname-utils"
source="http://www.musl-libc.org/releases/musl-$pkgver.tar.gz
0001-v1.1.1-to-76f440cf.patch
0002-76f440cf-to-d85d261e.patch
+ 0003-d85d261e-to-2abb70c3.patch
1001-add-basic-dns-record-parsing-functions.patch
1002-reimplement-if_nameindex-and-getifaddrs-using-netlin.patch
1003-implement-y-and-C-specifiers-in-strptime.patch
@@ -122,6 +123,7 @@ utils() {
md5sums="dbc08d311148e095016d9bbf6c7ffda6 musl-1.1.1.tar.gz
d4a40fe1656115b2956065ab48e0b372 0001-v1.1.1-to-76f440cf.patch
0b0dce47217fe25eeb82a7f70e15629f 0002-76f440cf-to-d85d261e.patch
+4e7a277d2aa6ca246bca81996f247379 0003-d85d261e-to-2abb70c3.patch
a3810683ef61ac27e2f6ec9801280c81 1001-add-basic-dns-record-parsing-functions.patch
83c3bd2a50b1de5ef948704d3f4e0583 1002-reimplement-if_nameindex-and-getifaddrs-using-netlin.patch
fc3feec4104a4b25781df92dd96b9eec 1003-implement-y-and-C-specifiers-in-strptime.patch
@@ -135,6 +137,7 @@ cb82d21fed17a116b44b830adba71c5a getconf.c
sha256sums="9dd75d6512e44d5a13254e246db56c90365894b05bab2b1127e44a31e4fd7c36 musl-1.1.1.tar.gz
40f241a8aa59621d8a9e6a616df27c38e0a622243bf7346cc98ec1c37454e92a 0001-v1.1.1-to-76f440cf.patch
d0f4dbc8f0e72df02fcb12e75f829d50909c6da222a5f6a13a0e0c991f91d56e 0002-76f440cf-to-d85d261e.patch
+b931c40613923925ac28a010e4ffbe13380a056dfd01eeccc3a090f598edeaff 0003-d85d261e-to-2abb70c3.patch
758390768b1bc4159d56908ca332b9640cd0552ed3b4b2b8d4a6d499c54c11a1 1001-add-basic-dns-record-parsing-functions.patch
1c25880095e869b827f02997e864fdf4bf157a4e923e52d97dbd05e657aedb70 1002-reimplement-if_nameindex-and-getifaddrs-using-netlin.patch
c22338bc33e8c0c22b280c392b37a0903e13562e671f5ebade09ed5b1d33e2ae 1003-implement-y-and-C-specifiers-in-strptime.patch
@@ -148,6 +151,7 @@ f79a2930a2e5bb0624321589edf8b889d1e9b603e01e6b7ae214616605b3fdd7 iconv.c"
sha512sums="5182deb80a35c8a4009d71098c95a16e5ab9bd03186443917652f0c521d2980183e203256493a69e8230b6a0c4848ca8e44de9e8c851a511cd37d0d41f91b14f musl-1.1.1.tar.gz
30906a5f7a01ff05693e5a2e72f6c7e75ff7939c28a32b9e777d14d59412bb9df603a09aa8dd693e9a0b70525474a62f7bc657425032a3a5f4b339667e6f62ec 0001-v1.1.1-to-76f440cf.patch
358f3828367f5a86806ce5be5842c2be44c1a7919133ab83a7c549bc55be847fee2a938c201782db771ff6a5a994cab6ee7c2050f6ae564f4993c0b3825faa36 0002-76f440cf-to-d85d261e.patch
+5bba3f6e369ae38536634cc181b629158dab515476577617024c585ad2247f17bec79b9de035063bddddad07df204654b7eae829b6deb856867907c762f5d2c7 0003-d85d261e-to-2abb70c3.patch
dad965258daf69371b844f76bfe5a914b0eca0ca76f3fc340b8fd7acf598b5f87bbe6d68b1f43ed0293ee0ed3bfd85d5173ccc169aa6265646248d5b8a906708 1001-add-basic-dns-record-parsing-functions.patch
72cf33738d2cf31f6ec02312bc494d754c17470b519172bb8bd7e2e29ac3b119023088a2b3fbc0dbc2fddd0078ccbae62096106cae361f8c31d6a9950043af25 1002-reimplement-if_nameindex-and-getifaddrs-using-netlin.patch
48082d2348de40bc6b455266c5552a62e1e75f926e69116c61c8a3cb35fefdff136dc771bf25ee7d43c959834921221112ed7afcc45fcadbcf07562510786916 1003-implement-y-and-C-specifiers-in-strptime.patch