|  | 
 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/lib/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/lib/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     
 SEE ALSO    
 BUGS     
 |  |  |  | Get9root could be smarter about finding the tree when $PLAN9 is
    not set. 
 | 
 |  |