mirror of
https://github.com/lxsang/ant-http
synced 2024-11-16 00:28:21 +01:00
use open instead of fopen for fire readwarite
This commit is contained in:
parent
923c6b2625
commit
088baa1ef5
@ -9,6 +9,7 @@
|
||||
#include <unistd.h>
|
||||
#include <string.h>
|
||||
#include <errno.h>
|
||||
#include <fcntl.h>
|
||||
|
||||
#ifdef USE_OPENSSL
|
||||
#include <openssl/ssl.h>
|
||||
@ -1355,7 +1356,7 @@ void *decode_multi_part_request_data(void *data)
|
||||
char *field;
|
||||
int len;
|
||||
//dictionary dic = NULL;
|
||||
FILE *fp = NULL;
|
||||
int fd = -1;
|
||||
char *token, *keytoken, *valtoken;
|
||||
antd_request_t *rq = (antd_request_t *)data;
|
||||
antd_task_t *task = antd_create_task(NULL, (void *)rq, NULL, rq->client->last_io);
|
||||
@ -1399,10 +1400,11 @@ void *decode_multi_part_request_data(void *data)
|
||||
}
|
||||
line = NULL;
|
||||
// get the binary data
|
||||
LOG("Part file: %s part name: %s", part_file, part_name);
|
||||
if (part_name != NULL)
|
||||
{
|
||||
// go to the beginning of data bock
|
||||
while ((len = read_buf(rq->client, buf, sizeof(buf))) > 0 && strcmp(buf, "\r\n") != 0)
|
||||
while ((len = read_buf(rq->client, buf, sizeof(buf))) > 0 && strncmp(buf, "\r\n",2) != 0)
|
||||
;
|
||||
;
|
||||
|
||||
@ -1432,8 +1434,8 @@ void *decode_multi_part_request_data(void *data)
|
||||
else
|
||||
{
|
||||
file_path = __s("%s%s.%u", server_config.tmpdir, part_file, (unsigned)time(NULL));
|
||||
fp = fopen(file_path, "wb");
|
||||
if (fp)
|
||||
fd = open(file_path, O_WRONLY | O_CREAT, 0600);
|
||||
if (fd > 0)
|
||||
{
|
||||
int totalsize = 0, len = 0;
|
||||
//read until the next boundary
|
||||
@ -1441,16 +1443,18 @@ void *decode_multi_part_request_data(void *data)
|
||||
// need a solution
|
||||
while ((len = read_buf(rq->client, buf, sizeof(buf))) > 0 && !strstr(buf, boundary))
|
||||
{
|
||||
fwrite(buf, len, 1, fp);
|
||||
len = guard_write(fd, buf, len);
|
||||
totalsize += len;
|
||||
}
|
||||
|
||||
//remove \r\n at the end
|
||||
fseek(fp, 0, SEEK_SET);
|
||||
lseek(fd, 0, SEEK_SET);
|
||||
//fseek(fp,-2, SEEK_CUR);
|
||||
totalsize -= 2;
|
||||
int stat = ftruncate(fileno(fp), totalsize);
|
||||
int stat = ftruncate(fd, totalsize);
|
||||
LOG("Write %d bytes to %s", totalsize, file_path);
|
||||
UNUSED(stat);
|
||||
fclose(fp);
|
||||
close(fd);
|
||||
line = buf;
|
||||
|
||||
field = __s("%s.file", part_name);
|
||||
|
15
lib/handle.c
15
lib/handle.c
@ -611,7 +611,7 @@ int antd_recv_upto(void *src, void *data, int len)
|
||||
{
|
||||
return -1;
|
||||
}*/
|
||||
if (received <= 0 && (errno == EAGAIN || errno == EWOULDBLOCK))
|
||||
if (received < 0 && (errno == EAGAIN || errno == EWOULDBLOCK))
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
@ -900,21 +900,20 @@ int __b(void *client, const unsigned char *data, int size)
|
||||
int __f(void *client, const char *file)
|
||||
{
|
||||
unsigned char buffer[BUFFLEN];
|
||||
FILE *ptr;
|
||||
ptr = fopen(file, "rb");
|
||||
if (!ptr)
|
||||
int fd;
|
||||
fd = open(file, O_RDONLY);
|
||||
if (fd < 0)
|
||||
{
|
||||
LOG("Cannot read : %s", file);
|
||||
return 0;
|
||||
}
|
||||
size_t size;
|
||||
while (!feof(ptr))
|
||||
int size;
|
||||
while ((size = read(fd, buffer, BUFFLEN)) > 0)
|
||||
{
|
||||
size = fread(buffer, 1, BUFFLEN, ptr);
|
||||
if (antd_send(client, buffer, size) == -1)
|
||||
return 0;
|
||||
}
|
||||
fclose(ptr);
|
||||
close(fd);
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user