From ae659b1879844807617920256a38fbdcae8648b2 Mon Sep 17 00:00:00 2001 From: llsth Date: Fri, 10 Jul 2015 23:00:05 +0200 Subject: [PATCH] Version 1.02 changes --- compiler.h | 12 --- configure | 6 +- lib/aos3/libtz.a | Bin 21540 -> 22302 bytes lib/aros-i386/libtz.a | Bin 17472 -> 26732 bytes lib/inline_amitcp.h | 201 ++++++++++++++++++++++++++++++++++++++++++ lib/socket_amitcp.h | 114 ++++++++++++++++++++++++ lib/tz.h | 62 ++++++------- main_amiga_client.c | 54 +++++------- main_amiga_poll.c | 27 +++--- main_amiga_sim.c | 24 ++--- main_amiga_test.c | 16 ++-- net_getaddrinfo.c | 5 ++ ntimed_platform.h | 156 +++++++++++++++++--------------- ocx_stdio.c | 8 +- time_amiga.c | 194 ++++++++++++++++++++++++---------------- time_stuff.c | 3 +- time_unix.c | 7 +- udp.c | 12 +++ 18 files changed, 627 insertions(+), 274 deletions(-) create mode 100644 lib/inline_amitcp.h create mode 100644 lib/socket_amitcp.h diff --git a/compiler.h b/compiler.h index d439fc6..8471a1e 100644 --- a/compiler.h +++ b/compiler.h @@ -33,7 +33,6 @@ #include #include #include -#include /* * See also: @@ -51,10 +50,6 @@ typedef uint32_t register_t; #endif -#ifdef AROS -# define HAVE_WAITSELECT -#endif - #ifdef __GNUC__ # if (__GNUC__ == 2 && __GNUC_MINOR__ == 95) # include @@ -75,19 +70,12 @@ typedef uint32_t register_t; # endif #endif -#ifndef _ALIGNBYTES -# define _ALIGNBYTES (sizeof(register_t) - 1) -# define ALIGN(p) (((uintptr_t)(p) + _ALIGNBYTES) & ~_ALIGNBYTES) -#endif - #ifdef __GNUC__ # define HAVE_ASCTIME typedef uint16_t in_port_t; typedef unsigned int sa_family_t; #endif -// Is this needed since we dont use IPv6 ? - // General socket address holding structure, big enough to hold either // struct sockaddr_in or struct sockaddr_in6 data: struct sockaddr_storage { diff --git a/configure b/configure index 4d146a6..0b8bec4 100755 --- a/configure +++ b/configure @@ -172,12 +172,12 @@ if $VALID ; then echo 'all: ntimed ntimed-poll ntimed-sim ntimed-test' echo '' if [ -n "$1" ] && [ $1 = "AMIGA" ] ; then - echo 'CC = gcc' - echo "CFLAGS = -O2 -DAOS3 -DWITHTEST -I. -Wall -Werror" + echo 'CC = m68k-amigaos-gcc' + echo "CFLAGS = -O2 -noixemul -DAOS3 -DWITHTEST -DHAVE_LIBTZ -I. -Ilib -Wall -Werror" echo "LDLIBS = -Llib/aos3 -ltz -lm" elif [ -n "$1" ] && [ $1 = "AROS" ] ; then echo 'CC = gcc' - echo "CFLAGS = -O2 -DAROS -DWITHTEST -I. -Wall -Werror" + echo "CFLAGS = -O2 -DAROS -DWITHTEST -DHAVE_LIBTZ -I. -Ilib -Wall -Werror" echo "LDLIBS = -Llib/aros-i386 -ltz -lm" else echo "CFLAGS = -O2 -Wall -DWITHTEST -Werror" diff --git a/lib/aos3/libtz.a b/lib/aos3/libtz.a index 65d654d122fb9eeff51940451c8c6e468026d143..139a697ae8a732c49ef3ec7e70afeb24056e0585 100644 GIT binary patch delta 5319 zcmZ`-4Ny~87QQ!$F+#-fBLu?FBgQNcAShG;sRG)XrY@_Z9d~UdQAk7*pnxuA+$Q`; zk-F9Lm~OZ2x?8ukU27dGZpS)~L#^AoZD)sZY=_;kTiV+CGqvrujH{NK{qDOLdHeTf zlJ7g`o_p@O=id9?JMV>;>HZ^hUrMNOQBiTh!s0?nT2N51VCr8ISK-1U!8}ofkbU^! zqJ8)?2%IC(EKm}dFR(=5y#lKQZcs2pNR3cz71$!MgOHL5475w&6ND^#j9e$p2< zAMFd=aK{Gp`fwPwRS#8duUb!t>r#PaV?ErwM{&%lBBY(#*XT2HzV3edvD~2x(job>ZazIB$IMtv-<9v3al82Y+m7&;J@y`8$++KHFkJUG1H&`Rm}a9q^)I@&uNGbfYM zUb(>Zx~7fDUzo~P+4G6XL+H~jnxkR=CL#4(8;MSuH5#t?hv5gwaHVfwpN(AU9}Iup z&n(=%enNfCONMp_2;HRbB6Lj{KGw;Nv1WsCQ6xVR+f$o$Pt~A19MEhEGmrAfQEVYd zyNh-bYRe~z@v;7RQ_m z+bCxH+Ju1wzhV)N?v|V5=4X%CR#f*}%@T#C(@L)F9tcYmad&>*cRpO*e+=XL#wE>Y zw|pvYp|0}P$Qk*YxHZ%$SH{o7lKJ8@(sZ`+)q9ztpOF2PFFEswku9+aD|NF-J`i6> z+vN{oohsjo&!#@vmXJ*^$yEs%^s3yLu%24wGYRWskJ{Kuj=F-8F{d7@bwJLUyM#)z zZ|)g42E3ogj!*^qSHwsANG=~Me>EDV$GFXa-#Xgv~(|-Nc_py#OMzD zP0ZM-VbKuiZ^g)C<`tpK-*Sa(+mfuRH`qz2JhUv_Og!a^d6YBSOTHVl5$42id!0=z z#TZXY{Rx)I}!PVZwP;&T6q_&m)GcGPeKS-TqXk zwn~0B+2&1cO6SMol~f+W>b>r;FUsR`BcQ{n!E$$xf1y+B)ZKHFki?0q0oLwU@|ra0 z)G2aTlj%Qwc**5+^G-7lvXqiky_EZQVn;{Hr_Q*STsnxc^j@5wO9xfjeb7p5{9K(c zfu*Qn&`WOTZrIyQ=Z!Ee?03lhDZiwH!)8kjjqUN2wo@Bj{$<97A0y1v9=R{|=k)YI zTFK&*h&GD#A_R%ead-O+d}cm)nH+O!FgGNIjgpJA`9s)-7%%RVo6{`RChtkR%Q6TX z>?AKC2dzlo!ISPTzn(FYB40>LhSl}7Y(yfZe?)1ed^_V$*eqwHMvYZJT$Jf#x?1Zs zIx@U=-b)&KT)s8`;iPh&M<1c>?pGt@jkWBc7$v#O-h|HI+8bcL=|}T*^pxD=sH5A4 zuR0#5a|cdO{o<4n(|pUvicuB7o8L=GahyvQWq z7$k+w0l$m55trkkh$n-BF#;3tbYS{)JTw^EA6GC{@DhfPm6>Jw6=BQc7J8B*k z_$5beoIp5?T}_DAE#!6BT1TNsX$kV150xYIzPyTNhhVM5X%M`Om!acm+VC}}AlAZbX*hkyCg2jv5sd$cx7xEEISZrFxc{C!WF3zJagRd6)5%7mNH%j0Q zoQI5A5Vng34|rH`Y(?59_;v6nIiHO~O`j9|D)@_>$NU|9NEO@(6+gpmtR1lVNTt81 z!)*gs;t4cd<3@?t5%iy&Cq0F;!5#s)4yS_8=KK}Llevw#54h;O~hJhrq`;$ApPyT<`?&t6~5)`yV*B>TxHCoen~4 z;r5xxuGXs3JB0oM#@8098kPx1<>(;Jmi0JzJ=f2}=F)})-wOVi;F!Hu?2qhi;Nm=G zp9KFcw{Zl(kMMyVhry34d?s;>Kp2s~xw~|DY|(XErc|@2N^9y{Yryl17bwN)maTPL z8Wa|+3#!W9peTElqF0VD$*;Uqf&P2pJ5?y(X@(Oxx+AhuR}{nYKuOsgQ3iWkIgvjr z>B&)-!b$}!T1Bmk4+&G%?(p-aGjs+~`WB+}HPa&bouwy}S5Bv!tW)t#ECcdimr2P} zMfH@^J3i&-OOteW6_hL*&M$u{E+kH~_A<7{7L}(46@OU8JNQD(cEesA^4T~GL>%(j z*i~e&%Kq0X{=AAG;+)-!2|1=}IH^qGchwg8RCR@{S!ZQaVP6HNW-^@~HkDBEqJrt~ zEXub44U1vwVmE1am9xL9^^pnJrDdgAL1M~9fzRIj327(hboRc#0q_65iRQea9-pC& zIw~WRo+wmflRF%*Lt{#Jg^P*n%yAr8zrMqCVvo<(Trd>s@uiy*ahq@V>+!$AXENpE z-l>?bd!l$JF|iK57_g|ef@3{C9hkwkGZcwL7VV5g@RB^~ha5&Azk1JZU#AExv?u54wJ3k1EWqAV;5Vkaaee>v8*ki|1 zP3zJ_(_+gX&h@}d*Yf9cJz4aPGmRvY>V6dkW}Jk&!M)3`lVYmF68rwbKg(Qua5D0~ zs2H#jwRnRdNAcRj@LfV?0I3TV14BGR6h!+>Cclk$FowGGgv^qEu{O=a?@BCMlCRp& zi&eZr#qU?~^(wwe#r-PYjB{aii?cv*Uu$jlZowzFnwnr!ZEbxaW3}}=1Pg8tD6GD< Zw%%WlFMIW^-azwKFC*KVo9kN0zW_^2b|e4* delta 4531 zcmZWt4RBP|6~6cF64oW8n@vbI$tHPu*=z~<*$_fZB1IzDZr7Ni5tY z^1kn!d(OS*ocr_kvUh|(|03U+9j~mdy1AyRx>DB{R#YsUe(Ursk`3k)b~46x;tvlW z!OKDDCd?x&Cafb25;haABiw9aoUuMqY$FtedkOb3RyT+N4-&q~*wWpQ-(&37E5MIh zd-^&fu{H+8zwWjkVv&xHP3wq9yV{fiRFRIJ2V!llU43Ya_O;GvOw$>uwab*-W760{ zNxyDJZ8FlvHkw__p8HyrU{Y}x&kjJf{()#zId=DSDK;};`6jc_3#-(WREXa+WiDM< zRaLuadIC6~%~&Z?mc>srFlJvV1)v8nSK}(i0%gq6_`1|J-q-k$ILRAp^cZu5T=$Iy z6TvaVv3l!22NRxygB_Qof$3rkXwx$7fqJzWkKfqUGtjX4riB{`_fUBgT^T zVrKtru>P`)MSP$c!BS=lc6|xPE!7i7Lb6gSr9J3ek7sVC(&HS*aoOQkCs!_6R z>QbO=>STmn%>cgu{xP_70V**y3C8@(z>Y=OHy8a1 zdC%yTlmgCsgx7UQ9CIycnBU1x|I6b&?(8o>> z?@oL>DB9+W^J&GrOL)_ZF@4`p&*zgOn!buxi6iN& zQs45)S(ymNrX~YPsQid9=H0?mM9aKK_}bCQdH>>BTVQY?*vq&9!xdWt9P<7MJF{LK z%dFAPED$N4KjcG2vO^IBh6}@Mh)m=R{pr?z~}g z(0W*?KbjP9qSvQIN0v-wdsazY-;}3TvAit+!0Ddo#9{z(tbU*EHuzw8L$QH zx1*RD#~XLa_V#2sPUgb_yD9f?a{YfF5q9d6!g1L{!xwh%)K_v#-E%KCDz>fk_0VXd zIy?22;}|h1f(88VWZ*y2_M$|$uV8?l}%mpmrY%r4oucvTJ4`N267iK-UH7vhW*4|FtEK}7z_2c zCrQRii|W~Y>FtYIyp`v<++qan$@>TAK5;SsFIWsm^iHkd)M#lzK-pI5H^<_QV@WQEaeoEfc`tf zg!ufIL3XWB?Jj(srCsVyg>G;uyTgQs6sA=w|1|s*knL%xh{TL2zFRBtOCSRsn~HZ8 zW@Zp>QyFIBCxFa6^9bPt;R&)kr%-+krJcu3xPbKcll&lIFChZ-#*tB$Qz^1xAOp$n zQ0}~%5e3kIegh$B_m6LW}3dCEZDwq3}YR}uLDw2l);&Q-zziP-& zsD}K*3U!TewQAQlko-r+>Jhm9E@KVA0-BP7?JD5Hv&!DrLfAw2yz=**RC1Aq`ImEC zgg+Tb(KE`R_+cd%BSX11ia%Cz2?CIrm2{H4h43xXPbhol!~%n#hQ!v0RBLtwcLA&Xf4L!r2HoAM%_%s$9z9;dx!YpJaOPqB`4V3%7n!`Ls_^HAIv^T=8 z02NvZG*B_QOAG{RBKng77h)Sqxey(gSg!Qq%EHC*07tL%EVe6xwZrO(XMo>HJR7`; zxDR{{@lxl9L4946K@3HNgPX=?;(B?{I`nF9R}Y| zd=mUM#Zx{2AF~AazJ(vNV;|r#Ff05EOTz`_obfF5*N7u(ZMNc>z2K>8g7)j+xr)Ce zd9kwb_`qv#^r_X)l0z}iQt0oX$#r0S?Ot-Y2YkJ1*ob|lb&$gVc(0|SgoSS-8)T{d zg8D((wO=cq^Bnl^E%q-fy*CQ|A^6Jtb8y^ge{#S2b>TPk5&uIvj?-MH<}8`0TTQ^Q+uxZk3u^|Ip+mtOSe8_OTkcdx6_TkgcR%G#U7qNPW&LO14v{n)}IC`+A8rT*4}Z0Gbvd%E}k z>D<0}VMXQW)3@$($7%c9uryfI(p#s6_gMJP)y&Ps>@r#bbGyKwAbmRcE{pxM7QWBI a4=65AdB)zbG>jvSRYGrCAyZk`RQO+843Aj= diff --git a/lib/aros-i386/libtz.a b/lib/aros-i386/libtz.a index 84b6f5b4c95d0d9dbafbd47d2a5f86727f42030c..ac37c0169e0bb2d47e514c3ab6c58d0f16a9f68a 100644 GIT binary patch delta 13550 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 N1E>Pgw1g4;e*i3J=T-m! delta 5281 zcmbtYe^?ZC8voAh01K=QDuN{fsRbzFE+D!BB@3u!6l7>mWojywWLEBW#tE}FyS2kG zN`2uTyP&g=LgNGF#Hmr>Bu}JGq?T5PuU6>U=^xS*jnOW1i`{!<-hxxp} zzwh^b-}%lAgS||rhpE3o$h2l>XJ%*3OHMW?6RAzRohdIUwCdns#ER_uIHaHd@TnFWQX?WD#XW!y09%6u# z!^IKCku5Lclvt+{TdySadcR=Py1ZXR7#@s~iwBv0@rddE2Uo4^s;CDaaM671?~5a> z{Wf=};}dx~r`Upu$*Gt;O2WG#f4O+b-6_})ietGo`?hsC%NR1Sr=q^%U_B#^Ko*uB zcOT#2l}d&N-c+6@@|`BB#4o)oc19jFX?aS=3&mE*NOBL94Sy?rw;!&ksF3=H|KS~Dy%&?xP6|p?y!bS`-JzjA^D(DyvXp|j{>bMj*v_Iw?Ue6 z`Orsa4dp{h>F!Jwr_t{#H2DS2DG=QznRBs=_AnT8$77@2!f;ht5v!?@>O@97AptH65R zaYl9w{jyb}FCt(I27@!j!x4cwKqzH~z&JqBX9)ZVYv~)2Mgo-}1z1Px!kVrhgEIMw zPs4IVa_qA7NGA`(0PTOB7KGoJ;Rz#z?>H>_&EiO;G{Qf(2ny#MOXpqrDlwaPWvj$2 z$F#sqS|4r}8eDz6>rsfRnypreT;8<;2&Mc>N!bdk`@=2yDzlBrP~#aG9s6^z#zC&I6@9UDkPK!fLfli(=^4*qGY88L4Df z;87YGH7)(&5!^QK@?8oBo%7RqcLxv)mGbxfCA#L%s)q3H7P=y;foYF1dP-RJ}9sIP9TZ`fA1UW!nZX^+Th&q{ieF*oQJ1u0C5Vy8CQ6n*>Xk z4vnh4&XBi&cj29$H-~rCQpX*Qt!DYe={rZDh>0F{Ep)e!RJpR^!5GzEMEN5P_oK=G8O_^;gM3>TVqjT|c!FXEc6 zsjAsEV%Y2u-_~A={ulX<3*O7fL?1X)sAgTo1^5;<6h!wU^(8i`68PI$H8fB}LUU@Q{xyW2l61oh{=q;-T%->aO zYdg*#U$+a4=oA(?* z82E#w&+?_$&r3{tkjMFYp= z{pv23bMkVd)QCP7C>vt6u&&YTuj>$QreEBMaJ4fE{}mH z0xZh6bxH*s-&Po=1f8e|0%kjqS#&Vli@CWDrcr!G8IfMax_ zwRh`))H~b@b-b~c=?c}0)gCHQl0v}S(&uwy2CzFKyHR3Qd0u%7Bz#8}&Sj@`-g^cn zI@=I=4DVmZx6-gTn8bG!a@eFEbw?cd@@+-YT(p}LfG!Y6Img$FYwm;ByA!X)o%fZL9Ix4QWVw*8yn@s`&*<;T+s* z+;$nVbZ&0yKp1G$LQCUKmL99x#hU4rUb<#doG{O~5Z~fR!N7?tx}}xgP?KD2Dl|#d zCfbqcTd1DoU|c)VIR*`>gbCt1`lM1*;lMk(Y(+>GQ#f$K*`5yh6Z=iFdj=3`{fv6v zmIe3Y*e}c1&iS&?@h!IFbA#CDi|TE`*35CXr-CGkcfA5xYQ2(eoTbm&TT?|xCnZf% zr<8B2$N8%~9BWW{nif|soC@s5=a#zQ66ZT%S|E1`RA`$zk60vrM?Ub~E>%k`JxZhb zFxgA!*OT0 zaWJv;Z}DFwocKl!<#xlG2lL<}omAYb!QOx98~XX=$?U7&v<^=$i(y~?ir${~0ekMV z*6U}UW7zM`QZ{`C+kdh(HT^k;Ju-v-W%iBi)*1Bp?72Bd;HfF~-+%wgKH zjFDFwH)szgeD6D{MJbZWMwFtcgX ztv9n1W>cpng_{F+9DTzwJ-jmuri`WLqEcF46hpH!7cdsODRTp7Bf!@K58YRJ1~wb|VM39>?*qLVXk0M%XZl3ozXW}`uAd2f9yBtPKsGy- zkaZxy!yNN%I^6ewttVWxi4SKo5PJ+p9v>pk_a!5%ruw`9bbR}WTFY#VAODvj=zu8?Al=A4llQevkCb?=g;VT9PA4H z96Ht^a)h+#xL=ol1-oW42w4f6W;lV6ZX_Vf_W-dZiBJXPdl4bvWklGy0jk2nfnWy2 z!1+4bP!7YoO6RL|6i{v<#DhF6SceGlUex*DAPOL8LIMK5spH!^dJ)0#eVsq0<5xPK z*Kq_9>!ah8q+I^Lt>1|0<*p9f?Y5b|5Z`Gg#vN$w)7m5>uCxD}=n4Ov2>V4!e;8+1%U z1bLaxFW31e0og)A&gcogK9eTrrW!;4t7 +#endif + +#ifndef AMITCP_BASE_NAME +#define AMITCP_BASE_NAME lss->lx_BsdSocketBase +#endif + +#define TCP_Accept(s, addr, addrlen) \ + LP3(0x30, LONG, TCP_Accept, LONG, s, d0, struct sockaddr *, addr, a0, int *, addrlen, a1, \ + , AMITCP_BASE_NAME) + +#define TCP_Bind(s, name, namelen) \ + LP3(0x24, LONG, TCP_Bind, LONG, s, d0, const struct sockaddr *, name, a0, LONG, namelen, d1, \ + , AMITCP_BASE_NAME) + +#define TCP_CloseSocket(d) \ + LP1(0x78, LONG, TCP_CloseSocket, LONG, d, d0, \ + , AMITCP_BASE_NAME) + +#define TCP_Connect(s, name, namelen) \ + LP3(0x36, LONG, TCP_Connect, LONG, s, d0, const struct sockaddr *, name, a0, LONG, namelen, d1, \ + , AMITCP_BASE_NAME) + +#define TCP_Dup2Socket(fd1, fd2) \ + LP2(0x108, LONG, TCP_Dup2Socket, LONG, fd1, d0, LONG, fd2, d1, \ + , AMITCP_BASE_NAME) + +#define TCP_Errno() \ + LP0(0xa2, LONG, TCP_Errno, \ + , AMITCP_BASE_NAME) + +#define TCP_GetDTableSize() \ + LP0(0x8a, LONG, TCP_GetDTableSize, \ + , AMITCP_BASE_NAME) + +#define TCP_GetHostByAddr(addr, len, type) \ + LP3(0xd8, struct hostent *, TCP_GetHostByAddr, const UBYTE *, addr, a0, LONG, len, d0, LONG, type, d1, \ + , AMITCP_BASE_NAME) + +#define TCP_GetHostByName(name) \ + LP1(0xd2, struct hostent *, TCP_GetHostByName, const UBYTE *, name, a0, \ + , AMITCP_BASE_NAME) + +#define TCP_GetHostId() \ + LP0(0x120, ULONG, TCP_GetHostId, \ + , AMITCP_BASE_NAME) + +#define TCP_GetHostName(hostname, size) \ + LP2(0x11a, LONG, TCP_GetHostName, STRPTR, hostname, a0, LONG, size, d0, \ + , AMITCP_BASE_NAME) + +#define TCP_GetNetByAddr(net, type) \ + LP2(0xe4, struct netent *, TCP_GetNetByAddr, LONG, net, d0, LONG, type, d1, \ + , AMITCP_BASE_NAME) + +#define TCP_GetNetByName(name) \ + LP1(0xde, struct netent *, TCP_GetNetByName, const UBYTE *, name, a0, \ + , AMITCP_BASE_NAME) + +#define TCP_GetPeerName(s, hostname, namelen) \ + LP3(0x6c, LONG, TCP_GetPeerName, LONG, s, d0, struct sockaddr *, hostname, a0, int *, namelen, a1, \ + , AMITCP_BASE_NAME) + +#define TCP_GetProtoByName(name) \ + LP1(0xf6, struct protoent *, TCP_GetProtoByName, const UBYTE *, name, a0, \ + , AMITCP_BASE_NAME) + +#define TCP_GetProtoByNumber(proto) \ + LP1(0xfc, struct protoent *, TCP_GetProtoByNumber, LONG, proto, d0, \ + , AMITCP_BASE_NAME) + +#define TCP_GetServByName(name, proto) \ + LP2(0xea, struct servent *, TCP_GetServByName, const UBYTE *, name, a0, const UBYTE *, proto, a1, \ + , AMITCP_BASE_NAME) + +#define TCP_GetServByPort(port, proto) \ + LP2(0xf0, struct servent *, TCP_GetServByPort, LONG, port, d0, const UBYTE *, proto, a0, \ + , AMITCP_BASE_NAME) + +#define TCP_GetSockName(s, hostname, namelen) \ + LP3(0x66, LONG, TCP_GetSockName, LONG, s, d0, struct sockaddr *, hostname, a0, int *, namelen, a1, \ + , AMITCP_BASE_NAME) + +#define TCP_GetSockOpt(s, level, optname, optval, optlen) \ + LP5(0x60, LONG, TCP_GetSockOpt, LONG, s, d0, LONG, level, d1, LONG, optname, d2, void *, optval, a0, int *, optlen, a1, \ + , AMITCP_BASE_NAME) + +#define TCP_GetSocketEvents(eventmaskp) \ + LP1(0x12c, LONG, TCP_GetSocketEvents, ULONG *, eventmaskp, a0, \ + , AMITCP_BASE_NAME) + +#define TCP_Inet_Addr(cp) \ + LP1(0xb4, ULONG, TCP_Inet_Addr, const UBYTE *, cp, a0, \ + , AMITCP_BASE_NAME) + +#define TCP_Inet_LnaOf(in) \ + LP1(0xba, ULONG, TCP_Inet_LnaOf, LONG, in, d0, \ + , AMITCP_BASE_NAME) + +#define TCP_Inet_MakeAddr(net, host) \ + LP2(0xc6, ULONG, TCP_Inet_MakeAddr, ULONG, net, d0, ULONG, host, d1, \ + , AMITCP_BASE_NAME) + +#define TCP_Inet_NetOf(in) \ + LP1(0xc0, ULONG, TCP_Inet_NetOf, LONG, in, d0, \ + , AMITCP_BASE_NAME) + +#define TCP_Inet_Network(cp) \ + LP1(0xcc, ULONG, TCP_Inet_Network, const UBYTE *, cp, a0, \ + , AMITCP_BASE_NAME) + +#define TCP_Inet_NtoA(in) \ + LP1(0xae, char *, TCP_Inet_NtoA, ULONG, in, d0, \ + , AMITCP_BASE_NAME) + +#define TCP_IoctlSocket(d, request, argp) \ + LP3(0x72, LONG, TCP_IoctlSocket, LONG, d, d0, ULONG, request, d1, char *, argp, a0, \ + , AMITCP_BASE_NAME) + +#define TCP_Listen(s, backlog) \ + LP2(0x2a, LONG, TCP_Listen, LONG, s, d0, LONG, backlog, d1, \ + , AMITCP_BASE_NAME) + +#define TCP_ObtainSocket(id, domain, type, protocol) \ + LP4(0x90, LONG, TCP_ObtainSocket, LONG, id, d0, LONG, domain, d1, LONG, type, d2, LONG, protocol, d3, \ + , AMITCP_BASE_NAME) + +#define TCP_Recv(s, buf, len, flags) \ + LP4(0x4e, LONG, TCP_Recv, LONG, s, d0, UBYTE *, buf, a0, LONG, len, d1, LONG, flags, d2, \ + , AMITCP_BASE_NAME) + +#define TCP_RecvFrom(s, buf, len, flags, from, fromlen) \ + LP6(0x48, LONG, TCP_RecvFrom, LONG, s, d0, UBYTE *, buf, a0, LONG, len, d1, LONG, flags, d2, struct sockaddr *, from, a1, int *, fromlen, a2, \ + , AMITCP_BASE_NAME) + +#define TCP_RecvMsg(s, msg, flags) \ + LP3(0x114, LONG, TCP_RecvMsg, LONG, s, d0, struct msghdr *, msg, a0, LONG, flags, d1, \ + , AMITCP_BASE_NAME) + +#define TCP_ReleaseCopyOfSocket(fd, id) \ + LP2(0x9c, LONG, TCP_ReleaseCopyOfSocket, LONG, fd, d0, LONG, id, d1, \ + , AMITCP_BASE_NAME) + +#define TCP_ReleaseSocket(fd, id) \ + LP2(0x96, LONG, TCP_ReleaseSocket, LONG, fd, d0, LONG, id, d1, \ + , AMITCP_BASE_NAME) + +#define TCP_Send(s, msg, len, flags) \ + LP4(0x42, LONG, TCP_Send, LONG, s, d0, const UBYTE *, msg, a0, LONG, len, d1, LONG, flags, d2, \ + , AMITCP_BASE_NAME) + +#define TCP_SendMsg(s, msg, flags) \ + LP3(0x10e, LONG, TCP_SendMsg, LONG, s, d0, const struct msghdr *, msg, a0, LONG, flags, d1, \ + , AMITCP_BASE_NAME) + +#define TCP_SendTo(s, msg, len, flags, to, tolen) \ + LP6(0x3c, LONG, TCP_SendTo, LONG, s, d0, const UBYTE *, msg, a0, LONG, len, d1, LONG, flags, d2, const struct sockaddr *, to, a1, LONG, tolen, d3, \ + , AMITCP_BASE_NAME) + +#define TCP_SetErrnoPtr(errno_p, size) \ + LP2(0xa8, LONG, TCP_SetErrnoPtr, void *, errno_p, a0, LONG, size, d0, \ + , AMITCP_BASE_NAME) + +#define TCP_SetSockOpt(s, level, optname, optval, optlen) \ + LP5(0x5a, LONG, TCP_SetSockOpt, LONG, s, d0, LONG, level, d1, LONG, optname, d2, const void *, optval, a0, LONG, optlen, d3, \ + , AMITCP_BASE_NAME) + +#define TCP_SetSocketSignals(SIGINTR, SIGIO, SIGURG) \ + LP3NR(0x84, TCP_SetSocketSignals, ULONG, SIGINTR, d0, ULONG, SIGIO, d1, ULONG, SIGURG, d2, \ + , AMITCP_BASE_NAME) + +#define TCP_ShutDown(s, how) \ + LP2(0x54, LONG, TCP_ShutDown, LONG, s, d0, LONG, how, d1, \ + , AMITCP_BASE_NAME) + +#define TCP_Socket(domain, type, protocol) \ + LP3(0x1e, LONG, TCP_Socket, LONG, domain, d0, LONG, type, d1, LONG, protocol, d2, \ + , AMITCP_BASE_NAME) + +#define TCP_SocketBaseTagList(taglist) \ + LP1(0x126, LONG, TCP_SocketBaseTagList, struct TagItem *, taglist, a0, \ + , AMITCP_BASE_NAME) + +#ifndef NO_INLINE_STDARG +#define TCP_SocketBaseTags(tags...) \ + ({ULONG _tags[] = { tags }; TCP_SocketBaseTagList((struct TagItem *)_tags);}) +#endif + +#define TCP_SyslogA(level, format, ap) \ + LP3NR(0x102, TCP_SyslogA, ULONG, level, d0, const char *, format, a0, va_list, ap, a1, \ + , AMITCP_BASE_NAME) + +#define TCP_WaitSelect(nfds, readfds, writefds, execptfds, timeout, maskp) \ + LP6(0x7e, LONG, TCP_WaitSelect, LONG, nfds, d0, fd_set *, readfds, a0, fd_set *, writefds, a1, fd_set *, execptfds, a2, struct timeval *, timeout, a3, ULONG *, maskp, d1, \ + , AMITCP_BASE_NAME) + +#endif diff --git a/lib/socket_amitcp.h b/lib/socket_amitcp.h new file mode 100644 index 0000000..279cf7c --- /dev/null +++ b/lib/socket_amitcp.h @@ -0,0 +1,114 @@ +/* + * Copyright (c) 2015 Carsten Larsen + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +#ifndef _SOCKET_AMITCP_H +#define _SOCKET_AMITCP_H +//--------------------------------------------------------------------------// +#define AMITCP_BASE_NAME SocketBase +#include "inline_amitcp.h" +//--------------------------------------------------------------------------// +#define socket Socket +#define bind Bind +#define listen Listen +#define accept Accept +#define connect Connect +#define send Send +#define sendto SendTo +#define sendmsg SendMsg +#define recv Recv +#define recvfrom RecvFrom +#define recvmsg RecvMsg +#define shutdown Shutdown +#define setsockopt SetSockOpt +#define getsockopt GetSockOpt +#define getsockname GetSockName +#define getpeername GetPeerName +#define inet_addr Inet_Addr +#define inet_network Inet_Network +#define inet_ntoa Inet_NtoA +#define gethostbyname GetHostByName +#define gethostbyaddr GetHostByAddr +#define getnetbyname GetNetByName +#define getnetbyaddr GetNetByAddr +#define getservbyname GetServByName +#define getservbyport GetServByPort +#define getprotobyname GetProtoByName +#define getprotobynumber GetProtoByNumber +#define getdtablesize GetDTableSize +#define gethostname GetHostName +#define gethostid GetHostId +#define vsyslog SyslogA +#define syslog Syslog +//--------------------------------------------------------------------------// +#define Accept TCP_Accept +#define Bind TCP_Bind +#define CloseSocket TCP_CloseSocket +#define Connect TCP_Connect +#define Dup2Socket TCP_Dup2Socket +#define Errno TCP_Errno +#define GetDTableSize TCP_GetDTableSize +#define GetHostByAddr TCP_GetHostByAddr +#define GetHostByName TCP_GetHostByName +#define GetHostId TCP_GetHostId +#define GetHostName TCP_GetHostName +#define GetNetByAddr TCP_GetNetByAddr +#define GetNetByName TCP_GetNetByName +#define GetPeerName TCP_GetPeerName +#define GetProtoByName TCP_GetProtoByName +#define GetProtoByNumber TCP_GetProtoByNumber +#define GetServByName TCP_GetServByName +#define GetServByPort TCP_GetServByPort +#define GetSockName TCP_GetSockName +#define GetSockOpt TCP_GetSockOpt +#define GetSocketEvents TCP_GetSocketEvents +#define Inet_Addr TCP_Inet_Addr +#define Inet_LnaOf TCP_Inet_LnaOf +#define Inet_MakeAddr TCP_Inet_MakeAddr +#define Inet_NetOf TCP_Inet_NetOf +#define Inet_Network TCP_Inet_Network +#define Inet_NtoA TCP_Inet_NtoA +#define IoctlSocket TCP_IoctlSocket +#define Listen TCP_Listen +#define ObtainSocket TCP_ObtainSocket +#define Recv TCP_Recv +#define RecvFrom TCP_RecvFrom +#define RecvMsg TCP_RecvMsg +#define ReleaseCopyOfSocket TCP_ReleaseCopyOfSocket +#define ReleaseSocket TCP_ReleaseSocket +#define Send TCP_Send +#define SendMsg TCP_SendMsg +#define SendTo TCP_SendTo +#define SetErrnoPtr TCP_SetErrnoPtr +#define SetSockOpt TCP_SetSockOpt +#define SetSocketSignals TCP_SetSocketSignals +#define ShutDown TCP_ShutDown +#define Socket TCP_Socket +#define SocketBaseTagList TCP_SocketBaseTagList +#define SocketBaseTags TCP_SocketBaseTags +#define SyslogA TCP_SyslogA +#define WaitSelect TCP_WaitSelect +//--------------------------------------------------------------------------// +#endif diff --git a/lib/tz.h b/lib/tz.h index ade7422..46a21d3 100644 --- a/lib/tz.h +++ b/lib/tz.h @@ -43,9 +43,16 @@ * ftp://ftp.netbsd.org/pub/NetBSD/NetBSD-release-6/src/include/time.h */ +#ifndef _TZ_HEADER +#define _TZ_HEADER + extern char *tzname[2]; -struct tz_tm { +#define TZVARIABLE "timezone.prefs" +#define TZDIR "LOCALE:Zoneinfo" +#define TZDEFAULT "localtime" + +struct tm { int tm_sec; /* seconds after the minute [0-61] */ int tm_min; /* minutes after the hour [0-59] */ int tm_hour; /* hours since midnight [0-23] */ @@ -59,42 +66,31 @@ struct tz_tm { char *tm_zone; /* timezone abbreviation */ }; -typedef long tz_time_t; +#ifndef HAVE_TIME_T +typedef long time_t; +#endif + typedef struct state *timezone_t; -void tz_tzset(void); -void tz_free(const timezone_t); -timezone_t tz_alloc(const char *); -tz_time_t tz_time(tz_time_t *); -tz_time_t tz_mktime_z(const timezone_t, struct tz_tm *); -tz_time_t tz_mktime(struct tz_tm *); -struct tz_tm *tz_localtime_rz(const timezone_t, const tz_time_t *, struct tz_tm *); -struct tz_tm *tz_localtime_r(const tz_time_t *, struct tz_tm *); -struct tz_tm *tz_localtime(const tz_time_t *); -struct tz_tm *tz_gmtime_r(const tz_time_t *, struct tz_tm *); -struct tz_tm *tz_gmtime(const tz_time_t *); -char *tz_ctime_r(const tz_time_t *, char *); -char *tz_ctime(const tz_time_t *); -char *asctime_r(const struct tz_tm *, char *); -double tz_difftime(tz_time_t, tz_time_t); +void tzset(void); +void tzfree(const timezone_t); +timezone_t tzalloc(const char *); +time_t time(time_t *); +time_t mktime_z(const timezone_t, struct tm *); +time_t mktime(struct tm *); +struct tm *localtime_rz(const timezone_t, const time_t *, struct tm *); +struct tm *localtime_r(const time_t *, struct tm *); +struct tm *localtime(const time_t *); +struct tm *gmtime_r(const time_t *, struct tm *); +struct tm *gmtime(const time_t *); +char *ctime_r(const time_t *, char *); +char *ctime(const time_t *); +double difftime(time_t, time_t); +time_t time(time_t *x); #ifndef HAVE_ASCTIME -char *asctime(const struct tz_tm *); +char *asctime_r(const struct tm *, char *); +char *asctime(const struct tm *); #endif -tz_time_t time(tz_time_t *x); - -#ifdef HAVENOSYSTIME -#include -tz_time_t time(tz_time_t *x) -{ - struct timeval tv; - GetSysTime(&tv); - - if (x) { - *x = (time_t)tv.tv_secs; - } - - return (time_t)tv.tv_secs; -} #endif diff --git a/main_amiga_client.c b/main_amiga_client.c index 966397c..0ab5067 100644 --- a/main_amiga_client.c +++ b/main_amiga_client.c @@ -25,15 +25,13 @@ * */ -//#include - #include "ntimed_platform.h" #include "ntimed.h" #include "ntp.h" #include "udp.h" #define ARGSFORMAT "P=PARAM/K,T=TRACEFILE/K,SERVERS/M/A,SYNC/S,SAVE/S,SHOW/S,QUIET/S" -const char *vers = "\0$VER: ntimed-client 1.01 (18.04.2015)"; +const char *vers = "\0$VER: ntimed-client" AMIGA_VERSION; #define PARAM_CLIENT PARAM_INSTANCE #define PARAM_TABLE_NAME client_param_table @@ -42,12 +40,11 @@ const char *vers = "\0$VER: ntimed-client 1.01 (18.04.2015)"; #undef PARAM_CLIENT extern int validtime; +struct RDArgs *rdargs = NULL; +struct ntp_peerset *nps = NULL; +struct todolist *tdl = NULL; +struct udp_socket *usc = NULL; int savetime; -int started_from_wb; -struct RDArgs *rdargs = NULL; -struct ntp_peerset *nps = NULL; -struct todolist *tdl = NULL; -struct udp_socket *usc = NULL; struct ntimedargs { char *params; @@ -64,30 +61,19 @@ static void clean_exit(); int main(int argc, char **argv) { - struct ntimedargs args = { - NULL, NULL, NULL, FALSE, FALSE, FALSE, FALSE - }; + int result = 0; + struct ntimedargs args = { NULL, NULL, NULL, FALSE, FALSE, FALSE, FALSE }; + + atexit(clean_exit); + if((result = amiga_open_libs()) != 0) { + exit(result); + } - started_from_wb = (argc == 0); - atexit(clean_exit); - - if(started_from_wb) { - args.servers = (char *[]) { - "0.pool.ntp.org", - "1.pool.ntp.org", - "2.pool.ntp.org", - "3.pool.ntp.org" - }; - args.synchronize = TRUE; - args.save = TRUE; - args.quiet = TRUE; - } else { - rdargs = ReadArgs(ARGS_FORMAT, (APTR)&args, NULL); - if (!rdargs) - { - PrintFault(IoErr(), (ARGPTR)argv[0]); - exit(5); - } + rdargs = ReadArgs((STRPTR)ARGSFORMAT, (APTR)&args, NULL); + if (!rdargs) + { + PrintFault(IoErr(), (STRPTR)argv[0]); + exit(5); } if (!args.quiet) { @@ -98,8 +84,6 @@ int main(int argc, char **argv) } } - amiga_open_libs(); - if (args.tracefile) { ArgTracefile(args.tracefile); } @@ -115,7 +99,7 @@ int main(int argc, char **argv) NTP_PeerSet_Poll(NULL, nps, usc, tdl); (void)TODO_Run(NULL, tdl); - return 0; + return result; } static void set_params(char *params) @@ -186,6 +170,8 @@ static void init_logic(struct ntimedargs *args) } else { Put(NULL, OCX_DEBUG, "Synchronizing ...\n"); } + + amiga_init_offset(); } static void clean_exit() diff --git a/main_amiga_poll.c b/main_amiga_poll.c index cd50826..311dc6c 100644 --- a/main_amiga_poll.c +++ b/main_amiga_poll.c @@ -31,13 +31,12 @@ #include "udp.h" #define ARGSFORMAT "D=DURATION/N,M=MONITOR/K,T=TRACEFILE/K,SERVERS/M/A,SHOW/S,QUIET/S" -const char *vers = "\0$VER: ntimed-poll 1.01 (18.04.2015)"; +const char *vers = "\0$VER: ntimed-poll" AMIGA_VERSION; -BOOL started_from_wb; -struct RDArgs *rdargs = NULL; -struct udp_socket *usc = NULL; -struct ntp_peerset *npl = NULL; -struct todolist *tdl = NULL; +struct RDArgs *rdargs = NULL; +struct udp_socket *usc = NULL; +struct ntp_peerset *npl = NULL; +struct todolist *tdl = NULL; struct ntimedargs { long *duration; @@ -53,16 +52,18 @@ static void clean_exit(); int main(int argc, char **argv) { + int result = 0; struct ntimedargs args = { NULL, NULL, NULL, NULL, FALSE, FALSE }; - started_from_wb = (BOOL)argc; - atexit(clean_exit); + if((result = amiga_open_libs()) != 0) { + exit(result); + } - rdargs = ReadArgs(ARGS_FORMAT, (APTR)&args, NULL); + rdargs = ReadArgs((STRPTR)ARGSFORMAT, (APTR)&args, NULL); if (!rdargs) { - PrintFault(IoErr(), (ARGPTR)argv[0]); + PrintFault(IoErr(), (STRPTR)argv[0]); exit(5); } @@ -74,8 +75,6 @@ int main(int argc, char **argv) } } - amiga_open_libs(); - if (args.tracefile) { ArgTracefile(args.tracefile); } @@ -85,7 +84,7 @@ int main(int argc, char **argv) NTP_PeerSet_Poll(NULL, npl, usc, tdl); (void)TODO_Run(NULL, tdl); - return 0; + return result; } static void @@ -191,6 +190,8 @@ static void init_logic(struct ntimedargs *args) if (mon != NULL) TODO_ScheduleRel(tdl, mps_mon, mon, 0, 32, "Monitor"); + + amiga_init_offset(); } static void clean_exit() diff --git a/main_amiga_sim.c b/main_amiga_sim.c index 55e5894..335ee88 100644 --- a/main_amiga_sim.c +++ b/main_amiga_sim.c @@ -31,7 +31,7 @@ #include "udp.h" #define ARGSFORMAT "P=PARAM/K,B=BUMP/K,T=TRACEFILE/K,SIMFILE/A,QUIET/S" -const char *vers = "\0$VER: ntimed-sim 1.01 (18.04.2015)"; +const char *vers = "\0$VER: ntimed-sim" AMIGA_VERSION; #define PARAM_CLIENT PARAM_INSTANCE #define PARAM_TABLE_NAME client_param_table @@ -64,9 +64,8 @@ SimFile_Open(struct ocx *ocx, const char *fn, struct todolist *tdl, /**********************************************************************/ -BOOL started_from_wb; -struct RDArgs *rdargs = NULL; -struct todolist *tdl = NULL; +struct RDArgs *rdargs = NULL; +struct todolist *tdl = NULL; struct ntimedargs { char *params; @@ -82,24 +81,25 @@ static void clean_exit(); int main(int argc, char **argv) { + int result = 0; struct ntimedargs args = { NULL, NULL, NULL, NULL, FALSE }; - started_from_wb = (BOOL)argc; atexit(clean_exit); + if((result = amiga_open_libs()) != 0) { + exit(result); + } - rdargs = ReadArgs(ARGS_FORMAT, (APTR)&args, NULL); + rdargs = ReadArgs((STRPTR)ARGSFORMAT, (APTR)&args, NULL); if (!rdargs) { - PrintFault(IoErr(), (ARGPTR)argv[0]); - exit(2); + PrintFault(IoErr(), (STRPTR)argv[0]); + exit(5); } if (!args.quiet) { EnableDebug(); } - amiga_close_libs(); - if (args.tracefile) { ArgTracefile(args.tracefile); } @@ -108,7 +108,7 @@ int main(int argc, char **argv) (void)TODO_Run(NULL, tdl); - return 0; + return result; } static void init_logic(struct ntimedargs *args) @@ -153,6 +153,8 @@ static void init_logic(struct ntimedargs *args) NF_New(np); np->combiner = CD_AddSource(cd, np->hostname, np->ip); } + + amiga_init_offset(); } /**********************************************************************/ diff --git a/main_amiga_test.c b/main_amiga_test.c index 959cd2b..9235fa0 100644 --- a/main_amiga_test.c +++ b/main_amiga_test.c @@ -29,8 +29,7 @@ #include "ntimed.h" #include "ntp.h" -const char *vers = "\0$VER: ntimed-test 1.01 (18.04.2015)"; -BOOL started_from_wb; +const char *vers = "\0$VER: ntimed-test" AMIGA_VERSION; static void clean_exit() { @@ -40,16 +39,17 @@ static void clean_exit() int main(int argc, char * const *argv) { - started_from_wb = (BOOL)argc; - - (void)argc; - (void)argv; + int result = 0; atexit(clean_exit); - amiga_open_libs(); + if((result = amiga_open_libs()) != 0) { + exit(result); + } + EnableDebug(); + amiga_init_offset(); Time_Amiga_Passive(); TS_RunTest(NULL); - return (0); + return result; } diff --git a/net_getaddrinfo.c b/net_getaddrinfo.c index 1f4847d..eb91d32 100644 --- a/net_getaddrinfo.c +++ b/net_getaddrinfo.c @@ -59,6 +59,7 @@ #include #include +#include "ntimed_platform.h" #include "ntimed.h" #include "net_getaddrinfo.h" @@ -504,7 +505,11 @@ int getnameinfo(const struct sockaddr *sa, socklen_t salen, char *node, socklen_ result = EAI_NONAME; goto end; } +#ifndef AOS3 ntoa_address = inet_ntoa(sa_in->sin_addr); +#else + ntoa_address = inet_ntoa((ULONG)&sa_in->sin_addr); +#endif if (nodelen <= strlen(ntoa_address)) { result = EAI_OVERFLOW; goto end; diff --git a/ntimed_platform.h b/ntimed_platform.h index 45eaf0c..7b3eb4c 100644 --- a/ntimed_platform.h +++ b/ntimed_platform.h @@ -24,86 +24,84 @@ * */ -#ifndef NTIMED_PLATFROM_H -#define NTIMED_PLATFROM_H - +#ifndef NTIMED_PLATFORM_H +#define NTIMED_PLATFORM_H +//--------------------------------------------------------------------------// #if defined(AROS) || defined(AOS3) +# define AMIGA_VERSION " 1.02 (10.07.2015)" # ifndef AMIGA # define AMIGA # endif #endif - +//--------------------------------------------------------------------------// +#ifdef HAVE_LIBTZ +# define _TIME_H_ +# define HAVE_TIME_T +# include +# include "tz.h" +#endif +#define HAVE_WAITSELECT +//--------------------------------------------------------------------------// #ifdef AMIGA +# include +# include +# include +# include # include # include # include # include # include #endif - -#ifdef AROS -# ifdef Debug -# undef Debug -# endif -# include -# include -# include -# include -# include -# include -# include -# include -# include -# include -# include -# include -# include -# include -# ifdef Debug -# undef Debug -# endif -#endif - +//--------------------------------------------------------------------------// +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include "mem.h" - +//--------------------------------------------------------------------------// +#define OPEN_ERROR "Cannot open %s.\n" +#define OPEN_VER_ERROR "Cannot open %s (%ld.0)\n" +#define DOSLIB_NAME "dos.library" +#define DOSLIB_REV 37L +#define UTILLIB_NAME "utility.library" +#define UTILLIB_REV 37L +#define LOCALELIB_NAME "locale.library" +#define LOCALELIB_REV 37L +#define BSDLIB_NAME "bsdsocket.library" +#define BSDLIB_REV 03L +#define TIMER_NAME TIMERNAME +#define BATTCLOCK_NAME BATTCLOCKNAME +#ifdef TZVARIABLE +# define TZVARIABLE_NAME TZVARIABLE +#endif +//--------------------------------------------------------------------------// #ifdef AOS3 -# define ARGPTR STRPTR -# define ARGS_FORMAT ARGSFORMAT -# define BSDLIB_NAME "bsdsocket.library" -# define BSDLIB_REV 04L -# define UTILLIB_NAME "utility.library" -# define UTILLIB_REV 33L -# define LOCALELIB_NAME "locale.library" -# define LOCALELIB_REV 33L -# define DOSLIB_NAME "dos.library" -# define DOSLIB_REV 36L -# define TIMER_NAME TIMERNAME -# define BATTCLOCK_NAME BATTCLOCKNAME +# define REQ_ERROR "Requires Kickstart 2.04 (37.175) or later.\n" +# include "socket_amitcp.h" +# include #endif - #ifdef AROS -# define ARGPTR CONST_STRPTR -# define ARGS_FORMAT (CONST_STRPTR)ARGSFORMAT -# define BSDLIB_NAME (CONST_STRPTR)"bsdsocket.library" -# define BSDLIB_REV 04L -# define UTILLIB_NAME (CONST_STRPTR)"utility.library" -# define UTILLIB_REV 33L -# define LOCALELIB_NAME (CONST_STRPTR)"locale.library" -# define LOCALELIB_REV 33L -# define DOSLIB_NAME (CONST_STRPTR)"dos.library" -# define DOSLIB_REV 36L -# define TIMER_NAME (CONST_STRPTR)TIMERNAME -# define BATTCLOCK_NAME (CONST_STRPTR)BATTCLOCKNAME -# define APRT IPRT +# define REQ_ERROR "Requires a newer version of AROS.\n" +# include +# include +# define APRT IPRT #endif - +//--------------------------------------------------------------------------// #ifndef AMIGA struct timeval { ULONG tv_secs; ULONG tv_micro; }; #endif - +//--------------------------------------------------------------------------// #ifndef HAVE_POLL #define POLLIN 0x0001 struct pollfd { @@ -114,32 +112,46 @@ struct pollfd { typedef unsigned int nfds_t; int poll(struct pollfd *, nfds_t, int); #endif - -#ifdef AMIGA -void amiga_open_libs(); -void amiga_close_libs(); -void amiga_save_time(void); -void amiga_sync_time(int seconds); -void EnableDebug(); -void EnableTraceDebug(); -#endif - +//--------------------------------------------------------------------------// #ifdef AROS # define settimeofday ntimed_settimeofday # define gettimeofday ntimed_gettimeofday int gettimeofday(struct timeval *tv, struct timezone *tz); int settimeofday(const struct timeval *tv, const struct timezone *tz); #endif - +//--------------------------------------------------------------------------// #ifdef AMIGA # define Time_Amiga Time_Unix # define Time_Amiga_Passive Time_Unix_Passive # define Time_Amiga_Save amiga_save_time # define SetSyncTime amiga_sync_time #endif - -#ifdef Debug -# undef Debug +//--------------------------------------------------------------------------// +#ifndef _ALIGNBYTES +# define _ALIGNBYTES (sizeof(register_t) - 1) #endif - +#ifndef ALIGN +# define ALIGN(p) (((uintptr_t)(p) + _ALIGNBYTES) & ~_ALIGNBYTES) +#endif +#ifndef SO_TIMESTAMPING +# define SO_TIMESTAMPING 37 +#endif +#ifndef SO_TIMESTAMPNS +# define SO_TIMESTAMPNS 35 +#endif +//--------------------------------------------------------------------------// +int amiga_open_libs(); +void amiga_close_libs(); +void amiga_init_offset(); +void amiga_save_time(); +void amiga_sync_time(int seconds); +void EnableDebug(); +void EnableTraceDebug(); +//--------------------------------------------------------------------------// +extern struct Library *BattClockBase; +extern struct Library *DOSBase; +extern struct Library *UtilityBase; +extern struct Library *LocaleBase; +extern struct Library *SocketBase; +//--------------------------------------------------------------------------// #endif diff --git a/ocx_stdio.c b/ocx_stdio.c index 63eea9e..838610d 100644 --- a/ocx_stdio.c +++ b/ocx_stdio.c @@ -68,7 +68,6 @@ #include "ntimed_platform.h" #include "ntimed.h" -extern BOOL started_from_wb; int repeat_trace = 0; static FILE *debugfile = NULL; @@ -134,16 +133,15 @@ Put(struct ocx *ocx, enum ocx_chan chan, const char *fmt, ...) va_start(ap, fmt); dst = getdst(chan); - if (dst != NULL && !(started_from_wb && dst == stdout)) { + if (dst != NULL && dst == stdout) { (void)vfprintf(dst, fmt, ap); fflush(dst); } dst = getdst(OCX_DEBUG); if ( - dst != NULL && - !(started_from_wb && dst == stdout) && - (repeat_trace && chan == OCX_TRACE)) { + dst != NULL && dst == stdout && + repeat_trace && chan == OCX_TRACE) { (void)vfprintf(dst, fmt, ap); fflush(dst); } diff --git a/time_amiga.c b/time_amiga.c index 49ea106..d800d05 100644 --- a/time_amiga.c +++ b/time_amiga.c @@ -26,7 +26,6 @@ #include "ntimed_platform.h" #include "ntimed.h" -#include "lib/tz.h" #ifdef Debug #undef Debug @@ -46,13 +45,11 @@ #include #include -#ifdef Debug -#undef Debug -#endif - // 2922 is the number of days between 1.1.1970 and 1.1.1978 (2 leap years and 6 normal) #define AMIGAOFFSET 2922 * 24 * 60 * 60 +#define ENVSIZE 256 + int create_timer(); int delete_timer(); void adjust_timeval(struct timeval *tv, double offset); @@ -70,61 +67,70 @@ int validtime = 0; int limited_sync = 0; long offset = 0; -void amiga_open_libs() +#ifdef AOS3 +int errno; +int h_errno; +#endif + +void amiga_open_error(char *name) { - if(!(DOSBase = OpenLibrary(DOSLIB_NAME, DOSLIB_REV))) { - Put(NULL, OCX_DIAG, "Cannot open dos library.\n"); - exit(10); + Put(NULL, OCX_DIAG, OPEN_ERROR, "Locale"); + FPrintf(Output(), (STRPTR)OPEN_ERROR, name); +} + +void amiga_open_lib_error(char *name, int version) +{ + Put(NULL, OCX_DIAG, OPEN_VER_ERROR, name, version); + Put(NULL, OCX_DIAG, REQ_ERROR); + + FPrintf(Output(), (STRPTR)OPEN_VER_ERROR, name, version); + FPrintf(Output(), (STRPTR)REQ_ERROR, NULL); +} + +int amiga_open_libs() +{ + if(!(DOSBase = OpenLibrary((STRPTR)DOSLIB_NAME, DOSLIB_REV))) { + amiga_open_lib_error(DOSLIB_NAME, DOSLIB_REV); + return 5; } - if(!(LocaleBase = OpenLibrary(LOCALELIB_NAME, LOCALELIB_REV))) { - Put(NULL, OCX_DIAG, "Cannot open locale library.\n"); - exit(10); + if(!(LocaleBase = OpenLibrary((STRPTR)LOCALELIB_NAME, LOCALELIB_REV))) { + amiga_open_lib_error(LOCALELIB_NAME, LOCALELIB_REV); + return 5; } if(!(locale = OpenLocale(NULL))) { - Put(NULL, OCX_DIAG, "Cannot open current locale.\n"); - exit(10); + amiga_open_error("Locale"); + return 10; } - if(!(UtilityBase = OpenLibrary(UTILLIB_NAME, UTILLIB_REV))) { - Put(NULL, OCX_DIAG, "Cannot open utility library.\n"); - exit(10); + if(!(UtilityBase = OpenLibrary((STRPTR)UTILLIB_NAME, UTILLIB_REV))) { + amiga_open_lib_error(UTILLIB_NAME, UTILLIB_REV); + return 5; } - BattClockBase = OpenResource(BATTCLOCK_NAME); - -#ifdef AROS - if(!(SocketBase = OpenLibrary(BSDLIB_NAME, BSDLIB_REV))) { - Put(NULL, OCX_DIAG, "No TCP/IP Stack running.\n"); - exit(10); + if(!(BattClockBase = OpenResource((STRPTR)BATTCLOCK_NAME))) { + amiga_open_error(BATTCLOCK_NAME); + return 10; } - if(SocketBaseTags(SBTM_SETVAL(SBTC_ERRNOPTR(sizeof(errno))), (IPTR)&errno, - SBTM_SETVAL(SBTC_HERRNOLONGPTR), (IPTR)&h_errno, TAG_DONE)) { - Put(NULL, OCX_DIAG, "Error initializing bsdsocket.\n"); - exit(10); + if(!(SocketBase = OpenLibrary((STRPTR)BSDLIB_NAME, BSDLIB_REV))) { + amiga_open_lib_error(BSDLIB_NAME, BSDLIB_REV); + return 5; + } + + if(SocketBaseTags(SBTM_SETVAL(SBTC_ERRNOPTR(sizeof(errno))), (int)&errno, + SBTM_SETVAL(SBTC_HERRNOLONGPTR), (int)&h_errno, TAG_DONE)) { + amiga_open_error(BSDLIB_NAME); + return 10; } -#endif if (create_timer() != 0) { - Put(NULL, OCX_DIAG, "Cannot open timer device.\n"); - exit(10); + amiga_open_error(TIMER_NAME); + return 10; } -#ifdef USETZDATABASE - if (getenv("TZ")) { - tz_time_t rawtime; - time(&rawtime); - struct tz_tm *localtm = tz_localtime(&rawtime); - offset = -localtm->tm_gmtoff + AMIGAOFFSET; - Put(NULL, OCX_DEBUG, "Using TZ GMT offset %i seconds\n", localtm->tm_gmtoff); - } else -#endif - { - offset = -locale->loc_GMTOffset * 60 + AMIGAOFFSET; - Put(NULL, OCX_DEBUG, "Using locale GMT offset %i minutes\n", locale->loc_GMTOffset ); - } + return 0; } void amiga_close_libs() @@ -153,16 +159,69 @@ void amiga_close_libs() DOSBase = NULL; } -#ifdef AROS if (SocketBase != NULL) { CloseLibrary(SocketBase); SocketBase = NULL; } -#endif } /**********************************************************************/ +#ifdef HAVE_LIBTZ +int amiga_get_gmtoffset_attime(time_t locale_time) +{ + struct tm tm; + timezone_t tz; + char *tzvar; + int gmtoffset = 0; + tzvar = AllocVec(ENVSIZE, MEMF_ANY | MEMF_CLEAR); + + GetVar( + (STRPTR)TZVARIABLE_NAME, + (STRPTR)tzvar, + ENVSIZE - 1, + GVF_GLOBAL_ONLY + ); + + tz = tzalloc(tzvar); + + if (tz) { + localtime_rz(tz, &locale_time, &tm); + tzfree(tz); + gmtoffset = tm.tm_gmtoff; + } else { + gmtoffset = locale->loc_GMTOffset * 60; + } + + Put(NULL, OCX_DEBUG, + "Current time zone offset: UTC/GMT %.1f hour\n", + (float)gmtoffset / 60.0 / 60.0); + + FreeVec(tzvar); + return gmtoffset; +} + +int amiga_get_gmtoffset() +{ + time_t now = time(NULL); + return amiga_get_gmtoffset_attime(now); +} +#endif +/**********************************************************************/ +void amiga_init_offset() +{ + int gmt_offset; + +#ifdef HAVE_LIBTZ + gmt_offset = amiga_get_gmtoffset(); +#else + gmt_offset = locale->loc_GMTOffset * 60 * 60; + +#endif + + offset = -gmt_offset + AMIGAOFFSET; +} +/**********************************************************************/ int create_timer() { LONG error; @@ -177,7 +236,11 @@ int create_timer() return 1; } - error = OpenDevice(TIMER_NAME, UNIT_MICROHZ, (struct IORequest*)request, 0L); + error = OpenDevice( + (STRPTR)TIMER_NAME, UNIT_MICROHZ, + (struct IORequest*)request, 0L + ); + if (error != 0) { delete_timer(request); @@ -205,25 +268,7 @@ int delete_timer() return 0; } - /**********************************************************************/ - -#ifdef USETZDATABASE -tz_time_t time(tz_time_t *x) -{ - struct timeval tv; - GetSysTime(&tv); - - if (x) { - *x = (time_t)tv.tv_secs + AMIGAOFFSET; - } - - return (time_t)tv.tv_secs + AMIGAOFFSET; -} -#endif - -/**********************************************************************/ - int gettimeofday(struct timeval *tv, struct timezone *tz) { #ifdef USESYSTIME @@ -247,18 +292,19 @@ int settimeofday(const struct timeval *tv, const struct timezone *tz) validtime = 1; return 0; } - /**********************************************************************/ - void amiga_save_time(void) { struct timeval tv; - ResetBattClock(); - gettimeofday(&tv, NULL); - WriteBattClock((long)tv.tv_secs - offset); -} + int gmt_offset = 0; -/**********************************************************************/ +#ifdef HAVE_LIBTZ + gmt_offset = amiga_get_gmtoffset(); +#endif + + gettimeofday(&tv, NULL); + WriteBattClock((long)tv.tv_secs - offset - gmt_offset); +} void amiga_sync_time(int seconds) { @@ -267,8 +313,6 @@ void amiga_sync_time(int seconds) sync_time.tv_micro = 0; } -/**********************************************************************/ - int amiga_sleep_time(double dur) { ULONG sigs, timersig; @@ -300,9 +344,7 @@ int amiga_sleep_time(double dur) return 0; } - /**********************************************************************/ - void adjust_timeval(struct timeval *tv, double offset) { double d1, d2; @@ -325,7 +367,6 @@ void adjust_timeval(struct timeval *tv, double offset) tv->tv_secs = secs; tv->tv_micro = micro; } - /**********************************************************************/ #ifndef HAVE_POLL int poll(struct pollfd *pfds, nfds_t nfds, int timeout) @@ -387,3 +428,4 @@ int poll(struct pollfd *pfds, nfds_t nfds, int timeout) return ret; } #endif +/**********************************************************************/ diff --git a/time_stuff.c b/time_stuff.c index 6ee1f6e..0a37c46 100644 --- a/time_stuff.c +++ b/time_stuff.c @@ -155,7 +155,8 @@ TS_Format(char *buf, size_t len, const struct timestamp *ts) x += 1; } // i = snprintf(buf, len, "%jd.%09jd", (intmax_t)x, (intmax_t)y); - i = snprintf(buf, len, "%lld.%09lld", x, y); +// i = snprintf(buf, len, "%lld.%09lld", x, y); + i = snprintf(buf, len, "%d.%d", (int32_t)x, (int32_t)y); assert(i < (int)len); } diff --git a/time_unix.c b/time_unix.c index 6240c04..7547a09 100644 --- a/time_unix.c +++ b/time_unix.c @@ -32,13 +32,8 @@ * */ -#include -#include -#include -#include - -#include "ntimed.h" #include "ntimed_platform.h" +#include "ntimed.h" static double adj_offset = 0; static double adj_duration = 0; diff --git a/udp.c b/udp.c index 908148f..67addfe 100644 --- a/udp.c +++ b/udp.c @@ -53,7 +53,19 @@ static int udp_sock(int fam) { int fd; + int i; + fd = socket(fam, SOCK_DGRAM, 0); + if (fd < 0) + return (fd); + +#ifdef SO_TIMESTAMPNS + i = 1; + (void)setsockopt(fd, SOL_SOCKET, SO_TIMESTAMPNS, &i, sizeof i); +#elif defined(SO_TIMESTAMP) + i = 1; + (void)setsockopt(fd, SOL_SOCKET, SO_TIMESTAMP, &i, sizeof i); +#endif return (fd); }