GET9ROOT(3)                                           GET9ROOT(3)

     NAME
          get9root, unsharp - get path to root of Plan 9 tree

     SYNOPSIS
          #include <u.h>
          #include <libc.h>

          char*     get9root(void)

          char*     unsharp(char *path)

     DESCRIPTION
          This tree of Plan 9 software is conventionally installed in
          /usr/local/plan9 but may be installed in other places (for
          example, users without the ability to write to /usr/local
          may with to install it in their own home directories).  The
          environment variable $PLAN9 should contain the path to the
          root.  Get9root returns a static pointer to the pathname of
          root, first checking $PLAN9 and defaulting to
          /usr/local/plan9.

          The lack of a fixed location for the Plan 9 tree makes it
          difficult to hard-code paths to files. Unsharp replaces a
          leading #9 in path with the root of the tree.  Unsharp also
          replaces a leading #d with the path to the underlying
          system's file descriptor dup device, typically /dev/fd.  The
          string returned from unsharp, if different from path, should
          be freed with free (see malloc(3)) when no longer needed.

          As a convention, programs should never unsharp paths
          obtained from user input.

     EXAMPLE
          The plumber(4) uses this code to find unrooted file names
          included by plumb rules.

               snprint(buf, sizeof buf, "#9/plumb/%s", name);
               fd = open(unsharp(buf), OREAD);

     SOURCE
          /usr/local/plan9/src/lib9/get9root.c
          /usr/local/plan9/src/lib9/unsharp.c

     SEE ALSO
          intro(4)

     BUGS
          Get9root could be smarter about finding the tree when $PLAN9
          is not set.

     Page 1                       Plan 9             (printed 4/19/24)