1 /*********************************************************************** 2 * * 3 * This software is part of the ast package * 4 * Copyright (c) 1985-2012 AT&T Intellectual Property * 5 * and is licensed under the * 6 * Eclipse Public License, Version 1.0 * 7 * by AT&T Intellectual Property * 8 * * 9 * A copy of the License is available at * 10 * http://www.eclipse.org/org/documents/epl-v10.html * 11 * (with md5 checksum b35adb5213ca9657e911e9befb180842) * 12 * * 13 * Information and Software Systems Research * 14 * AT&T Research * 15 * Florham Park NJ * 16 * * 17 * Glenn Fowler <gsf@research.att.com> * 18 * David Korn <dgk@research.att.com> * 19 * Phong Vo <kpv@research.att.com> * 20 * * 21 ***********************************************************************/ 22 #pragma prototyped 23 /* 24 * Glenn Fowler 25 * AT&T Research 26 * 27 * string vector load support 28 */ 29 30 #include <ast.h> 31 #include <ls.h> 32 #include <vecargs.h> 33 34 /* 35 * load a string vector from lines in file 36 */ 37 38 char** vecfile(const char * file)39vecfile(const char* file) 40 { 41 register int n; 42 register char* buf; 43 register char** vec; 44 int fd; 45 struct stat st; 46 47 vec = 0; 48 if ((fd = open(file, O_RDONLY|O_cloexec)) >= 0) 49 { 50 if (!fstat(fd, &st) && S_ISREG(st.st_mode) && (n = st.st_size) > 0 && (buf = newof(0, char, n + 1, 0))) 51 { 52 if (read(fd, buf, n) == n) 53 { 54 buf[n] = 0; 55 vec = vecload(buf); 56 } 57 if (!vec) free(buf); 58 } 59 close(fd); 60 } 61 return(vec); 62 } 63