Index: ossp-pkg/sa/TODO RCS File: /v/ossp/cvs/ossp-pkg/sa/TODO,v rcsdiff -q -kk '-r1.18' '-r1.19' -u '/v/ossp/cvs/ossp-pkg/sa/TODO,v' 2>/dev/null --- TODO 2001/10/09 18:55:47 1.18 +++ TODO 2001/10/10 07:42:26 1.19 @@ -1,12 +1,8 @@ - support for writev(2) - perhaps move 1024-buffer of writef into sa_t and make adjustable -- sa_buffer(sa, , size) - SA_BUFFER_UREAD - SA_BUFFER_UWRITE - SA_BUFFER_KREAD +- SA_BUFFER_KREAD SA_BUFFER_KWRITE - SA_BUFFER_WRITEF - full test suite for whole API - inet://0.0.0.0:0 -> inet://0.0.0.0:514 - inet://127.0.0.1:514 -> inet://127.0.0.1:514 Index: ossp-pkg/sa/sa.c RCS File: /v/ossp/cvs/ossp-pkg/sa/sa.c,v rcsdiff -q -kk '-r1.25' '-r1.26' -u '/v/ossp/cvs/ossp-pkg/sa/sa.c,v' 2>/dev/null --- sa.c 2001/10/09 20:19:58 1.25 +++ sa.c 2001/10/10 07:42:26 1.26 @@ -1005,7 +1005,7 @@ } /* configure I/O buffers */ -sa_rc_t sa_buffers(sa_t *sa, size_t rsize, size_t wsize) +sa_rc_t sa_buffer(sa_t *sa, sa_buffer_t id, size_t size) { char *cp; @@ -1013,45 +1013,49 @@ if (sa == NULL) return SA_ERR_ARG; - /* make sure buffered were already flushed sufficiently */ - if (sa->nReadLen > rsize || sa->nWriteLen > wsize) - return SA_ERR_USE; - - /* configure read/incoming buffer */ - if (rsize > 0) { - if (sa->cpReadBuf == NULL) - cp = (char *)malloc(rsize); - else - cp = (char *)realloc(sa->cpReadBuf, rsize); - if (cp == NULL) - return SA_ERR_SYS; - sa->cpReadBuf = cp; - sa->nReadSize = rsize; - } - else { - if (sa->cpReadBuf != NULL) - free(sa->cpReadBuf); - sa->cpReadBuf = NULL; - sa->nReadSize = 0; + if (id == SA_BUFFER_READ) { + /* configure read/incoming buffer */ + if (sa->nReadLen > size) + return SA_ERR_USE; + if (size > 0) { + if (sa->cpReadBuf == NULL) + cp = (char *)malloc(size); + else + cp = (char *)realloc(sa->cpReadBuf, size); + if (cp == NULL) + return SA_ERR_SYS; + sa->cpReadBuf = cp; + sa->nReadSize = size; + } + else { + if (sa->cpReadBuf != NULL) + free(sa->cpReadBuf); + sa->cpReadBuf = NULL; + sa->nReadSize = 0; + } } - - /* configure write/outgoing buffer */ - if (wsize > 0) { - if (sa->cpWriteBuf == NULL) - cp = (char *)malloc(wsize); - else - cp = (char *)realloc(sa->cpWriteBuf, wsize); - if (cp == NULL) - return SA_ERR_SYS; - sa->cpWriteBuf = cp; - sa->nWriteSize = wsize; - } - else { - if (sa->cpWriteBuf != NULL) - free(sa->cpWriteBuf); - sa->cpWriteBuf = NULL; - sa->nWriteSize = 0; + else if (id == SA_BUFFER_WRITE) { + /* configure write/outgoing buffer */ + if (sa->nWriteLen > size) + return SA_ERR_USE; + if (size > 0) { + if (sa->cpWriteBuf == NULL) + cp = (char *)malloc(size); + else + cp = (char *)realloc(sa->cpWriteBuf, size); + if (cp == NULL) + return SA_ERR_SYS; + sa->cpWriteBuf = cp; + sa->nWriteSize = size; + } + else { + if (sa->cpWriteBuf != NULL) + free(sa->cpWriteBuf); + sa->cpWriteBuf = NULL; + sa->nWriteSize = 0; + } } + return SA_ERR_ARG; return SA_OK; } Index: ossp-pkg/sa/sa.h RCS File: /v/ossp/cvs/ossp-pkg/sa/sa.h,v rcsdiff -q -kk '-r1.20' '-r1.21' -u '/v/ossp/cvs/ossp-pkg/sa/sa.h,v' 2>/dev/null --- sa.h 2001/10/09 20:19:58 1.20 +++ sa.h 2001/10/10 07:42:26 1.21 @@ -124,6 +124,12 @@ SA_TIMEOUT_WRITE = 3 } sa_timeout_t; +/* list of buffers */ +typedef enum { + SA_BUFFER_READ, + SA_BUFFER_WRITE +} sa_buffer_t; + /* list of system calls */ typedef enum { SA_SYSCALL_CONNECT, @@ -153,7 +159,7 @@ /* socket parameter operations */ sa_rc_t sa_type (sa_t *sa, sa_type_t type); sa_rc_t sa_timeout (sa_t *sa, sa_timeout_t id, long sec, long usec); -sa_rc_t sa_buffers (sa_t *sa, size_t rsize, size_t wsize); +sa_rc_t sa_buffer (sa_t *sa, sa_buffer_t id, size_t size); sa_rc_t sa_syscall (sa_t *sa, sa_syscall_t id, void (*fptr)(), void *fctx); /* socket connection operations */ Index: ossp-pkg/sa/sa.pod RCS File: /v/ossp/cvs/ossp-pkg/sa/sa.pod,v rcsdiff -q -kk '-r1.9' '-r1.10' -u '/v/ossp/cvs/ossp-pkg/sa/sa.pod,v' 2>/dev/null --- sa.pod 2001/10/09 13:19:25 1.9 +++ sa.pod 2001/10/10 07:42:26 1.10 @@ -65,7 +65,7 @@ =item B: sa_timeout, -sa_buffers. +sa_buffer. =item B: @@ -220,7 +220,7 @@ =item sa_rc_t B(sa_t *I, long I, long I); -=item sa_rc_t B(sa_t *I, size_t I, size_t I); +=item sa_rc_t B(sa_t *I, sa_buffer_t id, size_t I); =item sa_rc_t B(sa_t *I, int I, void *I, socklen_t *I);