1 /* 2 * xreadlink.c - safe implementation of readlink. 3 * Returns a NULL on failure... 4 */ 5 6 #include <stdio.h> 7 8 /* 9 * NOTE: This function returns a malloced char* that you will have to free 10 * yourself. You have been warned. 11 */ 12 13 #include <unistd.h> 14 #include "libbb.h" 15 16 extern char *xreadlink(const char *path) 17 { 18 static const int GROWBY = 80; /* how large we will grow strings by */ 19 20 char *buf = NULL; 21 int bufsize = 0, readsize = 0; 22 23 do { 24 buf = xrealloc(buf, bufsize += GROWBY); 25 readsize = readlink(path, buf, bufsize); /* 1st try */ 26 if (readsize == -1) { 27 perror_msg("%s", path); 28 free(buf); 29 return NULL; 30 } 31 } 32 while (bufsize < readsize + 1); 33 34 buf[readsize] = '\0'; 35 36 return buf; 37 } 38
This page was automatically generated by LXR 0.3.1. • OpenWrt