]>
Commit | Line | Data |
---|---|---|
da5e151f BB |
1 | /* |
2 | * CDDL HEADER START | |
3 | * | |
4 | * The contents of this file are subject to the terms of the | |
5 | * Common Development and Distribution License (the "License"). | |
6 | * You may not use this file except in compliance with the License. | |
7 | * | |
8 | * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE | |
9 | * or http://www.opensolaris.org/os/licensing. | |
10 | * See the License for the specific language governing permissions | |
11 | * and limitations under the License. | |
12 | * | |
13 | * When distributing Covered Code, include this CDDL HEADER in each | |
14 | * file and include the License file at usr/src/OPENSOLARIS.LICENSE. | |
15 | * If applicable, add the following below this CDDL HEADER, with the | |
16 | * fields enclosed by brackets "[]" replaced with your own identifying | |
17 | * information: Portions Copyright [yyyy] [name of copyright owner] | |
18 | * | |
19 | * CDDL HEADER END | |
20 | */ | |
21 | /* | |
22 | * Copyright 2007 Sun Microsystems, Inc. All rights reserved. | |
23 | * Use is subject to license terms. | |
24 | */ | |
25 | ||
26 | /* Copyright (c) 1983, 1984, 1985, 1986, 1987, 1988, 1989 AT&T */ | |
27 | /* All Rights Reserved */ | |
28 | ||
29 | /* | |
30 | * University Copyright- Copyright (c) 1982, 1986, 1988 | |
31 | * The Regents of the University of California | |
32 | * All Rights Reserved | |
33 | * | |
34 | * University Acknowledgment- Portions of this document are derived from | |
35 | * software developed by the University of California, Berkeley, and its | |
36 | * contributors. | |
37 | */ | |
38 | ||
39 | ||
40 | #include <sys/types.h> | |
da5e151f BB |
41 | #include <sys/pathname.h> |
42 | #include <sys/kmem.h> | |
93ce2b4c | 43 | #include <sys/sysmacros.h> |
da5e151f BB |
44 | |
45 | /* | |
46 | * Pathname utilities. | |
47 | * | |
48 | * In translating file names we copy each argument file | |
49 | * name into a pathname structure where we operate on it. | |
50 | * Each pathname structure can hold "pn_bufsize" characters | |
51 | * including a terminating null, and operations here support | |
52 | * allocating and freeing pathname structures, fetching | |
53 | * strings from user space, getting the next character from | |
54 | * a pathname, combining two pathnames (used in symbolic | |
55 | * link processing), and peeling off the first component | |
56 | * of a pathname. | |
57 | */ | |
58 | ||
59 | /* | |
60 | * Allocate contents of pathname structure. Structure is typically | |
61 | * an automatic variable in calling routine for convenience. | |
62 | * | |
63 | * May sleep in the call to kmem_alloc() and so must not be called | |
64 | * from interrupt level. | |
65 | */ | |
66 | void | |
67 | pn_alloc(struct pathname *pnp) | |
68 | { | |
69 | pn_alloc_sz(pnp, MAXPATHLEN); | |
70 | } | |
71 | void | |
72 | pn_alloc_sz(struct pathname *pnp, size_t sz) | |
73 | { | |
74 | pnp->pn_path = pnp->pn_buf = kmem_alloc(sz, KM_SLEEP); | |
75 | pnp->pn_pathlen = 0; | |
76 | pnp->pn_bufsize = sz; | |
77 | } | |
78 | ||
79 | /* | |
80 | * Free pathname resources. | |
81 | */ | |
82 | void | |
83 | pn_free(struct pathname *pnp) | |
84 | { | |
85 | /* pn_bufsize is usually MAXPATHLEN, but may not be */ | |
86 | kmem_free(pnp->pn_buf, pnp->pn_bufsize); | |
87 | pnp->pn_path = pnp->pn_buf = NULL; | |
88 | pnp->pn_pathlen = pnp->pn_bufsize = 0; | |
89 | } |