Branch data Line data Source code
1 : : #line 2 "@srcdir@/lib/dirs.c.in"
2 : : /*
3 : : * Copyright (c) 2008, 2009, 2010, 2011, 2012, 2013 Nicira, Inc.
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 : : #include "ovs-thread.h"
22 : : #include "util.h"
23 : :
24 : : struct directory {
25 : : const char *value; /* Actual value; NULL if not yet determined. */
26 : : const char *default_value; /* Default value. */
27 : : const char *var_name; /* Environment variable to override default. */
28 : : struct ovsthread_once once; /* Ensures 'value' gets initialized once. */
29 : : };
30 : :
31 : : static const char *
32 : 92364 : get_dir(struct directory *d)
33 : : {
34 [ + + ]: 92364 : if (ovsthread_once_start(&d->once)) {
35 : 24927 : d->value = getenv(d->var_name);
36 [ + - ][ - + ]: 24927 : if (!d->value || !d->value[0]) {
37 : 0 : d->value = d->default_value;
38 : : }
39 : 24927 : ovsthread_once_done(&d->once);
40 : : }
41 : 92364 : return d->value;
42 : : }
43 : :
44 : : const char *
45 : 0 : ovs_sysconfdir(void)
46 : : {
47 : : static struct directory d = {
48 : : NULL, @sysconfdir@, "OVS_SYSCONFDIR", OVSTHREAD_ONCE_INITIALIZER
49 : : };
50 : :
51 : 0 : return get_dir(&d);
52 : : }
53 : :
54 : : const char *
55 : 0 : ovs_pkgdatadir(void)
56 : : {
57 : : static struct directory d = {
58 : : NULL, @pkgdatadir@, "OVS_PKGDATADIR", OVSTHREAD_ONCE_INITIALIZER
59 : : };
60 : :
61 : 0 : return get_dir(&d);
62 : : }
63 : :
64 : : const char *
65 : 90771 : ovs_rundir(void)
66 : : {
67 : : static struct directory d = {
68 : : NULL, @RUNDIR@, "OVS_RUNDIR", OVSTHREAD_ONCE_INITIALIZER
69 : : };
70 : :
71 : 90771 : return get_dir(&d);
72 : : }
73 : :
74 : : const char *
75 : 1593 : ovs_logdir(void)
76 : : {
77 : : static struct directory d = {
78 : : NULL, @LOGDIR@, "OVS_LOGDIR", OVSTHREAD_ONCE_INITIALIZER
79 : : };
80 : :
81 : 1593 : return get_dir(&d);
82 : : }
83 : :
84 : : const char *
85 : 630 : ovs_dbdir(void)
86 : : {
87 : : static struct ovsthread_once once = OVSTHREAD_ONCE_INITIALIZER;
88 : : static const char *dbdir;
89 : :
90 [ + - ]: 630 : if (ovsthread_once_start(&once)) {
91 : 630 : dbdir = getenv("OVS_DBDIR");
92 [ + - ][ - + ]: 630 : if (!dbdir || !dbdir[0]) {
93 : 0 : char *sysconfdir = getenv("OVS_SYSCONFDIR");
94 : :
95 : 0 : dbdir = (sysconfdir
96 : : ? xasprintf("%s/openvswitch", sysconfdir)
97 [ # # ]: 0 : : @DBDIR@);
98 : : }
99 : 630 : ovsthread_once_done(&once);
100 : : }
101 : 630 : return dbdir;
102 : : }
103 : :
104 : : const char *
105 : 0 : ovs_bindir(void)
106 : : {
107 : : static struct directory d = {
108 : : NULL, @bindir@, "OVS_BINDIR", OVSTHREAD_ONCE_INITIALIZER
109 : : };
110 : :
111 : 0 : return get_dir(&d);
112 : : }
|