Autogenerate namei.h from namei.src to get duplicate values for some
less-than-optimally namespaced macros (e.g. LOOKUP -> NAMEI_LOOKUP).
This commit is contained in:
parent
e59f9f3e20
commit
a768213636
@ -1,4 +1,6 @@
|
||||
# $NetBSD: Makefile,v 1.95 2007/08/04 11:03:03 ad Exp $
|
||||
# $NetBSD: Makefile,v 1.96 2007/08/15 14:08:11 pooka Exp $
|
||||
|
||||
.include <bsd.sys.mk>
|
||||
|
||||
INCSDIR= /usr/include/sys
|
||||
|
||||
@ -51,4 +53,7 @@ INCSYMLINKS=\
|
||||
|
||||
INCSYMLINKS+= ../soundcard.h ${INCSDIR}/soundcard.h
|
||||
|
||||
namei: namei.src gennameih.awk
|
||||
${AWK} -f gennameih.awk < namei.src > namei.h
|
||||
|
||||
.include <bsd.kinc.mk>
|
||||
|
82
sys/sys/gennameih.awk
Normal file
82
sys/sys/gennameih.awk
Normal file
@ -0,0 +1,82 @@
|
||||
#!/usr/bin/awk -F
|
||||
#
|
||||
# $NetBSD: gennameih.awk,v 1.1 2007/08/15 14:08:11 pooka Exp $
|
||||
#
|
||||
# Copyright (c) 2007 The NetBSD Foundation, Inc.
|
||||
# All rights reserved.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions
|
||||
# are met:
|
||||
# 1. Redistributions of source code must retain the above copyright
|
||||
# notice, this list of conditions and the following disclaimer.
|
||||
# 2. Redistributions in binary form must reproduce the above copyright
|
||||
# notice, this list of conditions and the following disclaimer in the
|
||||
# documentation and/or other materials provided with the distribution.
|
||||
# 3. All advertising materials mentioning features or use of this software
|
||||
# must display the following acknowledgement:
|
||||
# This product includes software developed by the NetBSD
|
||||
# Foundation, Inc. and its contributors.
|
||||
# 4. Neither the name of The NetBSD Foundation nor the names of its
|
||||
# contributors may be used to endorse or promote products derived
|
||||
# from this software without specific prior written permission.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
|
||||
# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
|
||||
# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
|
||||
# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
# POSSIBILITY OF SUCH DAMAGE.
|
||||
#
|
||||
|
||||
function getrcsid(idstr) {
|
||||
sub("^[^$]*\\$", "", idstr);
|
||||
sub("\\$.*", "", idstr);
|
||||
|
||||
return idstr;
|
||||
}
|
||||
|
||||
NR == 1 {
|
||||
printf "/*\t\$NetBSD\$\t*/\n\n"
|
||||
|
||||
myvers="$NetBSD: gennameih.awk,v 1.1 2007/08/15 14:08:11 pooka Exp $"
|
||||
|
||||
print "/*"
|
||||
print " * WARNING: GENERATED FILE. DO NOT EDIT"
|
||||
print " * (edit namei.src and run make namei)"
|
||||
printf " * by: %s\n", getrcsid(myvers);
|
||||
printf " * from: %s\n", getrcsid($0);
|
||||
print " */"
|
||||
|
||||
next
|
||||
|
||||
}
|
||||
|
||||
/^NAMEIFL/ {
|
||||
sub("NAMEIFL", "#define", $0);
|
||||
print $0;
|
||||
|
||||
sub("^", "NAMEI_", $2)
|
||||
nameifl[i++] = "#define " $2 "\t" $3;
|
||||
next
|
||||
}
|
||||
|
||||
{
|
||||
print $0
|
||||
}
|
||||
|
||||
END {
|
||||
printf "\n/* Definitions match above, but with NAMEI_ prefix */\n"
|
||||
|
||||
# print flags in the same order
|
||||
for (j = 0; j < i; j++) {
|
||||
print nameifl[j]
|
||||
}
|
||||
|
||||
printf "\n#endif /* !_SYS_NAMEI_H_ */\n"
|
||||
}
|
224
sys/sys/namei.src
Normal file
224
sys/sys/namei.src
Normal file
@ -0,0 +1,224 @@
|
||||
/* $NetBSD: namei.src,v 1.1 2007/08/15 14:08:11 pooka Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1985, 1989, 1991, 1993
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. Neither the name of the University nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* @(#)namei.h 8.5 (Berkeley) 8/20/94
|
||||
*/
|
||||
|
||||
#ifndef _SYS_NAMEI_H_
|
||||
#define _SYS_NAMEI_H_
|
||||
|
||||
#include <sys/queue.h>
|
||||
|
||||
#ifdef _KERNEL
|
||||
/*
|
||||
* Encapsulation of namei parameters.
|
||||
*/
|
||||
struct nameidata {
|
||||
/*
|
||||
* Arguments to namei/lookup.
|
||||
*/
|
||||
const char *ni_dirp; /* pathname pointer */
|
||||
enum uio_seg ni_segflg; /* location of pathname */
|
||||
/*
|
||||
* Arguments to lookup.
|
||||
*/
|
||||
struct vnode *ni_startdir; /* starting directory */
|
||||
struct vnode *ni_rootdir; /* logical root directory */
|
||||
struct vnode *ni_erootdir; /* emulation root directory */
|
||||
/*
|
||||
* Results: returned from/manipulated by lookup
|
||||
*/
|
||||
struct vnode *ni_vp; /* vnode of result */
|
||||
struct vnode *ni_dvp; /* vnode of intermediate directory */
|
||||
/*
|
||||
* Shared between namei and lookup/commit routines.
|
||||
*/
|
||||
size_t ni_pathlen; /* remaining chars in path */
|
||||
const char *ni_next; /* next location in pathname */
|
||||
u_long ni_loopcnt; /* count of symlinks encountered */
|
||||
/*
|
||||
* Lookup parameters: this structure describes the subset of
|
||||
* information from the nameidata structure that is passed
|
||||
* through the VOP interface.
|
||||
*/
|
||||
struct componentname {
|
||||
/*
|
||||
* Arguments to lookup.
|
||||
*/
|
||||
u_long cn_nameiop; /* namei operation */
|
||||
u_long cn_flags; /* flags to namei */
|
||||
struct lwp *cn_lwp; /* lwp requesting lookup */
|
||||
kauth_cred_t cn_cred; /* credentials */
|
||||
/*
|
||||
* Shared between lookup and commit routines.
|
||||
*/
|
||||
char *cn_pnbuf; /* pathname buffer */
|
||||
const char *cn_nameptr; /* pointer to looked up name */
|
||||
long cn_namelen; /* length of looked up component */
|
||||
u_long cn_hash; /* hash value of looked up name */
|
||||
long cn_consume; /* chars to consume in lookup() */
|
||||
} ni_cnd;
|
||||
};
|
||||
|
||||
/*
|
||||
* namei operations
|
||||
*/
|
||||
NAMEIFL LOOKUP 0 /* perform name lookup only */
|
||||
NAMEIFL CREATE 1 /* setup for file creation */
|
||||
NAMEIFL DELETE 2 /* setup for file deletion */
|
||||
NAMEIFL RENAME 3 /* setup for file renaming */
|
||||
NAMEIFL OPMASK 3 /* mask for operation */
|
||||
/*
|
||||
* namei operational modifier flags, stored in ni_cnd.cn_flags
|
||||
*/
|
||||
NAMEIFL LOCKLEAF 0x0004 /* lock inode on return */
|
||||
NAMEIFL LOCKPARENT 0x0008 /* want parent vnode returned locked */
|
||||
NAMEIFL NOCACHE 0x0020 /* name must not be left in cache */
|
||||
NAMEIFL FOLLOW 0x0040 /* follow symbolic links */
|
||||
NAMEIFL NOFOLLOW 0x0000 /* do not follow symbolic links (pseudo) */
|
||||
NAMEIFL TRYEMULROOT 0x0010 /* try relative to emulation root first */
|
||||
NAMEIFL EMULROOTSET 0x0080 /* emulation root already in ni_erootdir */
|
||||
NAMEIFL MODMASK 0x00fc /* mask of operational modifiers */
|
||||
/*
|
||||
* Namei parameter descriptors.
|
||||
*
|
||||
* SAVENAME may be set by either the callers of namei or by VOP_LOOKUP.
|
||||
* If the caller of namei sets the flag (for example execve wants to
|
||||
* know the name of the program that is being executed), then it must
|
||||
* free the buffer. If VOP_LOOKUP sets the flag, then the buffer must
|
||||
* be freed by either the commit routine or the VOP_ABORT routine.
|
||||
* SAVESTART is set only by the callers of namei. It implies SAVENAME
|
||||
* plus the addition of saving the parent directory that contains the
|
||||
* name in ni_startdir. It allows repeated calls to lookup for the
|
||||
* name being sought. The caller is responsible for releasing the
|
||||
* buffer and for vrele'ing ni_startdir.
|
||||
*/
|
||||
NAMEIFL NOCROSSMOUNT 0x0000100 /* do not cross mount points */
|
||||
NAMEIFL RDONLY 0x0000200 /* lookup with read-only semantics */
|
||||
NAMEIFL HASBUF 0x0000400 /* has allocated pathname buffer */
|
||||
NAMEIFL SAVENAME 0x0000800 /* save pathname buffer */
|
||||
NAMEIFL SAVESTART 0x0001000 /* save starting directory */
|
||||
NAMEIFL ISDOTDOT 0x0002000 /* current component name is .. */
|
||||
NAMEIFL MAKEENTRY 0x0004000 /* entry is to be added to name cache */
|
||||
NAMEIFL ISLASTCN 0x0008000 /* this is last component of pathname */
|
||||
NAMEIFL ISSYMLINK 0x0010000 /* symlink needs interpretation */
|
||||
NAMEIFL ISWHITEOUT 0x0020000 /* found whiteout */
|
||||
NAMEIFL DOWHITEOUT 0x0040000 /* do whiteouts */
|
||||
NAMEIFL REQUIREDIR 0x0080000 /* must be a directory */
|
||||
NAMEIFL CREATEDIR 0x0200000 /* trailing slashes are ok */
|
||||
NAMEIFL PARAMASK 0x03fff00 /* mask of parameter descriptors */
|
||||
/*
|
||||
* Initialization of an nameidata structure.
|
||||
*/
|
||||
#define NDINIT(ndp, op, flags, segflg, namep, l) { \
|
||||
(ndp)->ni_cnd.cn_nameiop = op; \
|
||||
(ndp)->ni_cnd.cn_flags = flags; \
|
||||
(ndp)->ni_segflg = segflg; \
|
||||
(ndp)->ni_dirp = namep; \
|
||||
(ndp)->ni_cnd.cn_lwp = l; \
|
||||
(ndp)->ni_cnd.cn_cred = l->l_cred; \
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* This structure describes the elements in the cache of recent
|
||||
* names looked up by namei. NCHNAMLEN is sized to make structure
|
||||
* size a power of two to optimize malloc's. Minimum reasonable
|
||||
* size is 15.
|
||||
*/
|
||||
|
||||
#define NCHNAMLEN 31 /* maximum name segment length we bother with */
|
||||
|
||||
struct namecache {
|
||||
LIST_ENTRY(namecache) nc_hash; /* hash chain */
|
||||
TAILQ_ENTRY(namecache) nc_lru; /* LRU chain */
|
||||
LIST_ENTRY(namecache) nc_vhash; /* directory hash chain */
|
||||
LIST_ENTRY(namecache) nc_dvlist;
|
||||
struct vnode *nc_dvp; /* vnode of parent of name */
|
||||
LIST_ENTRY(namecache) nc_vlist;
|
||||
struct vnode *nc_vp; /* vnode the name refers to */
|
||||
int nc_flags; /* copy of componentname's ISWHITEOUT */
|
||||
char nc_nlen; /* length of name */
|
||||
char nc_name[NCHNAMLEN]; /* segment name */
|
||||
};
|
||||
|
||||
#ifdef _KERNEL
|
||||
#include <sys/mallocvar.h>
|
||||
#include <sys/pool.h>
|
||||
|
||||
struct mount;
|
||||
|
||||
extern struct pool pnbuf_pool; /* pathname buffer pool */
|
||||
extern struct pool_cache pnbuf_cache; /* pathname buffer cache */
|
||||
|
||||
#define PNBUF_GET() pool_cache_get(&pnbuf_cache, PR_WAITOK)
|
||||
#define PNBUF_PUT(pnb) pool_cache_put(&pnbuf_cache, (pnb))
|
||||
|
||||
int namei(struct nameidata *);
|
||||
uint32_t namei_hash(const char *, const char **);
|
||||
int lookup(struct nameidata *);
|
||||
int relookup(struct vnode *, struct vnode **, struct componentname *);
|
||||
void cache_purge1(struct vnode *, const struct componentname *, int);
|
||||
#define PURGE_PARENTS 1
|
||||
#define PURGE_CHILDREN 2
|
||||
#define cache_purge(vp) cache_purge1((vp), NULL, PURGE_PARENTS|PURGE_CHILDREN)
|
||||
int cache_lookup(struct vnode *, struct vnode **, struct componentname *);
|
||||
int cache_lookup_raw(struct vnode *, struct vnode **,
|
||||
struct componentname *);
|
||||
int cache_revlookup(struct vnode *, struct vnode **, char **, char *);
|
||||
void cache_enter(struct vnode *, struct vnode *, struct componentname *);
|
||||
void nchinit(void);
|
||||
void nchreinit(void);
|
||||
void cache_purgevfs(struct mount *);
|
||||
void namecache_print(struct vnode *, void (*)(const char *, ...));
|
||||
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Stats on usefulness of namei caches.
|
||||
* XXX: should be 64-bit counters.
|
||||
*/
|
||||
struct nchstats {
|
||||
long ncs_goodhits; /* hits that we can really use */
|
||||
long ncs_neghits; /* negative hits that we can use */
|
||||
long ncs_badhits; /* hits we must drop */
|
||||
long ncs_falsehits; /* hits with id mismatch */
|
||||
long ncs_miss; /* misses */
|
||||
long ncs_long; /* long names that ignore cache */
|
||||
long ncs_pass2; /* names found with passes == 2 */
|
||||
long ncs_2passes; /* number of times we attempt it */
|
||||
long ncs_revhits; /* reverse-cache hits */
|
||||
long ncs_revmiss; /* reverse-cache misses */
|
||||
};
|
||||
|
||||
#ifdef _KERNEL
|
||||
extern struct nchstats nchstats;
|
||||
#endif
|
||||
/* #endif !_SYS_NAMEI_H_ (generated by gennameih.awk) */
|
Loading…
Reference in New Issue
Block a user