1/* Licensed to the Apache Software Foundation (ASF) under one or more
2 * contributor license agreements.  See the NOTICE file distributed with
3 * this work for additional information regarding copyright ownership.
4 * The ASF licenses this file to You under the Apache License, Version 2.0
5 * (the "License"); you may not use this file except in compliance with
6 * the License.  You may obtain a copy of the License at
7 *
8 *     http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17#define APR_WANT_STRFUNC
18#include "apr_want.h"
19#include "apr.h"
20#include "apr_private.h"
21#include "apr_env.h"
22#include "apr_strings.h"
23
24#if APR_HAVE_UNISTD_H
25#include <unistd.h>
26#endif
27#if APR_HAVE_STDLIB_H
28#include <stdlib.h>
29#endif
30
31APR_DECLARE(apr_status_t) apr_env_get(char **value,
32                                      const char *envvar,
33                                      apr_pool_t *pool)
34{
35#ifdef HAVE_GETENV
36
37    char *val = getenv(envvar);
38    if (!val)
39        return APR_ENOENT;
40    *value = val;
41    return APR_SUCCESS;
42
43#else
44    return APR_ENOTIMPL;
45#endif
46}
47
48
49APR_DECLARE(apr_status_t) apr_env_set(const char *envvar,
50                                      const char *value,
51                                      apr_pool_t *pool)
52{
53#if defined(HAVE_SETENV)
54
55    if (0 > setenv(envvar, value, 1))
56        return APR_ENOMEM;
57    return APR_SUCCESS;
58
59#elif defined(HAVE_PUTENV)
60
61    if (0 > putenv(apr_pstrcat(pool, envvar, "=", value, NULL)))
62        return APR_ENOMEM;
63    return APR_SUCCESS;
64
65#else
66    return APR_ENOTIMPL;
67#endif
68}
69
70
71APR_DECLARE(apr_status_t) apr_env_delete(const char *envvar, apr_pool_t *pool)
72{
73#ifdef HAVE_UNSETENV
74
75    unsetenv(envvar);
76    return APR_SUCCESS;
77
78#else
79    /* hint: some platforms allow envvars to be unset via
80     *       putenv("varname")...  that isn't Single Unix spec,
81     *       but if your platform doesn't have unsetenv() it is
82     *       worth investigating and potentially adding a
83     *       configure check to decide when to use that form of
84     *       putenv() here
85     */
86    return APR_ENOTIMPL;
87#endif
88}
89