Print this page
12212 typos in some section 3tecla man pages
Split |
Close |
Expand all |
Collapse all |
--- old/usr/src/man/man3tecla/pca_lookup_file.3tecla
+++ new/usr/src/man/man3tecla/pca_lookup_file.3tecla
1 1 '\" te
2 2 .\" Copyright (c) 2000, 2001, 2002, 2003, 2004 by Martin C. Shepherd. All Rights Reserved.
3 3 .\" Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the
4 4 .\" "Software"), to deal in the Software without restriction, including
5 5 .\" without limitation the rights to use, copy, modify, merge, publish,
6 6 .\" distribute, and/or sell copies of the Software, and to permit persons
7 7 .\" to whom the Software is furnished to do so, provided that the above
8 8 .\" copyright notice(s) and this permission notice appear in all copies of
9 9 .\" the Software and that both the above copyright notice(s) and this
10 10 .\" permission notice appear in supporting documentation.
11 11 .\"
12 12 .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
13 13 .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
14 14 .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
15 15 .\" OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
16 16 .\" HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL
↓ open down ↓ |
16 lines elided |
↑ open up ↑ |
17 17 .\" INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING
18 18 .\" FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
19 19 .\" NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
20 20 .\" WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
21 21 .\"
22 22 .\" Except as contained in this notice, the name of a copyright holder
23 23 .\" shall not be used in advertising or otherwise to promote the sale, use
24 24 .\" or other dealings in this Software without prior written authorization
25 25 .\" of the copyright holder.
26 26 .\" Portions Copyright (c) 2007, Sun Microsystems, Inc. All Rights Reserved.
27 -.TH PCA_LOOKUP_FILE 3TECLA "Aug 13, 2007"
27 +.TH PCA_LOOKUP_FILE 3TECLA "January 18, 2020"
28 28 .SH NAME
29 29 pca_lookup_file, del_PathCache, del_PcaPathConf, new_PathCache,
30 30 new_PcaPathConf, pca_last_error, pca_path_completions, pca_scan_path,
31 31 pca_set_check_fn, ppc_file_start, ppc_literal_escapes \- lookup a file in a
32 32 list of directories
33 33 .SH SYNOPSIS
34 -.LP
35 34 .nf
36 35 cc [ \fIflag\fR\&.\|.\|. ] \fIfile\fR\&.\|.\|. \fB-ltecla\fR [ \fIlibrary\fR\&.\|.\|. ]
37 36 #include <libtecla.h>
38 37
39 38 \fBchar *\fR\fBpca_lookup_file\fR(\fBPathCache *\fR\fIpc\fR, \fBconst char *\fR\fIname\fR,
40 39 \fBint\fR \fIname_len\fR, \fBint\fR \fIliteral\fR);
41 40 .fi
42 41
43 42 .LP
44 43 .nf
45 44 \fBPathCache *\fR\fBdel_PathCache\fR(\fBPathCache *\fR\fIpc\fR);
46 45 .fi
47 46
48 47 .LP
49 48 .nf
50 49 \fBPcaPathConf *\fR\fBdel_PcaPathConf\fR(\fBPcaPathConf *\fR\fIppc\fR);
51 50 .fi
52 51
53 52 .LP
54 53 .nf
55 54 \fBPathCache *\fR\fBnew_PathCache\fR(\fBvoid\fR);
56 55 .fi
57 56
58 57 .LP
59 58 .nf
60 59 \fBPcaPathConf *\fR\fBnew_PcaPathConf\fR(\fBPathCache *\fR\fIpc\fR);
61 60 .fi
62 61
63 62 .LP
64 63 .nf
65 64 \fBconst char *\fR\fBpca_last_error\fR(\fBPathCache *\fR\fIpc\fR);
66 65 .fi
67 66
68 67 .LP
69 68 .nf
70 69 \fBCPL_MATCH_FN\fR(\fBpca_path_completions\fR);
71 70 .fi
72 71
73 72 .LP
74 73 .nf
75 74 \fBint\fR \fBpca_scan_path\fR(\fBPathCache *\fR\fIpc\fR, \fBconst char *\fR\fIpath\fR);
76 75 .fi
77 76
78 77 .LP
79 78 .nf
80 79 \fBvoid\fR \fBpca_set_check_fn\fR(\fBPathCache *\fR\fIpc\fR, \fBCplCheckFn *\fR\fIcheck_fn\fR,
81 80 \fBvoid *\fR\fIdata\fR);
82 81 .fi
83 82
84 83 .LP
↓ open down ↓ |
40 lines elided |
↑ open up ↑ |
85 84 .nf
86 85 \fBvoid\fR \fBppc_file_start\fR(\fBPcaPathConf *\fR\fIppc\fR, \fBint\fR \fIstart_index\fR);
87 86 .fi
88 87
89 88 .LP
90 89 .nf
91 90 \fBvoid\fR \fBppc_literal_escapes\fR(\fBPcaPathConf *\fR\fIppc\fR, \fBint\fR \fIliteral\fR);
92 91 .fi
93 92
94 93 .SH DESCRIPTION
95 -.sp
96 -.LP
97 94 The \fBPathCache\fR object is part of the \fBlibtecla\fR(3LIB) library.
98 95 \fBPathCache\fR objects allow an application to search for files in any colon
99 96 separated list of directories, such as the UNIX execution \fBPATH\fR
100 97 environment variable. Files in absolute directories are cached in a
101 98 \fBPathCache\fR object, whereas relative directories are scanned as needed.
102 99 Using a \fBPathCache\fR object, you can look up the full pathname of a simple
103 100 filename, or you can obtain a list of the possible completions of a given
104 101 filename prefix. By default all files in the list of directories are targets
105 102 for lookup and completion, but a versatile mechanism is provided for only
106 103 selecting specific types of files. The obvious application of this facility is
107 104 to provide Tab-completion and lookup of executable commands in the UNIX
108 -\fBPATH\fR, so an optional callback which rejects all but executable files, is
105 +\fBPATH\fR, so an optional callback which rejects all but executable files is
109 106 provided.
110 107 .SS "An Example"
111 -.sp
112 -.LP
113 108 Under UNIX, the following example program looks up and displays the full
114 109 pathnames of each of the command names on the command line.
115 110 .sp
116 111 .in +2
117 112 .nf
118 113 #include <stdio.h>
119 114 #include <stdlib.h>
120 115 #include <libtecla.h>
121 116
122 117 int main(int argc, char *argv[])
123 118 {
124 119 int i;
125 120 /*
126 121 * Create a cache for executable files.
127 122 */
128 123 PathCache *pc = new_PathCache();
129 124 if(!pc)
130 125 exit(1);
131 126 /*
132 127 * Scan the user's PATH for executables.
133 128 */
134 129 if(pca_scan_path(pc, getenv("PATH"))) {
135 130 fprintf(stderr, "%s\en", pca_last_error(pc));
136 131 exit(1);
137 132 }
138 133 /*
139 134 * Arrange to only report executable files.
140 135 */
141 136 pca_set_check_fn(pc, cpl_check_exe, NULL);
142 137 /*
143 138 * Lookup and display the full pathname of each of the
144 139 * commands listed on the command line.
145 140 */
146 141 for(i=1; i<argc; i++) {
147 142 char *cmd = pca_lookup_file(pc, argv[i], -1, 0);
148 143 printf("The full pathname of '%s' is %s\e\en", argv[i],
149 144 cmd ? cmd : "unknown");
150 145 }
151 146 pc = del_PathCache(pc); /* Clean up */
152 147 return 0;
153 148 }
154 149 .fi
155 150 .in -2
156 151
157 152 .sp
158 153 .LP
159 154 The following is an example of what this does on a laptop under LINUX:
160 155 .sp
161 156 .in +2
↓ open down ↓ |
39 lines elided |
↑ open up ↑ |
162 157 .nf
163 158 $ ./example less more blob
164 159 The full pathname of 'less' is /usr/bin/less
165 160 The full pathname of 'more' is /bin/more
166 161 The full pathname of 'blob' is unknown
167 162 $
168 163 .fi
169 164 .in -2
170 165
171 166 .SS "Function Descriptions"
172 -.sp
173 -.LP
174 167 To use the facilities of this module, you must first allocate a \fBPathCache\fR
175 168 object by calling the \fBnew_PathCache()\fR constructor function. This function
176 169 creates the resources needed to cache and lookup files in a list of
177 170 directories. It returns \fINULL\fR on error.
178 171 .SS "Populating The Cache"
179 -.sp
180 -.LP
181 172 Once you have created a cache, it needs to be populated with files. To do this,
182 173 call the \fBpca_scan_path()\fR function. Whenever this function is called, it
183 174 discards the current contents of the cache, then scans the list of directories
184 175 specified in its path argument for files. The path argument must be a string
185 176 containing a colon-separated list of directories, such as
186 177 "\fB/usr/bin\fR:\fB/home/mcs/bin\fR:". This can include directories specified
187 178 by absolute pathnames such as "\fB/usr/bin\fR", as well as sub-directories
188 179 specified by relative pathnames such as "." or "\fBbin\fR". Files in the
189 180 absolute directories are immediately cached in the specified \fBPathCache\fR
190 181 object, whereas subdirectories, whose identities obviously change whenever the
191 182 current working directory is changed, are marked to be scanned on the fly
192 183 whenever a file is looked up.
193 184 .sp
194 185 .LP
195 186 On success this function return 0. On error it returns 1, and a description of
196 187 the error can be obtained by calling \fBpca_last_error\fR(\fIpc\fR).
197 188 .SS "Looking Up Files"
198 -.sp
199 -.LP
200 189 Once the cache has been populated with files, you can look up the full pathname
201 190 of a file, simply by specifying its filename to \fBpca_lookup_file()\fR.
202 191 .sp
203 192 .LP
204 193 To make it possible to pass this function a filename which is actually part of
205 194 a longer string, the \fIname_len\fR argument can be used to specify the length
206 195 of the filename at the start of the \fIname\fR[] argument. If you pass -1 for
207 196 this length, the length of the string will be determined with \fIstrlen\fR. If
208 197 the \fIname\fR[] string might contain backslashes that escape the special
209 198 meanings of spaces and tabs within the filename, give the \fIliteral\fR
210 199 argument the value 0. Otherwise, if backslashes should be treated as normal
211 200 characters, pass 1 for the value of the \fIliteral\fR argument.
212 201 .SS "Filename Completion"
213 -.sp
214 -.LP
215 202 Looking up the potential completions of a filename-prefix in the filename cache
216 203 is achieved by passing the provided \fBpca_path_completions()\fR callback
217 204 function to the \fBcpl_complete_word\fR(3TECLA) function.
218 205 .sp
219 206 .LP
220 207 This callback requires that its data argument be a pointer to a PcaPathConf
221 208 object. Configuration objects of this type are allocated by calling
222 209 \fBnew_PcaPathConf()\fR.
223 210 .sp
224 211 .LP
225 212 This function returns an object initialized with default configuration
226 213 parameters, which determine how the \fBcpl_path_completions()\fR callback
227 214 function behaves. The functions which allow you to individually change these
228 215 parameters are discussed below.
229 216 .sp
230 217 .LP
231 218 By default, the \fBpca_path_completions()\fR callback function searches
232 219 backwards for the start of the filename being completed, looking for the first
233 220 un-escaped space or the start of the input line. If you wish to specify a
234 221 different location, call \fBppc_file_start()\fR with the index at which the
235 222 filename starts in the input line. Passing \fIstart_index\fR=-1 re-enables the
236 223 default behavior.
237 224 .sp
238 225 .LP
239 226 By default, when \fBpca_path_completions()\fR looks at a filename in the input
240 227 line, each lone backslash in the input line is interpreted as being a special
241 228 character which removes any special significance of the character which follows
242 229 it, such as a space which should be taken as part of the filename rather than
↓ open down ↓ |
18 lines elided |
↑ open up ↑ |
243 230 delimiting the start of the filename. These backslashes are thus ignored while
244 231 looking for completions, and subsequently added before spaces, tabs and literal
245 232 backslashes in the list of completions. To have unescaped backslashes treated
246 233 as normal characters, call \fBppc_literal_escapes()\fR with a non-zero value in
247 234 its literal argument.
248 235 .sp
249 236 .LP
250 237 When you have finished with a \fBPcaPathConf\fR variable, you can pass it to
251 238 the \fBdel_PcaPathConf()\fR destructor function to reclaim its memory.
252 239 .SS "Being Selective"
253 -.sp
254 -.LP
255 240 If you are only interested in certain types or files, such as, for example,
256 241 executable files, or files whose names end in a particular suffix, you can
257 242 arrange for the file completion and lookup functions to be selective in the
258 243 filenames that they return. This is done by registering a callback function
259 244 with your \fBPathCache\fR object. Thereafter, whenever a filename is found
260 245 which either matches a filename being looked up or matches a prefix which is
261 246 being completed, your callback function will be called with the full pathname
262 247 of the file, plus any application-specific data that you provide. If the
263 248 callback returns 1 the filename will be reported as a match. If it returns 0,
264 249 it will be ignored. Suitable callback functions and their prototypes should be
265 250 declared with the following macro. The \fBCplCheckFn\fR typedef is also
266 -provided in case you wish to declare pointers to such functions
251 +provided in case you wish to declare pointers to such functions.
267 252 .sp
268 253 .in +2
269 254 .nf
270 255 #define CPL_CHECK_FN(fn) int (fn)(void *data, const char *pathname)
271 256 typedef CPL_CHECK_FN(CplCheckFn);
272 257 .fi
273 258 .in -2
274 259
275 260 .sp
276 261 .LP
277 262 Registering one of these functions involves calling the
278 263 \fBpca_set_check_fn()\fR function. In addition to the callback function passed
279 264 with the \fIcheck_fn\fR argument, you can pass a pointer to anything with the
280 265 \fIdata\fR argument. This pointer will be passed on to your callback function
281 266 by its own \fIdata\fR argument whenever it is called, providing a way to pass
282 267 application-specific data to your callback. Note that these callbacks are
283 268 passed the full pathname of each matching file, so the decision about whether a
284 269 file is of interest can be based on any property of the file, not just its
285 270 filename. As an example, the provided \fBcpl_check_exe()\fR callback function
286 271 looks at the executable permissions of the file and the permissions of its
287 272 parent directories, and only returns 1 if the user has execute permission to
288 273 the file. This callback function can thus be used to lookup or complete command
289 274 names found in the directories listed in the user's \fBPATH\fR environment
290 275 variable. The example program above provides a demonstration of this.
291 276 .sp
292 277 .LP
293 278 Beware that if somebody tries to complete an empty string, your callback will
294 279 get called once for every file in the cache, which could number in the
↓ open down ↓ |
18 lines elided |
↑ open up ↑ |
295 280 thousands. If your callback does anything time consuming, this could result in
296 281 an unacceptable delay for the user, so callbacks should be kept short.
297 282 .sp
298 283 .LP
299 284 To improve performance, whenever one of these callbacks is called, the choice
300 285 that it makes is cached, and the next time the corresponding file is looked up,
301 286 instead of calling the callback again, the cached record of whether it was
302 287 accepted or rejected is used. Thus if somebody tries to complete an empty
303 288 string, and hits tab a second time when nothing appears to happen, there will
304 289 only be one long delay, since the second pass will operate entirely from the
305 -cached dispositions of the files. These cached dipositions are discarded
290 +cached dispositions of the files. These cached dispositions are discarded
306 291 whenever \fBpca_scan_path()\fR is called, and whenever \fBpca_set_check_fn()\fR
307 292 is called with changed callback function or \fIdata\fR arguments.
308 293 .SS "Error Handling"
309 -.sp
310 -.LP
311 294 If \fBpca_scan_path()\fR reports that an error occurred by returning 1, you can
312 295 obtain a terse description of the error by calling
313 296 \fBpca_last_error\fR(\fIpc\fR). This returns an internal string containing an
314 297 error message.
315 298 .SS "Cleaning Up"
316 -.sp
317 -.LP
318 299 Once you have finished using a \fBPathCache\fR object, you can reclaim its
319 300 resources by passing it to the \fBdel_PathCache()\fR destructor function. This
320 301 takes a pointer to one of these objects, and always returns \fINULL\fR.
321 302 .SS "Thread Safety"
322 -.sp
323 -.LP
324 303 It is safe to use the facilities of this module in multiple threads, provided
325 304 that each thread uses a separately allocated \fBPathCache\fR object. In other
326 305 words, if two threads want to do path searching, they should each call
327 306 \fBnew_PathCache()\fR to allocate their own caches.
328 307 .SH ATTRIBUTES
329 -.sp
330 -.LP
331 308 See \fBattributes\fR(5) for descriptions of the following attributes:
332 309 .sp
333 310
334 311 .sp
335 312 .TS
336 313 box;
337 314 c | c
338 315 l | l .
339 316 ATTRIBUTE TYPE ATTRIBUTE VALUE
340 317 _
341 318 Interface Stability Evolving
342 319 _
343 320 MT-Level MT-Safe
344 321 .TE
345 322
346 323 .SH SEE ALSO
347 -.sp
348 -.LP
349 324 \fBcpl_complete_word\fR(3TECLA), \fBef_expand_file\fR(3TECLA),
350 325 \fBgl_get_line\fR(3TECLA), \fBlibtecla\fR(3LIB), \fBattributes\fR(5)
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX