#include "alloc/malloc.h"
#include "alloc/x/xmalloc.h"
#include "attr.h"
+#include "fs/readlink/readlinknul.h"
#include "prototypes.h"
#include "defines.h"
#ifdef WITH_SELINUX
size_t size = 1024;
while (true) {
- ssize_t nchars;
+ int len;
char *buffer = MALLOC(size, char);
if (NULL == buffer) {
return NULL;
}
- nchars = readlink (filename, buffer, size);
+ len = readlinknul(filename, buffer, size);
+ if (len != -1)
+ return buffer;
- if (nchars < 0) {
- free(buffer);
+ free(buffer);
+ if (errno != E2BIG)
return NULL;
- }
-
- if ((size_t) nchars < size) { /* The buffer was large enough */
- /* readlink does not nul-terminate */
- stpcpy(&buffer[nchars], "");
- return buffer;
- }
- /* Try again with a bigger buffer */
- free (buffer);
size *= 2;
}
}