summaryrefslogtreecommitdiffstats
path: root/src/util.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/util.c')
-rw-r--r--src/util.c44
1 files changed, 44 insertions, 0 deletions
diff --git a/src/util.c b/src/util.c
new file mode 100644
index 0000000..415da09
--- /dev/null
+++ b/src/util.c
@@ -0,0 +1,44 @@
+#include "util.h"
+
+char *basename(const char *path) {
+ const char *p;
+
+ if (p = strrchr(path, '/'))
+ return p+1;
+
+ return path;
+}
+
+ssize_t loop_read(int FILEDES, void *BUFFER, size_t SIZE) {
+ int c = 0;
+
+ while (SIZE > 0) {
+ int r = read(FILEDES, BUFFER, SIZE);
+
+ if (r <= 0)
+ break;
+
+ SIZE -= r;
+ c += r;
+ BUFFER = ((void*) (((char*) BUFFER) + r));
+ }
+
+ return c;
+}
+
+ssize_t loop_write(int FILEDES, const void *BUFFER, size_t SIZE) {
+ int c = 0;
+
+ while (SIZE > 0) {
+ int r = write(FILEDES, BUFFER, SIZE);
+
+ if (r <= 0)
+ break;
+
+ SIZE -= r;
+ c += r;
+ BUFFER = ((void*) (((char*) BUFFER) + r));
+ }
+
+ return c;
+}