changeset 10571:749e7f1df078 HEAD

Added t_readlink().
author Timo Sirainen <tss@iki.fi>
date Sat, 23 Jan 2010 12:37:14 +0200
parents cd29a6801e75
children 26b5209dc4f4
files src/lib/abspath.c src/lib/abspath.h
diffstat 2 files changed, 23 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/src/lib/abspath.c	Fri Jan 22 18:19:41 2010 +0200
+++ b/src/lib/abspath.c	Sat Jan 23 12:37:14 2010 +0200
@@ -42,3 +42,24 @@
 	*dir_r = dir;
 	return 0;
 }
+
+int t_readlink(const char *path, const char **dest_r)
+{
+	/* @UNSAFE */
+	ssize_t ret;
+	char *dest;
+	size_t size = 128;
+
+	dest = t_buffer_get(size);
+	while ((ret = readlink(path, dest, size)) >= (ssize_t)size) {
+		size = nearest_power(size+1);
+		dest = t_buffer_get(size);
+	}
+	if (ret < 0)
+		return -1;
+
+	dest[ret] = '\0';
+	t_buffer_alloc(ret + 1);
+	*dest_r = dest;
+	return 0;
+}
--- a/src/lib/abspath.h	Fri Jan 22 18:19:41 2010 +0200
+++ b/src/lib/abspath.h	Sat Jan 23 12:37:14 2010 +0200
@@ -9,5 +9,7 @@
 
 /* Returns current directory, allocated from data stack. */
 int t_get_current_dir(const char **dir_r);
+/* Returns symlink destination, allocated from data stack. */
+int t_readlink(const char *path, const char **dest_r);
 
 #endif