Lindenii Project Forge
Warning: Due to various recent migrations, viewing non-HEAD refs may be broken.
/git2d/rw.c (raw)
/*-
* SPDX-License-Identifier: AGPL-3.0-only
* SPDX-FileCopyrightText: Copyright (c) 2025 Runxi Yu <https://runxiyu.org>
*/
#include "x.h"
bare_error
conn_read(void *buffer, void *dst, uint64_t sz)
{
conn_io_t *io = buffer;
ssize_t rsz = read(io->fd, dst, sz);
return (rsz == (ssize_t) sz) ? BARE_ERROR_NONE : BARE_ERROR_READ_FAILED;
}
bare_error
conn_write(void *buffer, const void *src, uint64_t sz)
{
conn_io_t *io = buffer;
const uint8_t *data = src;
uint64_t total = 0;
while (total < sz) {
ssize_t written = write(io->fd, data + total, sz - total);
if (written < 0) {
if (errno == EINTR)
continue;
return BARE_ERROR_WRITE_FAILED;
}
if (written == 0)
break;
total += written;
}
return (total == sz) ? BARE_ERROR_NONE : BARE_ERROR_WRITE_FAILED;
}