X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fext-http;a=blobdiff_plain;f=http_send_api.c;h=b89102d473be15fe5ecf0aff69f83e6395d7c765;hp=4caf6eec838696bfbd046116016f3bad58048c1b;hb=3e696a1c24d6ffc382567876eafa2a5bd9b8afa7;hpb=781c90c0447166dd52ef881ae15751fa466c32fb diff --git a/http_send_api.c b/http_send_api.c index 4caf6ee..b89102d 100644 --- a/http_send_api.c +++ b/http_send_api.c @@ -18,11 +18,11 @@ #ifdef HAVE_CONFIG_H # include "config.h" #endif - #include "php.h" + +#include "SAPI.h" #include "php_streams.h" #include "ext/standard/php_lcg.h" -#include "SAPI.h" #include "php_http.h" #include "php_http_std_defs.h" @@ -48,18 +48,24 @@ static inline void _http_flush(TSRMLS_D) /* {{{ static inline void http_sleep() */ static inline void _http_sleep(TSRMLS_D) { - if (HTTP_G(send).throttle_delay >= 0.001) { +#define HTTP_MSEC(s) (s * 1000) +#define HTTP_USEC(s) (HTTP_MSEC(s) * 1000) +#define HTTP_NSEC(s) (HTTP_USEC(s) * 1000) +#define HTTP_NANOSEC (1000 * 1000 * 1000) +#define HTTP_DIFFSEC (0.001) + + if (HTTP_G(send).throttle_delay >= HTTP_DIFFSEC) { #if defined(PHP_WIN32) - Sleep((DWORD) (HTTP_G(send).throttle_delay * 1000)); + Sleep((DWORD) HTTP_MSEC(HTTP_G(send).throttle_delay)); #elif defined(HAVE_USLEEP) - usleep(HTTP_G(send).throttle_delay * 1000000); + usleep(HTTP_USEC(HTTP_G(send).throttle_delay)); #elif defined(HAVE_NANOSLEEP) struct timespec req, rem; req.tv_sec = (time_t) HTTP_G(send).throttle_delay; - req.tv_nsec = (HTTP_G(send).throttle_delay * 1000000000) % 1000000000; + req.tv_nsec = HTTP_NSEC(HTTP_G(send).throttle_delay) % HTTP_NANOSEC; - while (nanosleep(&req, &rem) && (errno == EINTR) && (rem.tv_nsec > 1000000)) { + while (nanosleep(&req, &rem) && (errno == EINTR) && (HTTP_NSEC(rem.tv_sec) + rem.tv_nsec) > HTTP_NSEC(HTTP_DIFFSEC))) { req.tv_sec = rem.tv_sec; req.tv_nsec = rem.tv_nsec; } @@ -273,7 +279,7 @@ PHP_HTTP_API STATUS _http_send_ranges(HashTable *ranges, const void *data, size_ http_send_status(206); /* send content range header */ - snprintf(range_header, 255, "Content-Range: bytes %d-%d/%d", **begin, **end, size); + snprintf(range_header, 255, "Content-Range: bytes %ld-%ld/%lu", **begin, **end, (ulong) size); http_send_header(range_header); /* send requested chunk */ @@ -289,7 +295,7 @@ PHP_HTTP_API STATUS _http_send_ranges(HashTable *ranges, const void *data, size_ http_send_status(206); /* send multipart/byteranges header */ - snprintf(bound, 22, "--%d%0.9f", time(NULL), php_combined_lcg(TSRMLS_C)); + snprintf(bound, 22, "--%lu%0.9f", (ulong) time(NULL), php_combined_lcg(TSRMLS_C)); strncat(multi_header, bound + 2, 21); http_send_header(multi_header); @@ -303,7 +309,7 @@ PHP_HTTP_API STATUS _http_send_ranges(HashTable *ranges, const void *data, size_ snprintf(preface, 1023, HTTP_CRLF "%s" HTTP_CRLF "Content-Type: %s" - HTTP_CRLF "Content-Range: bytes %ld-%ld/%ld" + HTTP_CRLF "Content-Range: bytes %ld-%ld/%lu" HTTP_CRLF HTTP_CRLF, @@ -311,7 +317,7 @@ PHP_HTTP_API STATUS _http_send_ranges(HashTable *ranges, const void *data, size_ HTTP_G(send).content_type ? HTTP_G(send).content_type : "application/x-octetstream", **begin, **end, - size + (ulong) size ); PHPWRITE(preface, strlen(preface));