Blame


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