~james-page/ubuntu/saucy/openvswitch/1.12-snapshot

« back to all changes in this revision

Viewing changes to lib/dirs.c.in

  • Committer: James Page
  • Date: 2013-08-21 10:16:57 UTC
  • mfrom: (1.1.20)
  • Revision ID: james.page@canonical.com-20130821101657-3o0z0qeiv5zkwlzi
New upstream snapshot

Show diffs side-by-side

added added

removed removed

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