summaryrefslogtreecommitdiffstats
path: root/src/util.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/util.c')
-rw-r--r--src/util.c19
1 files changed, 16 insertions, 3 deletions
diff --git a/src/util.c b/src/util.c
index cbb9b91..715a7b5 100644
--- a/src/util.c
+++ b/src/util.c
@@ -539,7 +539,7 @@ int prune_empty_directories(const char *path, const char *root) {
if (rmdir(rpath) < 0) {
- if (errno == ENOTEMPTY)
+ if (errno == ENOTEMPTY || errno == EBUSY)
break;
if (errno != ENOENT) {
@@ -750,8 +750,8 @@ ssize_t loop_read(int fd, void *d, size_t l) {
return p-d;
}
-ssize_t loop_write(int fd, void *d, size_t l) {
- void *p = d;
+ssize_t loop_write(int fd, const void *d, size_t l) {
+ const void *p = d;
while (l > 0) {
ssize_t r;
@@ -790,3 +790,16 @@ off_t filesize2(const char *p) {
return st.st_size;
}
+
+#define TMPDIR_ENV "TMPDIR"
+
+void set_tmp_dir(const char *s) {
+#ifdef HAVE_SETENV
+ setenv(TMPDIR_ENV, s, 1);
+#else
+ char *tmp = malloc(strlen(s) + sizeof(TMPDIR_ENV) + 1);
+ assert(tmp);
+ sprintf(tmp, "%s=%s", TMPDIR_ENV, s);
+ putenv(tmp);
+#endif
+}