xref: /dragonfly/sys/sys/varsym.h (revision af79c6e5)
1 /*
2  * SYS/VARSYM.H
3  *
4  *	Implements structures used for variant symlink support.
5  *
6  * $DragonFly: src/sys/sys/varsym.h,v 1.2 2003/11/09 20:29:57 dillon Exp $
7  */
8 
9 #ifndef _SYS_VARSYM_H_
10 #define _SYS_VARSYM_H_
11 
12 /*#if defined(_KERNEL) || defined(_KERNEL_STRUCTURES)  FUTURE */
13 #if 1
14 
15 #ifndef _SYS_QUEUE_H_
16 #include <sys/queue.h>		/* TAILQ_* macros */
17 #endif
18 
19 struct varsym {
20     int		vs_refs;	/* a lot of sharing occurs */
21     int		vs_namelen;
22     char	*vs_name;	/* variable name */
23     char	*vs_data;	/* variable contents */
24 };
25 
26 typedef struct varsym	*varsym_t;
27 
28 struct varsyment {
29     TAILQ_ENTRY(varsyment) ve_entry;
30     varsym_t	ve_sym;
31 };
32 
33 struct varsymset {
34     TAILQ_HEAD(, varsyment) vx_queue;
35     int		vx_setsize;
36 };
37 
38 #endif	/* _KERNEL || _KERNEL_STRUCTURES */
39 
40 #define VARSYM_PROC	1
41 #define VARSYM_USER	2
42 #define VARSYM_SYS	3
43 
44 #define VARSYM_PROC_MASK	(1 << VARSYM_PROC)
45 #define VARSYM_USER_MASK	(1 << VARSYM_USER)
46 #define VARSYM_SYS_MASK		(1 << VARSYM_SYS)
47 #define VARSYM_ALL_MASK		(VARSYM_PROC_MASK|VARSYM_USER_MASK|VARSYM_SYS_MASK)
48 
49 #define MAXVARSYM_NAME	64
50 #define MAXVARSYM_DATA	256
51 #define MAXVARSYM_SET	8192
52 
53 #ifdef _KERNEL
54 
55 varsym_t varsymfind(int mask, const char *name, int namelen);
56 int	varsymmake(int level, const char *name, const char *data);
57 void	varsymdrop(varsym_t var);
58 void	varsymset_init(struct varsymset *varsymset, struct varsymset *copy);
59 void	varsymset_clean(struct varsymset *varsymset);
60 int	varsymreplace(char *cp, int linklen, int maxlen);
61 
62 #endif	/* _KERNEL */
63 
64 #endif
65