Dangling pointer.. in a book?
===

I probably missed something but just wanna ask.. I found this code in the book Advanced Linux programming:

        char* get_self_executable_directory ()
        {
          int rval;
          char link_target[1024];
          char* last_slash;
          size_t result_length;
          char* result;
          /* Read the target of the symbolic link /proc/self/exe. */
          rval = readlink (“/proc/self/exe”, link_target, sizeof (link_target));
          if (rval == -1)
            /* The call to readlink failed, so bail. */
            abort ();
          else
        
          /* NUL-terminate the target. */
          link_target[rval] = ‘\0’;
          /* We want to trim the name of the executable file, to obtain the
          directory that contains it. Find the rightmost slash. */
          last_slash = strrchr (link_target, ‘/’);
          if (last_slash == NULL || last_slash == link_target)
            /* Something strange is going on. */
            abort ();
          /* Allocate a buffer to hold the resulting path. */
          result_length = last_slash - link_target;
          result = (char*) xmalloc (result_length + 1);
          /* Copy the result. */
          strncpy (result, link_target, result_length);
          result[result_length] = ‘\0’;
          return result;
        }
And my question is, doesn't this function return a dangling pointer?