netdev: Clean up and refactor packet receive interface.
[openvswitch] / lib / dirs.c.in
1 #line 2 "@srcdir@/lib/dirs.c.in"
2 /*
3  * Copyright (c) 2008, 2009, 2010, 2011 Nicira Networks.
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at:
8  *
9  *     http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  */
17
18 #include <config.h>
19 #include "dirs.h"
20 #include <stdlib.h>
21
22 struct directory {
23     const char *value;          /* Actual value; NULL if not yet determined. */
24     const char *default_value;  /* Default value. */
25     const char *var_name;       /* Environment variable to override default. */
26 };
27
28 static const char *
29 get_dir(struct directory *d)
30 {
31     if (!d->value) {
32         d->value = getenv(d->var_name);
33         if (!d->value || !d->value[0]) {
34             d->value = d->default_value;
35         }
36     }
37     return d->value;
38 }
39
40 const char *
41 ovs_sysconfdir(void)
42 {
43     static struct directory d = { NULL, @sysconfdir@, "OVS_SYSCONFDIR" };
44     return get_dir(&d);
45 }
46
47 const char *
48 ovs_pkgdatadir(void)
49 {
50     static struct directory d = { NULL, @pkgdatadir@, "OVS_PKGDATADIR" };
51     return get_dir(&d);
52 }
53
54 const char *
55 ovs_rundir(void)
56 {
57     static struct directory d = { NULL, @RUNDIR@, "OVS_RUNDIR" };
58     return get_dir(&d);
59 }
60
61 const char *
62 ovs_logdir(void)
63 {
64     static struct directory d = { NULL, @LOGDIR@, "OVS_LOGDIR" };
65     return get_dir(&d);
66 }
67
68 const char *
69 ovs_bindir(void)
70 {
71     static struct directory d = { NULL, @bindir@, "OVS_BINDIR" };
72     return get_dir(&d);
73 }