test-readenv.c revision 178826
1/*
2 * Copyright (c) 2005 Kungliga Tekniska H�gskolan
3 * (Royal Institute of Technology, Stockholm, Sweden).
4 * All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
8 * are met:
9 *
10 * 1. Redistributions of source code must retain the above copyright
11 *    notice, this list of conditions and the following disclaimer.
12 *
13 * 2. Redistributions in binary form must reproduce the above copyright
14 *    notice, this list of conditions and the following disclaimer in the
15 *    documentation and/or other materials provided with the distribution.
16 *
17 * 3. Neither the name of the Institute nor the names of its contributors
18 *    may be used to endorse or promote products derived from this software
19 *    without specific prior written permission.
20 *
21 * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
22 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24 * ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
25 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
26 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
27 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
28 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
30 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
31 * SUCH DAMAGE.
32 */
33
34#ifdef HAVE_CONFIG_H
35#include <config.h>
36RCSID("$Id: test-readenv.c 20868 2007-06-03 21:02:04Z lha $");
37#endif
38
39#include "roken.h"
40#include "test-mem.h"
41
42char *s1 = "VAR1=VAL1#comment\n\
43VAR2=VAL2 VAL2 #comment\n\
44#this another comment\n\
45\n\
46VAR3=FOO";
47
48char *s2 = "VAR1=ENV2\n\
49";
50
51static void
52make_file(char *tmpl, size_t l)
53{
54    int fd;
55    strlcpy(tmpl, "env.XXXXXX", l);
56    fd = mkstemp(tmpl);
57    if(fd < 0)
58	err(1, "mkstemp");
59    close(fd);
60}
61
62static void
63write_file(const char *fn, const char *s)
64{
65    FILE *f;
66    f = fopen(fn, "w");
67    if(f == NULL) {
68	unlink(fn);
69	err(1, "fopen");
70    }
71    if(fwrite(s, 1, strlen(s), f) != strlen(s))
72	err(1, "short write");
73    if(fclose(f) != 0) {
74	unlink(fn);
75	err(1, "fclose");
76    }
77}
78
79int
80main(int argc, char **argv)
81{
82    char **env = NULL;
83    int count = 0;
84    char fn[MAXPATHLEN];
85    int error = 0;
86
87    make_file(fn, sizeof(fn));
88
89    write_file(fn, s1);
90    count = read_environment(fn, &env);
91    if(count != 3) {
92	warnx("test 1: variable count %d != 3", count);
93	error++;
94    }
95
96    write_file(fn, s2);
97    count = read_environment(fn, &env);
98    if(count != 1) {
99	warnx("test 2: variable count %d != 1", count);
100	error++;
101    }
102
103    unlink(fn);
104    count = read_environment(fn, &env);
105    if(count != 0) {
106	warnx("test 3: variable count %d != 0", count);
107	error++;
108    }
109    for(count = 0; env && env[count]; count++);
110    if(count != 3) {
111	warnx("total variable count %d != 3", count);
112	error++;
113    }
114    free_environment(env);
115
116
117    return error;
118}
119