| 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.