summaryrefslogtreecommitdiff
path: root/src/io.c
diff options
context:
space:
mode:
authorJörg Frings-Fürst <debian@jff-webhosting.net>2023-07-21 21:23:33 +0200
committerJörg Frings-Fürst <debian@jff-webhosting.net>2023-07-21 21:23:33 +0200
commit6eddfddeb9da77b6523d8e1ebc2e75c8b5dc5ac9 (patch)
treea91cb3fe015335f1e39d15cfb43d9d1d934fb679 /src/io.c
parent7501bff8432444b7ae8e7f3d9289c0d61f3f0b64 (diff)
parent448048363acac15d165200cfdabda02a0e8b9e9b (diff)
Merge branch 'release/debian/4.14-1'debian/4.14-1
Diffstat (limited to 'src/io.c')
-rw-r--r--src/io.c22
1 files changed, 11 insertions, 11 deletions
diff --git a/src/io.c b/src/io.c
index 720a9c5..76c9444 100644
--- a/src/io.c
+++ b/src/io.c
@@ -11,6 +11,7 @@
# include "config.h"
#endif
#include <sys/stat.h>
+#include <assert.h>
#include <errno.h>
#include <fcntl.h>
#include <limits.h>
@@ -65,7 +66,7 @@ static int mkdir_gen(const char *d, unsigned int mode)
return 1;
if (errno != EEXIST)
return -errno;
- if (lstat(d, &sb) == 0) {
+ if (stat(d, &sb) == 0) {
#if defined(_WIN32)
if (sb.st_mode & S_IFDIR)
#else
@@ -423,6 +424,7 @@ HX_realpath_symres(struct HX_realpath_state *state, const char *path)
return -ELOOP;
#endif
+ assert(state->link_target != nullptr);
if (*state->link_target == '/') {
*state->dest = '\0';
if (HXmc_setlen(&state->dest, 0) == NULL)
@@ -594,39 +596,37 @@ EXPORT_SYMBOL int HX_rrmdir(const char *dir)
EXPORT_SYMBOL ssize_t HXio_fullread(int fd, void *vbuf, size_t size)
{
char *buf = vbuf;
- size_t done = 0;
if (size > SSIZE_MAX)
size = SSIZE_MAX;
- while (done < size) {
- ssize_t ret = read(fd, buf, size - done);
+ while (size > 0) {
+ ssize_t ret = read(fd, buf, size);
if (ret < 0)
return ret;
else if (ret == 0)
break;
- done += ret;
buf += ret;
+ size -= ret;
}
- return done;
+ return buf - static_cast(char *, vbuf);
}
EXPORT_SYMBOL ssize_t HXio_fullwrite(int fd, const void *vbuf, size_t size)
{
const char *buf = vbuf;
- size_t done = 0;
if (size > SSIZE_MAX)
size = SSIZE_MAX;
- while (done < size) {
- ssize_t ret = write(fd, buf, size - done);
+ while (size > 0) {
+ ssize_t ret = write(fd, buf, size);
if (ret < 0)
return ret;
else if (ret == 0)
break;
- done += ret;
buf += ret;
+ size -= ret;
}
- return done;
+ return buf - static_cast(const char *, vbuf);
}
#if __linux__