- size_t buf_size = 128; /* must be a power of 2 */
- char *buffer = NULL;
-
- while (1)
- {
- int link_length;
- buffer = (char *) xrealloc (buffer, buf_size);
- link_length = readlink (filename, buffer, buf_size);
- if (link_length < 0)
- {
- free (buffer);
- return NULL;
- }
- if (link_length < buf_size)
- {
- *link_length_arg = link_length;
- buffer[link_length] = 0;
- return buffer;
- }
- buf_size *= 2;
- if (buf_size == 0)
- xalloc_die ();
- }