Back to index

glibc  2.9
linkat.c File Reference
#include <errno.h>
#include <fcntl.h>
#include <stddef.h>
#include <unistd.h>
#include <hurd.h>
#include <hurd/fd.h>

Go to the source code of this file.


int linkat (int fromfd, const char *from, int tofd, const char *to, int flags)

Function Documentation

int linkat ( int  fromfd,
const char *  from,
int  tofd,
const char *  to,
int  flags 

Definition at line 30 of file linkat.c.

  error_t err;
  file_t oldfile, linknode, todir;
  char *toname;

  oldfile = __file_name_lookup_at (fromfd, flags, from, 0, 0);
  if (oldfile == MACH_PORT_NULL)
    return -1;

  /* The file_getlinknode RPC returns the port that should be passed to
     the receiving filesystem (the one containing TODIR) in dir_link.  */

  err = __file_getlinknode (oldfile, &linknode);
  __mach_port_deallocate (__mach_task_self (), oldfile);
  if (err)
    return __hurd_fail (err);

  todir = __file_name_split_at (tofd, to, &toname);
  if (todir != MACH_PORT_NULL)
      err = __dir_link (todir, linknode, toname, 1);
      __mach_port_deallocate (__mach_task_self (), todir);
  __mach_port_deallocate (__mach_task_self (), linknode);
  if (todir == MACH_PORT_NULL)
    return -1;

  if (err)
    return __hurd_fail (err);
  return 0;

Here is the call graph for this function: