added fallback code for math::round()
This commit is contained in:
parent
2e6765e4ba
commit
b54964ac85
@ -183,7 +183,12 @@ static qse_sck_hnd_t open_server_socket (int proto, const qse_nwad_t* bindnwad)
|
|||||||
|
|
||||||
skad_len = qse_nwadtoskad (bindnwad, &skad);
|
skad_len = qse_nwadtoskad (bindnwad, &skad);
|
||||||
family = qse_skadfamily(&skad);
|
family = qse_skadfamily(&skad);
|
||||||
|
|
||||||
|
#if defined(IPPROTO_SCTP)
|
||||||
type = (proto == IPPROTO_SCTP)? SOCK_SEQPACKET: SOCK_DGRAM;
|
type = (proto == IPPROTO_SCTP)? SOCK_SEQPACKET: SOCK_DGRAM;
|
||||||
|
#else
|
||||||
|
type = SOCK_DGRAM;
|
||||||
|
#endif
|
||||||
|
|
||||||
s = socket (family, type, proto);
|
s = socket (family, type, proto);
|
||||||
if (!qse_isvalidsckhnd(s))
|
if (!qse_isvalidsckhnd(s))
|
||||||
@ -221,9 +226,10 @@ static qse_sck_hnd_t open_server_socket (int proto, const qse_nwad_t* bindnwad)
|
|||||||
}
|
}
|
||||||
|
|
||||||
bind_ok:
|
bind_ok:
|
||||||
|
#if defined(IPPROTO_SCTP)
|
||||||
if (proto == IPPROTO_SCTP)
|
if (proto == IPPROTO_SCTP)
|
||||||
{
|
{
|
||||||
#if defined(SOL_SCTP)
|
#if defined(SOL_SCTP)
|
||||||
struct sctp_initmsg im;
|
struct sctp_initmsg im;
|
||||||
struct sctp_paddrparams hb;
|
struct sctp_paddrparams hb;
|
||||||
|
|
||||||
@ -244,7 +250,7 @@ bind_ok:
|
|||||||
hb.spp_pathmaxrxt = 1;
|
hb.spp_pathmaxrxt = 1;
|
||||||
|
|
||||||
if (setsockopt (s, SOL_SCTP, SCTP_PEER_ADDR_PARAMS, &hb, QSE_SIZEOF(hb)) <= -1) goto oops;
|
if (setsockopt (s, SOL_SCTP, SCTP_PEER_ADDR_PARAMS, &hb, QSE_SIZEOF(hb)) <= -1) goto oops;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (listen (s, 99) <= -1)
|
if (listen (s, 99) <= -1)
|
||||||
{
|
{
|
||||||
@ -252,6 +258,7 @@ bind_ok:
|
|||||||
goto oops;
|
goto oops;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
return s;
|
return s;
|
||||||
|
|
||||||
|
@ -155,7 +155,45 @@ static qse_awk_flt_t math_round (qse_awk_t* awk, qse_awk_flt_t x)
|
|||||||
#elif defined(HAVE_ROUNDF)
|
#elif defined(HAVE_ROUNDF)
|
||||||
return roundf (x);
|
return roundf (x);
|
||||||
#else
|
#else
|
||||||
#error ### no round function available ###
|
|
||||||
|
qse_flt_t f, d;
|
||||||
|
|
||||||
|
f = math_floor (awk, x);
|
||||||
|
d = x - f; /* get fraction */
|
||||||
|
|
||||||
|
if (d > (qse_awk_flt_t)0.5)
|
||||||
|
{
|
||||||
|
/* round up to the nearest */
|
||||||
|
f = f + (qse_awk_flt_t)1.0;
|
||||||
|
}
|
||||||
|
else if (d == (qse_awk_flt_t)0.5)
|
||||||
|
{
|
||||||
|
#if 1
|
||||||
|
/* round half away from zero */
|
||||||
|
if (x >= 0)
|
||||||
|
{
|
||||||
|
f = x + (qse_awk_flt_t)0.5;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
f = x - (qse_awk_flt_t)0.5;
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
/* round half to even - C99's rint() does this, i guess. */
|
||||||
|
d = f - (qse_awk_flt_t)2.0 * math_floor(awk, f * (qse_awk_flt_t)0.5);
|
||||||
|
if (d == (qse_awk_flt_t)1.0) f = f + (qse_awk_flt_t)1.0;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
/* this implementation doesn't keep the signbit for -0.0.
|
||||||
|
* The signbit() function defined in C99 may get used to
|
||||||
|
* preserve the sign bit. but this is a fall-back rountine
|
||||||
|
* for a system without round also defined in C99.
|
||||||
|
* don't get annoyed by the lost sign bit for the value of 0.0.
|
||||||
|
*/
|
||||||
|
|
||||||
|
return f;
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -119,7 +119,11 @@ static int urs_open (qse_httpd_t* httpd, qse_httpd_urs_t* urs)
|
|||||||
httpd->opt.rcb.logact (httpd, &msg);
|
httpd->opt.rcb.logact (httpd, &msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined(IPPROTO_SCTP)
|
||||||
type = (proto == IPPROTO_SCTP)? SOCK_SEQPACKET: SOCK_DGRAM;
|
type = (proto == IPPROTO_SCTP)? SOCK_SEQPACKET: SOCK_DGRAM;
|
||||||
|
#else
|
||||||
|
type = SOCK_DGRAM;
|
||||||
|
#endif
|
||||||
|
|
||||||
urs->handle[0].i = open_udp_socket (httpd, AF_INET, type, proto);
|
urs->handle[0].i = open_udp_socket (httpd, AF_INET, type, proto);
|
||||||
#if defined(AF_INET6)
|
#if defined(AF_INET6)
|
||||||
|
@ -430,8 +430,11 @@ static QSE_INLINE qse_ssize_t __send_file (
|
|||||||
#endif
|
#endif
|
||||||
size_t xfer;
|
size_t xfer;
|
||||||
ssize_t ret;
|
ssize_t ret;
|
||||||
|
qse_fio_hnd_t fh;
|
||||||
|
|
||||||
vec.sfv_fd = in_fd.i;
|
fh = qse_fio_gethandle(in_fd.ptr);
|
||||||
|
|
||||||
|
vec.sfv_fd = fh;
|
||||||
vec.sfv_flag = 0;
|
vec.sfv_flag = 0;
|
||||||
if (offset)
|
if (offset)
|
||||||
{
|
{
|
||||||
@ -439,7 +442,7 @@ static QSE_INLINE qse_ssize_t __send_file (
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
vec.sfv_off = QSE_LSEEK (in_fd.i, 0, SEEK_CUR);
|
vec.sfv_off = QSE_LSEEK (fh, 0, SEEK_CUR);
|
||||||
if (vec.sfv_off == (off_t)-1) return (qse_ssize_t)-1;
|
if (vec.sfv_off == (off_t)-1) return (qse_ssize_t)-1;
|
||||||
}
|
}
|
||||||
vec.sfv_len = count;
|
vec.sfv_len = count;
|
||||||
@ -739,9 +742,10 @@ static qse_sck_hnd_t open_udp_socket (qse_httpd_t* httpd, int domain, int type,
|
|||||||
|
|
||||||
if (set_socket_nonblock (httpd, fd, 1) <= -1) goto oops;
|
if (set_socket_nonblock (httpd, fd, 1) <= -1) goto oops;
|
||||||
|
|
||||||
|
#if defined(IPPROTO_SCTP)
|
||||||
if (proto == IPPROTO_SCTP)
|
if (proto == IPPROTO_SCTP)
|
||||||
{
|
{
|
||||||
#if defined(SOL_SCTP)
|
#if defined(SOL_SCTP)
|
||||||
struct sctp_initmsg im;
|
struct sctp_initmsg im;
|
||||||
struct sctp_paddrparams hb;
|
struct sctp_paddrparams hb;
|
||||||
|
|
||||||
@ -758,8 +762,9 @@ static qse_sck_hnd_t open_udp_socket (qse_httpd_t* httpd, int domain, int type,
|
|||||||
hb.spp_pathmaxrxt = 1;
|
hb.spp_pathmaxrxt = 1;
|
||||||
|
|
||||||
if (setsockopt (fd, SOL_SCTP, SCTP_PEER_ADDR_PARAMS, &hb, QSE_SIZEOF(hb)) <= -1) goto oops;
|
if (setsockopt (fd, SOL_SCTP, SCTP_PEER_ADDR_PARAMS, &hb, QSE_SIZEOF(hb)) <= -1) goto oops;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
return fd;
|
return fd;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user