Merge branch 'master' of /home/aggelos/devel/dfly/dfly.git/
[dragonfly.git] / sys / sys / varsym.h
1 /*
2  * SYS/VARSYM.H
3  *
4  *      Implements structures used for variant symlink support.
5  * 
6  * $DragonFly: src/sys/sys/varsym.h,v 1.7 2008/02/23 00:59:23 swildner 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 #include <sys/lock.h>
20
21 struct varsym {
22     int         vs_refs;        /* a lot of sharing occurs */
23     int         vs_namelen;
24     char        *vs_name;       /* variable name */
25     char        *vs_data;       /* variable contents */
26 };
27
28 typedef struct varsym   *varsym_t;
29
30 struct varsyment {
31     TAILQ_ENTRY(varsyment) ve_entry;
32     varsym_t    ve_sym;
33 };
34
35 struct varsymset {
36     TAILQ_HEAD(, varsyment) vx_queue;
37     int         vx_setsize;
38     struct lock vx_lock;
39 };
40
41 #endif  /* _KERNEL || _KERNEL_STRUCTURES */
42
43 #define VARSYM_PROC     1
44 #define VARSYM_USER     2
45 #define VARSYM_SYS      3
46 #define VARSYM_PRISON   4       /* used internally */
47
48 #define VARSYM_PROC_MASK        (1 << VARSYM_PROC)
49 #define VARSYM_USER_MASK        (1 << VARSYM_USER)
50 #define VARSYM_SYS_MASK         (1 << VARSYM_SYS)
51 #define VARSYM_ALL_MASK         (VARSYM_PROC_MASK|VARSYM_USER_MASK|VARSYM_SYS_MASK)
52
53 #define MAXVARSYM_NAME  64
54 #define MAXVARSYM_DATA  256
55 #define MAXVARSYM_SET   16384
56
57 #ifdef _KERNEL
58
59 varsym_t varsymfind(int mask, const char *name, int namelen);
60 int     varsymmake(int level, const char *name, const char *data);
61 void    varsymdrop(varsym_t var);
62 void    varsymset_init(struct varsymset *varsymset, struct varsymset *copy);
63 void    varsymset_clean(struct varsymset *varsymset);
64 int     varsymreplace(char *cp, int linklen, int maxlen);
65
66 #endif  /* _KERNEL */
67
68 #endif