#include "fileops.h" int gitfo_read(git_file fd, void *buf, size_t cnt) { char *b = buf; while (cnt) { ssize_t r = read(fd, b, cnt); if (r < 0) { if (errno == EINTR || errno == EAGAIN) continue; return -1; } if (!r) { errno = EPIPE; return -1; } cnt -= r; b += r; } return GIT_SUCCESS; } int gitfo_write(git_file fd, void *buf, size_t cnt) { char *b = buf; while (cnt) { ssize_t r = write(fd, b, cnt); if (r < 0) { if (errno == EINTR || errno == EAGAIN) continue; return -1; } if (!r) { errno = EPIPE; return -1; } cnt -= r; b += r; } return GIT_SUCCESS; } off_t gitfo_size(git_file fd) { gitfo_statbuf sb; if (fstat(fd, &sb)) return -1; return sb.st_size; }