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