#include "kvs_rw_tools.h" #include "memory/alloc_dispatch.h" #include "kvs_oplog.h" #include #include #include #if ENABLE_ARRAY extern kvs_array_t global_array; #endif #if ENABLE_RBTREE extern kvs_rbtree_t global_rbtree; #endif #if ENABLE_HASH extern kvs_hash_t global_hash; #endif extern int global_cmd_log_fd; #include int write_full(int fd, const void *buf, size_t len) { const uint8_t *p = buf; while (len > 0) { ssize_t n = write(fd, p, len); if (n < 0) { if (errno == EINTR) continue; return -1; } p += n; len -= n; } return 0; } // 1 read n suc, 0 eof, -1 error int read_full(int fd, void *buf, size_t n) { uint8_t *p = (uint8_t *)buf; size_t got = 0; while (got < n) { ssize_t r = read(fd, p + got, n - got); if (r > 0) { got += (size_t)r; continue; } if (r == 0) { return (got == 0) ? 0 : -1; } /* r < 0 */ if (errno == EINTR) { continue; } return -1; } return 1; } // -1 err, 0 suc int kvs_write_file(FILE *fp, const void *buf, size_t n) { const uint8_t *p = (const uint8_t *)buf; while (n > 0) { size_t w = fwrite(p, 1, n, fp); if (w == 0) return -1; p += w; n -= w; } return 0; } // -1 err, 0 suc int kvs_read_file(FILE *fp, void *buf, size_t n){ uint8_t *p = (uint8_t *)buf; while (n > 0) { size_t r = fread(p, 1, n, fp); if (r == 0) return -1; // EOF or error p += r; n -= r; } return 0; }