Mercurial > dovecot > core-2.2
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