From ae46f3a2023c11d5aff12b14f98837598bbb3760 Mon Sep 17 00:00:00 2001 From: Willem Toorop Date: Wed, 30 Nov 2011 14:57:15 +0000 Subject: [PATCH] A bit more work on the "centralized" build system (including deleting of obsolete files) + fixing splint for ubuntu oneiric. --- Makefile.in | 35 ++++++++++++++++++++++++-------- configure.ac | 8 ++++++-- examples/ldns-notify.c | 4 +++- examples/ldns-test-edns.c | 2 ++ examples/ldns-testns.c | 6 +++++- examples/ldnsd.c | 2 ++ net.c | 17 ++++++++++++++-- test/01-compile.tpkg | Bin 916 -> 919 bytes test/06-drill-lint.tpkg | Bin 570 -> 0 bytes test/07-compile-examples.tpkg | Bin 746 -> 0 bytes test/11-examples-lint.tpkg | Bin 577 -> 0 bytes test/12.unit-tests-dnssec.tpkg | Bin 5601 -> 5647 bytes test/13-unit-tests-base.tpkg | Bin 5312 -> 5338 bytes test/15.unit-tests-rrtypes.tpkg | Bin 4468 -> 4473 bytes 14 files changed, 59 insertions(+), 15 deletions(-) delete mode 100644 test/06-drill-lint.tpkg delete mode 100644 test/07-compile-examples.tpkg delete mode 100644 test/11-examples-lint.tpkg diff --git a/Makefile.in b/Makefile.in index 459aba4b..5cf35064 100644 --- a/Makefile.in +++ b/Makefile.in @@ -44,12 +44,16 @@ RUNTIME_PATH = @RUNTIME_PATH@ LIBTOOL = $(libtool) --tag=CC --quiet LINT = splint LINTFLAGS = +quiet -weak -warnposix -unrecog -Din_addr_t=uint32_t -Du_int=unsigned -Du_char=uint8_t -preproc -Drlimit=rlimit64 -D__gnuc_va_list=va_list -LINTFLAGS +="-DBN_ULONG=unsigned long" -Dkrb5_int32=int "-Dkrb5_ui_4=unsigned int" -DPQ_64BIT=uint64_t -DRC4_INT=unsigned -fixedformalarray -D"ENGINE=unsigned" -D"RSA=unsigned" -D"DSA=unsigned" -D"EVP_PKEY=unsigned" -D"EVP_MD=unsigned" -D"SSL=unsigned" -D"SSL_CTX=unsigned" -D"X509=unsigned" -D"RC4_KEY=unsigned" -D"EVP_MD_CTX=unsigned" -D"EC_KEY=unsigned" -D"EC_POINT=unsigned" -D"EC_GROUP=unsigned" -D"EVP_PKEY_ASN1_METHOD=struct evp_pkey_asn1_method_st" -D"EVP_PKEY_CTX=struct evp_pkey_ctx_st" +# Extra flags from configure +LINTFLAGS += @LINTFLAGS@ +LINTFLAGS += "-DBN_ULONG=unsigned long" -Dkrb5_int32=int "-Dkrb5_ui_4=unsigned int" -DPQ_64BIT=uint64_t -DRC4_INT=unsigned -fixedformalarray -D"ENGINE=unsigned" -D"RSA=unsigned" -D"DSA=unsigned" -D"EVP_PKEY=unsigned" -D"EVP_MD=unsigned" -D"SSL=unsigned" -D"SSL_CTX=unsigned" -D"X509=unsigned" -D"RC4_KEY=unsigned" -D"EVP_MD_CTX=unsigned" -D"EC_KEY=unsigned" -D"EC_POINT=unsigned" -D"EC_GROUP=unsigned" -D"EVP_PKEY_ASN1_METHOD=struct evp_pkey_asn1_method_st" -D"EVP_PKEY_CTX=struct evp_pkey_ctx_st" # compat with OpenBSD -LINTFLAGS +="-Dsigset_t=long" +LINTFLAGS += "-Dsigset_t=long" # FreeBSD8 -LINTFLAGS +="-D__uint16_t=uint16_t" -LINTFLAGS +=@LINTFLAGS@ +LINTFLAGS += "-D__uint16_t=uint16_t" +# Ubuntu oneiric" +LINTFLAGS += -D"__BEGIN_DECLS=" -D"__ssize_t=ssize_t" -D"__intptr_t=intptr_t" -D"__nonnull(x)=" -D"__THROW=" -D"__wur=" -D"__off_t=unsigned" -D"__off64_t=unsigned" -D"__useconds_t=unsigned" -D"__uid_t=unsigned" -D"__gid_t=unsigned" -D"__attribute_deprecated__=" -D"__pid_t=unsigned" -D"__restrict=" -D"__END_DECLS=" -D"__BEGIN_NAMESPACE_STD=" -D"__END_NAMESPACE_STD=" -D"__BEGIN_NAMESPACE_C99=" -D"__END_NAMESPACE_C99=" -D"__socklen_t=unsigned" -D"sa_family_t=unsigned " -D"__mode_t=unsigned" -D"u_int16_t=uint16_t" -D"u_int32_t=uint32_t" -D"u_int8_t=uint8_t" -D"u_short=unsigned short" -D"__u16=uint16_t" -D"__u32=uint32_t" +-D"__u64=uint64_t" DEPFLAG = @DEPFLAG@ INSTALL = $(srcdir)/install-sh @@ -108,9 +112,9 @@ setup-builddir: putdown-builddir: rm -f include/ldns lib config.h test ! -d include || rmdir include || : - test ! -d examples || rmdir examples || : - test ! -d drill || rmdir drill || : - test ! -d compat || rmdir compat || : + if test -d examples -a ! -f examples/README; then rmdir examples || : ; fi + if test -d drill -a ! -f drill/README ; then rmdir drill || : ; fi + if test -d compat -a ! -f compat/malloc.c; then rmdir compat || : ; fi drill: drill/drill drill/drill: $(DRILL_LOBJS) $(LIB) @@ -295,7 +299,8 @@ realclean: clean docclean rm -f ldns/net.h rm -f packaging/ldns-config rm -f packaging/libldns.pc - test ! -d packaging || rmdir packaging || : + if test -d packaging -a ! -f packaging/ldns-config.in ; then \ + rmdir packaging || : ; fi rm -f libtool if test -d ldns ; then \ echo "is builddir srcdir" > ldns/YES ; \ @@ -325,12 +330,24 @@ distclean: realclean ## No need for changes here -lint: +lint: @LINT_DRILL@ @LINT_EXAMPLES@ for i in $(srcdir)/*.c; do \ $(LINT) $(LINTFLAGS) -I. -I$(srcdir) $(srcdir)/$$i ; \ if test $$? -ne 0 ; then exit 1 ; fi ; \ done +lint-drill: + for i in $(srcdir)/drill/*.c; do \ + $(LINT) $(LINTFLAGS) -I. -I$(srcdir) $(srcdir)/$$i ; \ + if test $$? -ne 0 ; then exit 1 ; fi ; \ + done + +lint-examples: + for i in $(srcdir)/examples/*.c; do \ + $(LINT) $(LINTFLAGS) -I. -I$(srcdir) $(srcdir)/$$i ; \ + if test $$? -ne 0 ; then exit 1 ; fi ; \ + done + tags: $(srcdir)/*.c ldns/*.[ch] ctags -f $(srcdir)/tags $(srcdir)/*.[ch] ldns/*.[ch] diff --git a/configure.ac b/configure.ac index 09409525..f3912b04 100644 --- a/configure.ac +++ b/configure.ac @@ -104,11 +104,13 @@ if test x_$with_drill != x_no; then AC_SUBST(INSTALL_DRILL,[install-drill]) AC_SUBST(UNINSTALL_DRILL,[uninstall-drill]) AC_SUBST(CLEAN_DRILL,[clean-drill]) + AC_SUBST(LINT_DRILL,[lint-drill]) else AC_SUBST(DRILL,[""]) AC_SUBST(INSTALL_DRILL,[""]) AC_SUBST(UNINSTALL_DRILL,[""]) AC_SUBST(CLEAN_DRILL,[""]) + AC_SUBST(LINT_DRILL,[""]) fi @@ -120,11 +122,13 @@ if test x_$with_examples != x_no; then AC_SUBST(INSTALL_EXAMPLES,[install-examples]) AC_SUBST(UNINSTALL_EXAMPLES,[uninstall-examples]) AC_SUBST(CLEAN_EXAMPLES,[clean-examples]) + AC_SUBST(LINT_EXAMPLES,[lint-examples]) else AC_SUBST(EXAMPLES,[""]) AC_SUBST(INSTALL_EXAMPLES,[""]) AC_SUBST(UNINSTALL_EXAMPLES,[""]) AC_SUBST(CLEAN_EXAMPLES,[""]) + AC_SUBST(LINT_EXAMPLES,[""]) fi # add option to disable installation of ldns-config script @@ -133,8 +137,8 @@ AC_ARG_ENABLE(ldns-config, [ --disable-ldns-config disable installation of ldns- if test "x$enable_ldns_config" = xyes; then AC_SUBST(INSTALL_CONFIG, [install-config]) AC_SUBST(INSTALL_CONFIG_MANPAGE, [install-config-manpage]) - AC_SUBST(UNINSTALL_CONFIG, [install-config]) - AC_SUBST(UNINSTALL_CONFIG_MANPAGE, [install-config-manpage]) + AC_SUBST(UNINSTALL_CONFIG, [uninstall-config]) + AC_SUBST(UNINSTALL_CONFIG_MANPAGE, [uninstall-config-manpage]) else AC_SUBST(INSTALL_CONFIG, [""]) AC_SUBST(INSTALL_CONFIG_MANPAGE, [""]) diff --git a/examples/ldns-notify.c b/examples/ldns-notify.c index 39db1030..fb8015df 100644 --- a/examples/ldns-notify.c +++ b/examples/ldns-notify.c @@ -58,7 +58,9 @@ notify_host(int s, struct addrinfo* res, uint8_t* wire, size_t wiresize, { int timeout_retry = 5; /* seconds */ int num_retry = max_num_retry; +#ifndef S_SPLINT_S fd_set rfds; +#endif struct timeval tv; int retval = 0; ssize_t received = 0; @@ -83,9 +85,9 @@ notify_host(int s, struct addrinfo* res, uint8_t* wire, size_t wiresize, } /* wait for ACK packet */ +#ifndef S_SPLINT_S FD_ZERO(&rfds); FD_SET(s, &rfds); -#ifndef S_SPLINT_S tv.tv_sec = timeout_retry; /* seconds */ #endif tv.tv_usec = 0; /* microseconds */ diff --git a/examples/ldns-test-edns.c b/examples/ldns-test-edns.c index 2a29f0e8..10958085 100644 --- a/examples/ldns-test-edns.c +++ b/examples/ldns-test-edns.c @@ -30,7 +30,9 @@ convert_addr(char* str, int p, struct sockaddr_storage* addr, socklen_t* len) } else { #endif *len = (socklen_t)sizeof(struct sockaddr_in); +#ifndef S_SPLINT_S ((struct sockaddr_in*)addr)->sin_family = AF_INET; +#endif ((struct sockaddr_in*)addr)->sin_port = htons((uint16_t)p); if(inet_pton(AF_INET, str, &((struct sockaddr_in*)addr)->sin_addr) == 1) diff --git a/examples/ldns-testns.c b/examples/ldns-testns.c index c1f9e134..100bfbb4 100644 --- a/examples/ldns-testns.c +++ b/examples/ldns-testns.c @@ -216,7 +216,9 @@ static int bind_port(int sock, int port, int fam) } #endif +#ifndef S_SPLINT_S addr.sin_family = AF_INET; +#endif addr.sin_port = (in_port_t)htons((uint16_t)port); addr.sin_addr.s_addr = INADDR_ANY; return bind(sock, (struct sockaddr *)&addr, (socklen_t) sizeof(addr)); @@ -365,7 +367,9 @@ static struct entry* entries; static void service(void) { +#ifndef S_SPLINT_S fd_set rset, wset, eset; +#endif struct timeval timeout; int count; int maxfd; @@ -418,7 +422,7 @@ forkit(int number) #endif /* USE_WINSOCK */ #else /* HAVE_FORK */ pid_t pid = fork(); - if(pid == -1) { + if(pid == (pid_t) -1) { log_msg("error forking: %s\n", strerror(errno)); return; } diff --git a/examples/ldnsd.c b/examples/ldnsd.c index 56cf2e0c..e2a55200 100644 --- a/examples/ldnsd.c +++ b/examples/ldnsd.c @@ -54,7 +54,9 @@ static int udp_bind(int sock, int port, const char *my_address) } } +#ifndef S_SPLINT_S addr.sin_family = AF_INET; +#endif addr.sin_port = (in_port_t) htons((uint16_t)port); addr.sin_addr.s_addr = maddr; return bind(sock, (struct sockaddr *)&addr, (socklen_t) sizeof(addr)); diff --git a/net.c b/net.c index 4407e4ae..870511a7 100644 --- a/net.c +++ b/net.c @@ -105,6 +105,8 @@ ldns_send_buffer(ldns_pkt **result, ldns_resolver *r, ldns_buffer *qb, ldns_rdf ns = ldns_rdf2native_sockaddr_storage(ns_array[i], ldns_resolver_port(r), &ns_len); + +#ifndef S_SPLINT_S if ((ns->ss_family == AF_INET) && (ldns_resolver_ip6(r) == LDNS_RESOLV_INET6)) { /* not reachable */ @@ -116,6 +118,7 @@ ldns_send_buffer(ldns_pkt **result, ldns_resolver *r, ldns_buffer *qb, ldns_rdf /* not reachable */ continue; } +#endif all_servers_rtt_inf = false; @@ -265,16 +268,16 @@ ldns_sock_block(int sockfd) static int ldns_sock_wait(int sockfd, struct timeval timeout, int write) { - fd_set fds; int ret; #ifndef S_SPLINT_S + fd_set fds; FD_ZERO(&fds); FD_SET(FD_SET_T sockfd, &fds); -#endif if(write) ret = select(sockfd+1, NULL, &fds, NULL, &timeout); else ret = select(sockfd+1, &fds, NULL, NULL, &timeout); +#endif if(ret == 0) /* timeout expired */ return 0; @@ -356,11 +359,13 @@ ldns_udp_connect(const struct sockaddr_storage *to, struct timeval ATTR_UNUSED(t { int sockfd; +#ifndef S_SPLINT_S if ((sockfd = socket((int)((struct sockaddr*)to)->sa_family, SOCK_DGRAM, IPPROTO_UDP)) == -1) { return 0; } +#endif return sockfd; } @@ -370,10 +375,12 @@ ldns_tcp_connect(const struct sockaddr_storage *to, socklen_t tolen, { int sockfd; +#ifndef S_SPLINT_S if ((sockfd = socket((int)((struct sockaddr*)to)->sa_family, SOCK_STREAM, IPPROTO_TCP)) == -1) { return 0; } +#endif /* perform nonblocking connect, to be able to wait with select() */ ldns_sock_nonblock(sockfd); @@ -714,14 +721,18 @@ ldns_rdf2native_sockaddr_storage(const ldns_rdf *rd, uint16_t port, size_t *size switch(ldns_rdf_get_type(rd)) { case LDNS_RDF_TYPE_A: +#ifndef S_SPLINT_S data->ss_family = AF_INET; +#endif data_in = (struct sockaddr_in*) data; data_in->sin_port = (in_port_t)htons(port); memcpy(&(data_in->sin_addr), ldns_rdf_data(rd), ldns_rdf_size(rd)); *size = sizeof(struct sockaddr_in); return data; case LDNS_RDF_TYPE_AAAA: +#ifndef S_SPLINT_S data->ss_family = AF_INET6; +#endif data_in6 = (struct sockaddr_in6*) data; data_in6->sin6_port = (in_port_t)htons(port); memcpy(&data_in6->sin6_addr, ldns_rdf_data(rd), ldns_rdf_size(rd)); @@ -733,6 +744,7 @@ ldns_rdf2native_sockaddr_storage(const ldns_rdf *rd, uint16_t port, size_t *size } } +#ifndef S_SPLINT_S ldns_rdf * ldns_sockaddr_storage2rdf(struct sockaddr_storage *sock, uint16_t *port) { @@ -765,6 +777,7 @@ ldns_sockaddr_storage2rdf(struct sockaddr_storage *sock, uint16_t *port) } return addr; } +#endif /* code from resolver.c */ ldns_status diff --git a/test/01-compile.tpkg b/test/01-compile.tpkg index 09f8f4d80ac51a146579e7e8aeb2e99477e2d428..8078a8d6f70a0b65df5b5fbe6537e51526f3f6c1 100644 GIT binary patch literal 919 zc-jG%18DpoiwFRHD%MT_1MOB{Z`(Ey_v`p6Zdp)tKqX6ZWFso_&?HS;bXfx=+a8)? zrKPh?SRxIQik%@Jen(kJoNP|8)$O*9KOl7O|B1)rF^Yp+RWngySP0$id=5l}!60?N z@gR*>f3MMr<9qK!c>PH<&KT9_EP#eoNKxZz>607xkkIDa|i0;;Zl{ERL zVi5XKw6^}e-k=jlJ8_ysX`>gXy+P7}XhZQI#Q(hh``qA{7e_=i%G?+% zGIqp8S(73Ar?>ZCkM;fU_I5)t9`65S$Myfs{U5vj?^%#T!J3$!MqAY;UB0D>I`|8*IpWgg%xVIfMmKU&n%OYCI(cZ`TMC23TwN)A& z=ObKQov)DvNto_FqR@{YQb@?&WnE3LW#fuZu`z*PkiG+9|MalACh2M%(oHGVoEQAk zuv?qPgt1a7d*h}QL#tFNep@=bBV3Wuw&xQCTP_(fc2^v1yZ^UZeyc}Z=ir*_0urm5 zZZRfC@E*Q(1eN&eYDqX3E2Og}^0_OBWZx{EywqChXFwM;C=C_uNLwox)6jQX7^zwo z&wvl?t^QlSz<65C}<) zT9)v)aL(w{R@{9e?zsDOoU`v;vn{Kz33ud-wlD17oD!f7M9Jwq24=#O6>?02m8iL} zlc3Oa$6XV+;MI(#D!C({^u4R@f`E#(Id}K6yY;@2?EbR5Wi{wTvakRBuzvneu$*lu z#v||lB>lttKTZAn|BK-CQmUB|^mujyo;r~?(?0A1F7VD%o5YNyG}k6sv$}~rpCC1y zo7?SEp%fQr7+=nE_k?s>*$D4})mnM^@1fhQl!20e?&JpTu`w|JU5$?>xsC?n}@9LT!YS zF$A8^&d?-U6lKk5H6Tl+VW%3oWuNhq?9a7;Kavt4ID#OI{iE0q;q=YBE3nmO7hK4a zzNllk5IBdo0>>!XDH%_dzKwyMl5-_dmN5k_P^N~Mmm2M=3~{fJ*3L$~k{Ik&wKylD zR_4ZF8nbgQvWg7Zf1Td{JvR6M46|ZOF`nuFLG-ZyNAx$~`u}U--K|uG5!5_oF`okT zICx&4K7b2cYc&!xk`}z2#q|opz|9ObLODY)s?rHv4B{FM_Ox2$Dyd3LK}ZlK zs2d5U8XNk-S<+^fNhEO_nJjKq1(iYIpfRIM<{ImeuAjG!&HZnSx1|_Q_x~UquI9hN z=&5kxfYP;Uv8RJT1DbR0`U0weA_V3q!{_@+|$zH%% zlEU6Si)bY$C!cO+BAEfNN~O_qKEd7HhYhmcz>AKaQ5XhKDGbP-v3$OiOmjZR#^9b= z^BBvNDpz`$7?(7OJQRgkYqAZl}uj(A5-0h zobHn8g6{8tO~i2H(m!!T@PBpbv|1pz&s&_3tUbjBz zn&X1!1&w|iJuDR-bF$wgqL)CgCnQ}1S!PqT;x6A0Y$r51q?ZqD-|MgHL#8PCIK!Tq z@xeVcrFqplSXWJj`E1>Fw@b^<^4nEDX!dMR-)tV1d8PWV4%KyM4@=tCuvK3sv1{?| qC80i)8z3AU92^`R92^`R92^`R92^`R92^|J3;YYp1*xn6C;$KqBF7{E diff --git a/test/06-drill-lint.tpkg b/test/06-drill-lint.tpkg deleted file mode 100644 index 771b7fea68f4bc3885fcf3fddcfc22e7e20417ca..0000000000000000000000000000000000000000 GIT binary patch literal 0 Hc-jL100001 literal 570 zc-jFv0>%9wiwFRIcE{s=rvt(Mhw_|8*Fphw3W<~K6~AreZxsG4{u>sZ?B0hVd?o(A z>zMd^zQ+UC3qlkB(D-+N@8SQpa^&&96dLbEff205oqa>4WmQJtSey+}CrVE1g<)8M zfI>_VT1Ti#s2>p)RUxTTWCMkwbsdV@G#fVv_tgyCQ*ivq2_xqe23Ik-oCoYqm?q4F zDuO#R!EhsSj3pbGs#&FeN5BSEF|A50>&Ogaie;*e@fP#x#)z#)V`C#_x@4nD*CvUv zP1e0?V`CT1{95MNwlor2V;Zq*A@jymX8$`N2WFf8+gaVYk1hJ=ez4NN*KhUj`lSDZ z5F71|8=0qIVh>V7CTCcJ&_?7!Wldp}cWjzCCbsFn-7k0UW9#|vt@Q6K&VM)bN&ko7 z2lO7mvTUoKPBLpIlvM~_qk^Asass+)RDv&+GluhNrD_;m#JA_&_8r-cR<<6?GJ1Nq z`MgR*Zf|54#TH}n=;O_=%da0k4bQs{OH$~rEcRj*vcz0ap!@kt{C#uPunmM$NSo!;v_1jO-kydO}hp0f~Uc>!I0=SO=Fte zv1GDGdBQneb72q$_` zWbZ*Q;@9tU8bQ$MwxcNM(K8P^ZQg4@^q8GkMWu~U0FALQKk=4wcln0N-!X z1vo|E!F(6^*3HOU3Nwo96r_g92o-`EA?Tt~2|^|>P&1)xn?Y@CDXJ=|45lD+kOqoL z4!Rm>+GjR9ky*xaB=@XkdgHRFpwb8e6lTIurFE0+Z%@}h$9>}8F6V>VxIO-ZfCpFl z-{E!qcOw`7Pr*0v&g!_c@$Fv-<&T9nsNg%Sug`;eiJvi?mW48KywyM0Y}zz#Ra&+5 zK<4o*wfU?_MAo{It=&FjYj7qNX@pQi8}(K*29?ZGpe@My$M5%lY=3(9VRy3`FqWjy zyfU@syOJD&grfQJr2qAJj}(T%j7;X$^wrBnevYV2p)e`(Gdsl7-~4{d`sA=8W%Im= zG$SudbG>P$$@5aF#ekwhk3@JaJ1l4zORF1;b6glVHWrU(3XwE$MF(vc!sv~y(q=~} zQdBd;DZm=d6-^jjSEKpU0~y{N32KozMSkAgNB>iuJgkj7&VO{;zdHYgJ*)rpXW;bz zDcC0QJQ8D!VabZKI4@)!c2vt87QlBKB)v!Y-H1qpiwFRJz;%uF z2E9M*0?TtlKM4AMIPfjk3wncr1-%{5V=b+2qyn&t46mmf^0vjFDc-vJuR3+|7h{+L z_czo(4Ej|6pznG8evhsx8n~ea?#`Za1AAWo6RGjNEHHxmMHin@>8vU#V!L95I#F5O z%pIc&Boy)*!6ZUeLUV<%=nYAgq8KWaCVM0sy7?DO;X;-)2zY)J1X19^@H7UWR)%;d z=`M7jir@nC22HBQQVgl@v{FAK5W}jds}jp5qN&tarkb4RnAfWlx39=8#)^g&<4QMV zVl-wYu_3oOZf9p1xlFdy8q-Le$t-WFzxdzP`S(0b|K^Q8evEDUcf+31e;Bwu+5-kg z{~?80|4%?n!kx5Po&psfG7Z!021}5d6fV`YEl6^EAcMW-Vfr^8%Eynfb^rJ8?Emgu z|HiQXpMY=By#(8K?54h++BZ_!h13ly_znjLpsQ9TxGpXP&gx1vFg}jYk2>ZYIjvTX zo@8Zodp7O7N@VWbYtF;A5b^lUs~;zyUcVh3bv%)z(E06g7E4eh^p66a4t04M+eA$lF& diff --git a/test/12.unit-tests-dnssec.tpkg b/test/12.unit-tests-dnssec.tpkg index a6f21e649486c4d71f9f444648f91d0ae0927201..67e5b46ad07757deb80e7e0906f35ee24636d42f 100644 GIT binary patch literal 5647 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 literal 5601 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 diff --git a/test/13-unit-tests-base.tpkg b/test/13-unit-tests-base.tpkg index 200315396e5a0dd8eb78c946811ee87110e40ce1..3fd5d77ab0d487ac01c5c7e00b5b9b807a3cd089 100644 GIT binary patch literal 5338 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 S@qHiWhI!_%PNk{Mjz|DAmq{G=>DD_3^* z%9Urd{GV)inEvGbzd_ea#jPT3_@0e^fCaKa`;M(M*QMUnaOuP_8ND&QDb+$O&!%(7 z9{W0@8jbviy1HY`J&BM;Q|%9wf%3okinP05z;e6W9_3Bra%{QVRF-6^yiG;%&@wIN zncAf*S?0E=<0Q>q_o)3&9S)kU_8@<@!h6pPg!E1a&3^x=(|9+mZ*Gz(pZhJ$){42` zVpw0la+-jmcm*^OMFKy>MtvIXU%@ubDbqiLRcr@saOG$-R}u~Gy;GabD0|X)uc$+1 z#9MN#G~e^;A=<#RZF8HRT?JVh{K~sw?i`?!R0>Pb!m(vi$M!wLVrcy-Gv`!CO}HYu zJ)1)>Ido!bS3;eZa&+3wp9#s$-bugRQ3fhD=X{%-AqI5MX?vjL&lbv`bGx4m-wBP| z-FNw$Df6blIoE7b*PqXA$8%{hCl`pWfdcglrcZ5}lj#@gvN7Gfdm+_JuZk~JRh_FZ zHZOSd8^BKerP0aj*D4xK)pZqBRdbvPD#Y1rUfaf)PV$A{zHZV3bS&&_Nhb#Q9OP*6 zpEP@cs(=QxsM7@stsK0RFS2jIXPHIVwPw<6y0rQobF+k*E_)cwva@7j5NAeDJyKSnOkPGDL7qx%F;STseyKZjR(r`v@^;Bpg?LQR}nfTftJl-JE+Oy zeqb>+hE7;^hYgDMn=*Q3Tr&&6V;17Ld}ISd4oCcL%5ItNdoZ+}D}Tl;k5*GT*p_*h zWb+V@9pGW3C*2q>AZdpAu$QV`MQJIm?{n50#!bP!L~~(|LZ!Hcz;}L(=L%EbbKqPB z95?2cX@32nW9P(_LyI4nblK5v*U?$bWj3EYPRnyWY62zkZEGuU}(LJzEUwR*~E;=hF{HfnS&4rnP3g@N`?gm9SPyrGiLZR*R?s~I&-arNJx*| z1r)Qct$&W{U1l;J3g_F~(8oMhYj#ds$`GgL1~}z;Aw}PX0xB@^WyJaJdm+sl$)M(TREtU`scBSegEMU$+CY z!K|?{S;ZrrdIcQ_RENFhdmxR|#SObkp4vWImc>mL;)g@(zHiJm2sMKqo7uhs)DtfvXR1MUYLBs8b=oX>$)a|Z7WI?GI$U^ zc&C17kB;*$67Yf5>BF!Z;QD`7EaD1N1X#V_7#(9A?J|#Z5=!48NAPyrxjQf5vYm-G z3ovyCSz2u8kPpoKrNByAlIgTUydX!5oe(XS#i%`-FdSOOgiTFCeUop5NM=O~5X_qp z?$X>j(~Zd;>^a!PxTW@l&NWy|;TKV()eJF!lMIu%r){sZRJXzYB#9YBj3`d)I1rKD@P#Ck2}zZ~pf`ZMhGuPgbYfWJgg(d)d^A(Q zzzf}Pc=~oY$_GlJ>n=^pTpsUNX$q1+)W#!{rc4_{SJC`T`-~f~`CT!rGOUDOO9fD8 zBXhoDIVKzNRRY_NEB-cL_f>n&EY+S&OqfiC1p=);GzQ&-QivXPM?N-4vK(26Uta?Bkllyy0G&n)Mk0$LibOXw*B&pON?)DdL!eM3n>X zoviaM12B_yVd!&!{3aA4sW7S8O38BxpqNn2y|UHj)BF0Q#sA)(YIxnWQ(& zcu4wVA=nB@N2)S9h6p}YUKGqOn6O)qITqi0&@G7OHRtM0SP9NWp$Z1!HvYmE^$nM5 zp;+bD_DDTyv^%E*g=|0#p7q2lDePGn(dB|>c-m|#!(oypsHC*K+&pmNeg{2&L2=Yl z|E>&rd96T8TU4W4r8sD)jPly{rGRbIOAZ!1!?0DH*dD>gak%Qh_5>zBJW@W7pYaA$ z>X|r8hRBu!d#9uR>4^Nd57hr)Y2EvuvHQ)}K2du3{s&=u&t!SGvRm1&ly`QYl`EBU zrTTRL^E1+0&1GF}#%eURzsWBmTm-OGCM_l|ZFt4NwB#MIG4FaiXTfG(>7? z9xy&~40^;asVr0ZFSQ-`Z=W`m5v`PEnVe`ay}|#?snNeN(_{2+n&m>s+yvSy*m%__ zY1*^7Z9&jqBhA^k#UN%GyHLN#9W!&jq6HG3dXv7hs)Z8lkx1WmJz#^Uj;qkHL>m6> z5guT#LJFrV2|~2T?@w2ukUmB);~F`Fh!;?6|G`OZ-SH3BT3f~=@9d_V;>ib8+fJ??6F}tHq%^)Jm@vpN?h^6ww4;+ zCSLn87(r*ahnA$0*^@E6Obt!rj!smQ?+Avo^q7dKNwU)+pe&@W#;r9z4o zY4`Pm;5~UYxB|30cwxe6W%O@#}ov(F*q3OB9-e^JTnNN{Nr>RY2Z z{K>|u1xo;csIVSsp=S0uO9;flZv6uNNh$?lAdF+rcWJRG$`^vl=BpJ<*f}I2c;a(L zpCcFWnJ-^Nfj?7N6hS7G!lN4@T)~SWh`%AY1>c<64hwdC7I}SGUXcT+eS{`10i^aR(Qg3OU424uu(MmYXOW zFb4w_SLqurb5FtcA3m+S{$puf8IP?0a=Bbxy#GSH3Z(MW`u{Uh+WIe!#GfL7MFg<% zZ>{}7{E+Rm@c4Dm7<^PYKQZr0rg7=ka!bH$MAiEEAl*H17B5a5*qmV_dHbdGu`FIR z_Q;i+mieiIYBzB(WT zLv2IHgK5GXCl3@bWrlZYtUmU`oe+@ zT2m;P4S@8qtEO>h`({EQG)@O%LrhT@O)@dZZ~Lps9+W z36T;1h4uG&0uX682$VbRbU+5K)1G7Lvw1$zyIDkn{;wA5^>QKIDxB{^6Ot)y1&;)7 z42MC`Fw;EVEOhD&l=DWt{DvBTO*R#3UcC~%x@gRT!u zm~KHtIT5|o#=>n@Nxj#ht#0E);p~NHzIqjTTEJk8)>DPsVxRI{(qmt^l-ELt^8$9L zE-1vae7JGm@qQ2-qM;Y#pYHMDkbyCSJ`j-MTVDr13wXZpf^Lt$6dWkSVS4w5M6hM2 z_!Q^T_h4&HxeEN=TUaU^n+4?6vw$$Yn~w%LPW92)hBC9pG%|Q&)KHJw3Pe*aW!N0F z`=j1qi29!Nx_F6I*)4-py;)2b!n-(6^sqW`OZwIG*o3s~M|q>b9f#xIn+@^3D-+#g zaHGeqj%NS5)PB@yrWsZq-wsFZ1ylMaHaLE{$A^tEp>g#hOC|j#Kv+0Hz7VJ;E#|+t zh~UnVyM{Ra$P0u5YWd$@>z>m6v~K)|w<+t&cY+MT1Sy6UFc7&z zGSk8ukvk-$*~DVAc^G`t$xA$U7=0Pa>w^3t317cLWsrqBeB6o^@QX~v=P=Pnv)IUH zvw(jCHastKK-_&F|HL+i9pMI&3WSKqPnk@eh8uMwc_d@S`Rj z=6MSOL(Swl@OQp=>z7dFI*pguGa zSlcvrNOP~SJzywc#dQGr;$x~U#1`2|T2MB9t>{?LmPqrOXo^5^Cj26DR`r;~KdLH) zgn^Mv`-&#-2{oM`(n_;xWJr9qvA7|NF1eDNrs6I)Rfmj~fUVqlrs zsuu)lLdDCAZ+%y=%;AwI2B}i{2M&+FH3-q)yos_Chp|g{{DArRqn7n;_#;gC&7xEJ ze2*cozTc7%0NxnZ5B0;J=Z5%sR_1#Q77Xl@Mzc5kRc$H#PVeK1(jBQI*v2ZOx?Gm3 zKgwq_u5H3h=5FE1=e?<9ajPoXcluf=4$%yCdhnBPw6TBF4O-5 LEo?#!08jt`fTpzH literal 4468 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