tget9root.3 - plan9port - [fork] Plan 9 from user space
 (HTM) git clone git://src.adamsgaard.dk/plan9port
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
       tget9root.3 (1535B)
       ---
            1 .TH GET9ROOT 3
            2 .SH NAME
            3 get9root, unsharp \- get path to root of Plan 9 tree
            4 .SH SYNOPSIS
            5 .B #include <u.h>
            6 .br
            7 .B #include <libc.h>
            8 .PP
            9 .B
           10 char*        get9root(void)
           11 .PP
           12 .B
           13 char*        unsharp(char *path)
           14 .SH DESCRIPTION
           15 This tree of Plan 9 software is conventionally installed in
           16 .B \*9
           17 but may be installed in other places (for example, users without
           18 the ability to write to
           19 .B /usr/local
           20 may with to install it in their own home directories).
           21 The environment variable
           22 .B $PLAN9
           23 should contain the path to the root.
           24 .I Get9root
           25 returns a static pointer to the pathname of root, first checking
           26 .B $PLAN9
           27 and defaulting to
           28 .BR \*9 .
           29 .PP
           30 The lack of a fixed location for the Plan 9 tree
           31 makes it difficult to hard-code paths
           32 to files. 
           33 .I Unsharp
           34 replaces a leading
           35 .B #9
           36 in 
           37 .I path
           38 with the root of the tree.
           39 .I Unsharp
           40 also replaces a leading
           41 .B #d
           42 with the path to the underlying system's file descriptor dup device,
           43 typically
           44 .BR /dev/fd .
           45 The string returned from
           46 .IR unsharp ,
           47 if different from
           48 .IR path ,
           49 should be freed with
           50 .I free
           51 (see
           52 .MR malloc (3) )
           53 when no longer needed.
           54 .PP
           55 As a convention, programs should never
           56 .I unsharp
           57 paths obtained from user input.
           58 .SH EXAMPLE
           59 The
           60 .MR plumber (4)
           61 uses this code to find unrooted file names included by plumb rules.
           62 .IP
           63 .EX
           64 snprint(buf, sizeof buf, "#9/plumb/%s", name);
           65 fd = open(unsharp(buf), OREAD);
           66 .EE
           67 .SH SOURCE
           68 .B \*9/src/lib9/get9root.c
           69 .br
           70 .B \*9/src/lib9/unsharp.c
           71 .SH SEE ALSO
           72 .MR intro (4)
           73 .SH BUGS
           74 .I Get9root
           75 could be smarter about finding the tree when
           76 .B $PLAN9
           77 is not set.