refactor(dbms): tdb_query returns response

This commit is contained in:
Masahiko AMANO 2023-01-23 21:04:49 +03:00
parent bf1a652b91
commit 23aae2c3b1
2 changed files with 11 additions and 10 deletions

View File

@ -18,7 +18,7 @@ int tdbms_connect(const char *domain, const char *addr);
int tdbms_close(int socket_fd); int tdbms_close(int socket_fd);
// Execute a TDB request // Execute a TDB request
int tdb_query(int socket_fd, const char *db_name, char request_code, const char *request_body, char **response); char *tdb_query(int socket_fd, const char *db_name, char request_code, const char *request_body);
#ifdef __cplusplus #ifdef __cplusplus
} }

View File

@ -40,9 +40,9 @@ int tdbms_close(int socket_fd) {
return close(socket_fd); return close(socket_fd);
} }
int tdb_query(int socket_fd, const char *db_name, char request_code, const char *request_body, char **response) { char *tdb_query(int socket_fd, const char *db_name, char request_code, const char *request_body) {
if (socket_fd < 0 || db_name == NULL || request_body == NULL) { if (socket_fd < 0 || db_name == NULL || request_body == NULL) {
return 1; return NULL;
} }
size_t req_size = 1 + strlen(db_name) + 1 + strlen(request_body) + 1, resp_size; size_t req_size = 1 + strlen(db_name) + 1 + strlen(request_body) + 1, resp_size;
ssize_t nread, nwrite; ssize_t nread, nwrite;
@ -63,26 +63,27 @@ int tdb_query(int socket_fd, const char *db_name, char request_code, const char
free(request); free(request);
if (nwrite <= 0) { if (nwrite <= 0) {
fprintf(stderr, "ERROR: failed to send request to server\n"); fprintf(stderr, "ERROR: failed to send request to server\n");
return -1; return NULL;
} }
*response = malloc(BUFSIZ); char *response = malloc(BUFSIZ);
resp_size = BUFSIZ; resp_size = BUFSIZ;
buffer = malloc(BUFSIZ); buffer = malloc(BUFSIZ);
for (off_t offset = 0; (nread = read(socket_fd, buffer, BUFSIZ)) > 0;) { for (off_t offset = 0; (nread = read(socket_fd, buffer, BUFSIZ)) > 0;) {
if (offset + nread > resp_size) { if (offset + nread > resp_size) {
resp_size += BUFSIZ; resp_size += BUFSIZ;
*response = realloc(*response, resp_size); response = realloc(response, resp_size);
} }
memcpy(*response + offset, buffer, nread); memcpy(response + offset, buffer, nread);
offset += nread; offset += nread;
if ((*response)[offset - 1] == 0) { if (response[offset - 1] == 0) {
break; break;
} }
} }
free(buffer); free(buffer);
if (nread < 0) { if (nread < 0) {
fprintf(stderr, "ERROR: failed to get server response\n"); fprintf(stderr, "ERROR: failed to get server response\n");
return -1; free(response);
return NULL;
} }
return 0; return response;
} }