// $Id: filecfg-readentrystr.c 1616 2004-07-02 23:34:52Z ensc $ --*- c -*-- // Copyright (C) 2004 Enrico Scholz // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; version 2 of the License. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #ifdef HAVE_CONFIG_H # include #endif #include "filecfg.h" #include #include #include char * FileCfg_readEntryStr (PathInfo const *base, char const *file, bool allow_multiline, char const *dflt) { PathInfo filepath = { .d = file, .l = strlen(file) }; PathInfo path = *base; char path_buf[ENSC_PI_APPSZ(path, filepath)]; int fd = -1; off_t sz; char * res = 0; PathInfo_append(&path, &filepath, path_buf); fd = open(path.d, O_RDONLY); if (fd==-1) goto err; sz = lseek(fd, 0, SEEK_END); if (sz==-1 || lseek(fd, 0, SEEK_SET)==-1) goto err; if (sz>0 && sz0 && buf[sz-1]=='\n') --sz; buf[sz] = '\0'; } res = strdup(buf); } err: if (res==0 && dflt) res = strdup(dflt); if (fd!=-1) close(fd); return res; }