From: <enl...@li...> - 2000-10-30 22:01:15
|
Enlightenment CVS committal Author : mej Project : eterm Module : libast Log Message: Directory /cvsroot/enlightenment/eterm/libast added to the repository |
From: <enl...@li...> - 2000-10-30 22:02:46
|
Enlightenment CVS committal Author : mej Project : eterm Module : libast Added Files: .cvsignore Makefile.am README acconfig.h acinclude.m4 autogen.sh configure.in debug.c libast-config.in libast.h libast.spec.in libast_internal.h mem.c msgs.c snprintf.c strings.c Log Message: LibAST: Library of Assorted Spiffy Things. |
From: <enl...@li...> - 2000-11-10 03:11:13
|
Enlightenment CVS committal Author : mej Project : eterm Module : libast Modified Files: libast.h msgs.c Log Message: Thu Nov 9 19:09:48 PST 2000 Michael Jennings <me...@et...> Added name- and version-setting functions since we can't just use PACKAGE and VERSION any more. =================================================================== RCS file: /cvsroot/enlightenment/eterm/libast/libast.h,v retrieving revision 1.1 retrieving revision 1.2 diff -u -3 -r1.1 -r1.2 --- libast.h 2000/10/30 22:02:42 1.1 +++ libast.h 2000/11/10 03:11:07 1.2 @@ -309,6 +309,8 @@ /******************************** PROTOTYPES **********************************/ /* msgs.c */ +extern void libast_set_program_name(const char *); +extern void libast_set_program_version(const char *); extern int libast_dprintf(const char *, ...); extern void print_error(const char *fmt, ...); extern void print_warning(const char *fmt, ...); =================================================================== RCS file: /cvsroot/enlightenment/eterm/libast/msgs.c,v retrieving revision 1.1 retrieving revision 1.2 diff -u -3 -r1.1 -r1.2 --- msgs.c 2000/10/30 22:02:42 1.1 +++ msgs.c 2000/11/10 03:11:07 1.2 @@ -21,13 +21,33 @@ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -static const char cvs_ident[] = "$Id: msgs.c,v 1.1 2000/10/30 22:02:42 mej Exp $"; +static const char cvs_ident[] = "$Id: msgs.c,v 1.2 2000/11/10 03:11:07 mej Exp $"; #ifdef HAVE_CONFIG_H # include <config.h> #endif #include "libast_internal.h" + +static char *program_name = PACKAGE, *program_version = VERSION; + +void +libast_set_program_name(const char *progname) +{ + if (program_name && strcmp(program_name, PACKAGE)) { + FREE(program_name); + } + program_name = STRDUP(progname); +} + +void +libast_set_program_version(const char *progversion) +{ + if (program_version && strcmp(program_version, PACKAGE)) { + FREE(program_version); + } + program_version = STRDUP(progversion); +} int libast_dprintf(const char *format, ...) |
From: <enl...@li...> - 2000-11-10 03:13:08
|
Enlightenment CVS committal Author : mej Project : eterm Module : libast Modified Files: .cvsignore Added Files: ChangeLog Log Message: Oops. =================================================================== RCS file: /cvsroot/enlightenment/eterm/libast/.cvsignore,v retrieving revision 1.1 retrieving revision 1.2 diff -u -3 -r1.1 -r1.2 --- .cvsignore 2000/10/30 22:02:42 1.1 +++ .cvsignore 2000/11/10 03:13:08 1.2 @@ -1,7 +1,29 @@ +*.log +config.sub +config.cache +config.guess +configure +ltconfig +ltmain.sh Makefile Makefile.in +aclocal.m4 +config.status +config.h +libtool +stamp-h* +libast.spec +config.h.in +missing +mkinstalldirs +install-sh +libast*.tar.gz +*.sddf +Makefile +Makefile.in .deps .libs lib*.la *.da *.lo +libast-config |
From: <enl...@li...> - 2000-11-10 03:20:17
|
Enlightenment CVS committal Author : mej Project : eterm Module : libast Modified Files: ChangeLog msgs.c Log Message: Thu Nov 9 19:19:31 PST 2000 Michael Jennings <me...@et...> It usually helps if you finish writing the code BEFORE you commit it. =================================================================== RCS file: /cvsroot/enlightenment/eterm/libast/ChangeLog,v retrieving revision 1.1 retrieving revision 1.2 diff -u -3 -r1.1 -r1.2 --- ChangeLog 2000/11/10 03:13:08 1.1 +++ ChangeLog 2000/11/10 03:20:16 1.2 @@ -12,3 +12,8 @@ PACKAGE and VERSION any more. ------------------------------------------------------------------------------- +Thu Nov 9 19:19:31 PST 2000 Michael Jennings <me...@et...> + + It usually helps if you finish writing the code BEFORE you commit it. + +------------------------------------------------------------------------------- =================================================================== RCS file: /cvsroot/enlightenment/eterm/libast/msgs.c,v retrieving revision 1.2 retrieving revision 1.3 diff -u -3 -r1.2 -r1.3 --- msgs.c 2000/11/10 03:11:07 1.2 +++ msgs.c 2000/11/10 03:20:16 1.3 @@ -21,7 +21,7 @@ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -static const char cvs_ident[] = "$Id: msgs.c,v 1.2 2000/11/10 03:11:07 mej Exp $"; +static const char cvs_ident[] = "$Id: msgs.c,v 1.3 2000/11/10 03:20:16 mej Exp $"; #ifdef HAVE_CONFIG_H # include <config.h> @@ -43,7 +43,7 @@ void libast_set_program_version(const char *progversion) { - if (program_version && strcmp(program_version, PACKAGE)) { + if (program_version && strcmp(program_version, VERSION)) { FREE(program_version); } program_version = STRDUP(progversion); @@ -69,7 +69,7 @@ va_list arg_ptr; va_start(arg_ptr, fmt); - fprintf(stderr, PACKAGE ": Error: "); + fprintf(stderr, "%s: Error: ", program_name); vfprintf(stderr, fmt, arg_ptr); va_end(arg_ptr); } @@ -81,7 +81,7 @@ va_list arg_ptr; va_start(arg_ptr, fmt); - fprintf(stderr, PACKAGE ": Warning: "); + fprintf(stderr, "%s: Warning: ", program_name); vfprintf(stderr, fmt, arg_ptr); va_end(arg_ptr); } @@ -93,7 +93,7 @@ va_list arg_ptr; va_start(arg_ptr, fmt); - fprintf(stderr, PACKAGE ": FATAL: "); + fprintf(stderr, "%s: FATAL: ", program_name); vfprintf(stderr, fmt, arg_ptr); va_end(arg_ptr); exit(-1); |
From: <enl...@li...> - 2000-11-16 23:40:38
|
Enlightenment CVS committal Author : mej Project : eterm Module : libast Modified Files: ChangeLog mem.c Log Message: Thu Nov 16 16:38:55 PST 2000 Michael Jennings <me...@et...> Insure++ found a small logic error here that could result in a tiny leak under certain circumstances. =================================================================== RCS file: /cvsroot/enlightenment/eterm/libast/ChangeLog,v retrieving revision 1.2 retrieving revision 1.3 diff -u -3 -r1.2 -r1.3 --- ChangeLog 2000/11/10 03:20:16 1.2 +++ ChangeLog 2000/11/16 23:40:37 1.3 @@ -17,3 +17,9 @@ It usually helps if you finish writing the code BEFORE you commit it. ------------------------------------------------------------------------------- +Thu Nov 16 16:38:55 PST 2000 Michael Jennings <me...@et...> + + Insure++ found a small logic error here that could result in a tiny + leak under certain circumstances. + +------------------------------------------------------------------------------- =================================================================== RCS file: /cvsroot/enlightenment/eterm/libast/mem.c,v retrieving revision 1.1 retrieving revision 1.2 diff -u -3 -r1.1 -r1.2 --- mem.c 2000/10/30 22:02:42 1.1 +++ mem.c 2000/11/16 23:40:37 1.2 @@ -22,7 +22,7 @@ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -static const char cvs_ident[] = "$Id: mem.c,v 1.1 2000/10/30 22:02:42 mej Exp $"; +static const char cvs_ident[] = "$Id: mem.c,v 1.2 2000/11/16 23:40:37 mej Exp $"; #ifdef HAVE_CONFIG_H # include <config.h> @@ -109,10 +109,11 @@ D_MEM(("ERROR: File %s, line %d attempted to free variable %s (%8p) which was not allocated with MALLOC/REALLOC\n", filename, line, var, ptr)); return; } - memrec->cnt--; D_MEM(("Removing variable %s (%8p) of size %lu\n", var, ptr, p->size)); - memmove(p, p + 1, sizeof(ptr_t) * (memrec->cnt - (p - memrec->ptrs))); - memrec->ptrs = (ptr_t *) realloc(memrec->ptrs, sizeof(ptr_t) * memrec->cnt); + if ((--memrec->cnt) > 0) { + memmove(p, p + 1, sizeof(ptr_t) * (memrec->cnt - (p - memrec->ptrs))); + memrec->ptrs = (ptr_t *) realloc(memrec->ptrs, sizeof(ptr_t) * memrec->cnt); + } } static void |
From: <enl...@so...> - 2001-01-03 02:23:32
|
Enlightenment CVS committal Author : mej Project : eterm Module : libast Modified Files: ChangeLog Makefile.am libast.h Log Message: Tue Jan 2 18:22:25 PST 2001 Michael Jennings <me...@et...> Added file.c for any file routines I write. The first one is a secure temp file generator. If portability issues arise from non-POSIX systems, they will be addressed here. =================================================================== RCS file: /cvsroot/enlightenment/eterm/libast/ChangeLog,v retrieving revision 1.3 retrieving revision 1.4 diff -u -3 -r1.3 -r1.4 --- ChangeLog 2000/11/16 23:40:37 1.3 +++ ChangeLog 2001/01/03 02:23:30 1.4 @@ -23,3 +23,10 @@ leak under certain circumstances. ------------------------------------------------------------------------------- +Tue Jan 2 18:22:25 PST 2001 Michael Jennings <me...@et...> + + Added file.c for any file routines I write. The first one is a secure + temp file generator. If portability issues arise from non-POSIX + systems, they will be addressed here. + +------------------------------------------------------------------------------- =================================================================== RCS file: /cvsroot/enlightenment/eterm/libast/Makefile.am,v retrieving revision 1.1 retrieving revision 1.2 diff -u -3 -r1.1 -r1.2 --- Makefile.am 2000/10/30 22:02:42 1.1 +++ Makefile.am 2001/01/03 02:23:30 1.2 @@ -1,4 +1,4 @@ -# $Id: Makefile.am,v 1.1 2000/10/30 22:02:42 mej Exp $ +# $Id: Makefile.am,v 1.2 2001/01/03 02:23:30 mej Exp $ AUTOMAKE_OPTIONS = foreign @@ -6,7 +6,7 @@ lib_LTLIBRARIES = libast.la include_HEADERS = libast.h -libast_la_SOURCES = debug.c mem.c msgs.c strings.c snprintf.c libast.h libast_internal.h +libast_la_SOURCES = debug.c file.c mem.c msgs.c strings.c snprintf.c libast.h libast_internal.h LIBS = -lm =================================================================== RCS file: /cvsroot/enlightenment/eterm/libast/libast.h,v retrieving revision 1.2 retrieving revision 1.3 diff -u -3 -r1.2 -r1.3 --- libast.h 2000/11/10 03:11:07 1.2 +++ libast.h 2001/01/03 02:23:30 1.3 @@ -44,6 +44,7 @@ #include <stdlib.h> #include <time.h> #include <sys/types.h> +#include <sys/stat.h> #include <unistd.h> #include <ctype.h> #include <string.h> @@ -339,6 +340,9 @@ extern void libast_x_free_gc(const char *, const char *, unsigned long, Display *, GC); extern void libast_dump_gc_tables(void); #endif + +/* file.c */ +extern int libast_temp_file(char *, size_t); /* strings.c */ extern char *left_str(const char *, unsigned long); |
From: <enl...@so...> - 2001-01-03 02:23:54
|
Enlightenment CVS committal Author : mej Project : eterm Module : libast Added Files: file.c Log Message: It helps to add the file...dumbass. |
From: <enl...@li...> - 2001-05-05 06:58:19
|
Enlightenment CVS committal Author : mej Project : eterm Module : libast Dir : eterm/libast Modified Files: libast.h strings.c Log Message: Lots of work to do here. I'll talk more about it when it's done. =================================================================== RCS file: /cvsroot/enlightenment/eterm/libast/libast.h,v retrieving revision 1.3 retrieving revision 1.4 diff -u -3 -r1.3 -r1.4 --- libast.h 2001/01/03 02:23:30 1.3 +++ libast.h 2001/05/05 06:58:19 1.4 @@ -55,6 +55,9 @@ #elif defined(HAVE_MALLOC_H) # include <malloc.h> #endif +#ifdef HAVE_REGEX_H +# include <regex.h> +#endif #ifdef LIBAST_X11_SUPPORT # include <X11/Xatom.h> @@ -348,7 +351,12 @@ extern char *left_str(const char *, unsigned long); extern char *mid_str(const char *, unsigned long, unsigned long); extern char *right_str(const char *, unsigned long); +#if defined(HAVE_REGEX_H) extern unsigned char regexp_match(const char *, const char *); +extern unsigned char regexp_match_r(const char *str, const char *pattern, regex_t **rexp); +#endif +extern char **split(const char *, const char *); +extern char **split_regexp(const char *, const char *); extern char *get_word(unsigned long, const char *); extern char *get_pword(unsigned long, const char *); extern unsigned long num_words(const char *); =================================================================== RCS file: /cvsroot/enlightenment/eterm/libast/strings.c,v retrieving revision 1.1 retrieving revision 1.2 diff -u -3 -r1.1 -r1.2 --- strings.c 2000/10/30 22:02:42 1.1 +++ strings.c 2001/05/05 06:58:19 1.2 @@ -21,7 +21,7 @@ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -static const char cvs_ident[] = "$Id: strings.c,v 1.1 2000/10/30 22:02:42 mej Exp $"; +static const char cvs_ident[] = "$Id: strings.c,v 1.2 2001/05/05 06:58:19 mej Exp $"; #ifdef HAVE_CONFIG_H # include <config.h> @@ -113,37 +113,145 @@ } /* Returns TRUE if str matches regular expression pattern, FALSE otherwise */ -#if defined(HAVE_REGEX_H) || defined(IRIX) +#if defined(HAVE_REGEX_H) unsigned char regexp_match(register const char *str, register const char *pattern) { - register regex_t *rexp; + static regex_t *rexp = NULL; register int result; char errbuf[256]; - rexp = (regex_t *) MALLOC(sizeof(regex_t)); + if (!rexp) { + rexp = (regex_t *) MALLOC(sizeof(regex_t)); + } + + REQUIRE_RVAL(str != NULL, FALSE); + + if (pattern) { + if ((result = regcomp(rexp, pattern, REG_EXTENDED)) != 0) { + regerror(result, rexp, errbuf, 256); + fprintf(stderr, "Unable to compile regexp %s -- %s.\n", pattern, errbuf); + return (FALSE); + } + } - if ((result = regcomp(rexp, pattern, REG_EXTENDED)) != 0) { + if (((result = regexec(rexp, str, (size_t) 0, (regmatch_t *) NULL, 0)) + != 0) && (result != REG_NOMATCH)) { regerror(result, rexp, errbuf, 256); + fprintf(stderr, "Error testing input string %s -- %s.\n", str, errbuf); + return (FALSE); + } + return (!result); +} + +unsigned char +regexp_match_r(register const char *str, register const char *pattern, register regex_t **rexp) +{ + register int result; + char errbuf[256]; + + ASSERT_RVAL(rexp != NULL, FALSE); + if (*rexp == NULL) { + *rexp = (regex_t *) MALLOC(sizeof(regex_t)); + } + + if ((result = regcomp(*rexp, pattern, REG_EXTENDED)) != 0) { + regerror(result, *rexp, errbuf, 256); fprintf(stderr, "Unable to compile regexp %s -- %s.\n", pattern, errbuf); - FREE(rexp); + FREE(*rexp); return (FALSE); } - if (((result = regexec(rexp, str, (size_t) 0, (regmatch_t *) NULL, 0)) + if (((result = regexec(*rexp, str, (size_t) 0, (regmatch_t *) NULL, 0)) != 0) && (result != REG_NOMATCH)) { - regerror(result, rexp, errbuf, 256); + regerror(result, *rexp, errbuf, 256); fprintf(stderr, "Error testing input string %s -- %s.\n", str, errbuf); - FREE(rexp); return (FALSE); } - FREE(rexp); return (!result); } #endif +#define IS_DELIM(c) ((delim != NULL) ? (strchr(delim, (c)) != NULL) : (isspace(c))) +#define IS_QUOTE(c) (quote && quote == (c)) + +char ** +split(const char *delim, const char *str) +{ + char **slist; + register const char *pstr; + register char *pdest; + char quote = 0; + unsigned short cnt = 0; + unsigned long len; + + REQUIRE_RVAL(str != NULL, (char **) NULL); + + if ((slist = (char **) MALLOC(1)) == NULL) { + print_error("split(): Unable to allocate memory -- %s\n", strerror(errno)); + return ((char **) NULL); + } + + /* Before we do anything, skip leading "whitespace." */ + for (; IS_DELIM(*pstr); pstr++); + + /* The outermost for loop is where we traverse the string. Each new + word brings us back to the top where we resize our string list. */ + for (pstr = str; *pstr; cnt++) { + + /* First, resize the list to two bigger than our count. Why two? + One for the string we're about to do, and one for a trailing NULL. */ + if ((slist = (char **) REALLOC(slist, cnt + 2)) == NULL) { + print_error("split(): Unable to allocate memory -- %s\n", strerror(errno)); + return ((char **) NULL); + } + + /* The string we're about to create can't possibly be larger than the remainder + of the string we have yet to parse, so allocate that much space to start. */ + len = strlen(pstr) + 1; + if ((slist[cnt] = (char *) MALLOC(len)) == NULL) { + fprintf(stderr, "split(): Unable to allocate memory -- %s.\n", strerror(errno)); + return ((char **) NULL); + } + pdest = slist[cnt]; + + for (; *pstr && !IS_QUOTE(*pstr) && !IS_DELIM(*pstr); pdest++, pstr++) { + if (*pstr == '\"' || *pstr == '\'') { + if (quote) { + quote = 0; + } else { + quote = *pstr; + } + pstr++; + } else { + /* Handle any backslashes that are escaping delimiters or quotes. */ + if ((*pstr == '\\') && (IS_DELIM(*(pstr + 1)) || IS_QUOTE(*(pstr + 1)))) { + /* Incrementing pstr here moves us past the backslash so that the line + below will copy the next character to the new token, no questions asked. */ + pstr++; + } + *pdest = *pstr; + } + } + *pdest = 0; + + len = strlen(pdest) + 1; + slist[cnt] = (char *) REALLOC(pdest, len); + for (; IS_DELIM(*pstr); pstr++); + } + slist[cnt] = 0; + return slist; +} + +char ** +split_regexp(const char *regexp, const char *str) +{ + +} + /* Return malloc'd pointer to index-th word in str. "..." counts as 1 word. */ -#define IS_DELIM(c) (delim ? ((c) == delim) : (isspace(c))) +#undef IS_DELIM +#define IS_DELIM(c) (delim ? ((c) == delim) : isspace(c)) char * get_word(unsigned long index, const char *str) |
From: <enl...@li...> - 2001-05-07 07:53:40
|
Enlightenment CVS committal Author : mej Project : eterm Module : libast Dir : eterm/libast/test Log Message: Directory /cvsroot/enlightenment/eterm/libast/test added to the repository |
From: <enl...@li...> - 2001-05-07 07:54:40
|
Enlightenment CVS committal Author : mej Project : eterm Module : libast Dir : eterm/libast/test Added Files: .cvsignore Makefile.am test.c test.h Log Message: Still not done with this yet, but it's bedtime. More to come. |
From: <enl...@li...> - 2001-05-07 07:55:10
|
Enlightenment CVS committal Author : mej Project : eterm Module : libast Dir : eterm/libast Modified Files: Makefile.am configure.in file.c libast.h strings.c Log Message: Still not done with this yet, but it's bedtime. More to come. =================================================================== RCS file: /cvsroot/enlightenment/eterm/libast/Makefile.am,v retrieving revision 1.2 retrieving revision 1.3 diff -u -3 -r1.2 -r1.3 --- Makefile.am 2001/01/03 02:23:30 1.2 +++ Makefile.am 2001/05/07 07:54:39 1.3 @@ -1,6 +1,7 @@ -# $Id: Makefile.am,v 1.2 2001/01/03 02:23:30 mej Exp $ +# $Id: Makefile.am,v 1.3 2001/05/07 07:54:39 mej Exp $ AUTOMAKE_OPTIONS = foreign +SUBDIRS = . test bin_SCRIPTS = libast-config lib_LTLIBRARIES = libast.la @@ -13,3 +14,8 @@ libast_la_LDFLAGS = -version-info 1:0:0 EXTRA_DIST = README + +test: all + cd test && $(MAKE) test + +.PHONY: test =================================================================== RCS file: /cvsroot/enlightenment/eterm/libast/configure.in,v retrieving revision 1.1 retrieving revision 1.2 diff -u -3 -r1.1 -r1.2 --- configure.in 2000/10/30 22:02:42 1.1 +++ configure.in 2001/05/07 07:54:39 1.2 @@ -1,4 +1,4 @@ -dnl# $Id: configure.in,v 1.1 2000/10/30 22:02:42 mej Exp $ +dnl# $Id: configure.in,v 1.2 2001/05/07 07:54:39 mej Exp $ AC_INIT(configure.in) AM_INIT_AUTOMAKE(libast, 0.1) @@ -200,7 +200,7 @@ AM_CONFIG_HEADER(config.h) -AC_OUTPUT(Makefile libast-config libast.spec) +AC_OUTPUT(Makefile test/Makefile libast-config libast.spec) test -f libast-config && chmod 755 libast-config echo " =================================================================== RCS file: /cvsroot/enlightenment/eterm/libast/file.c,v retrieving revision 1.1 retrieving revision 1.2 diff -u -3 -r1.1 -r1.2 --- file.c 2001/01/03 02:23:53 1.1 +++ file.c 2001/05/07 07:54:39 1.2 @@ -21,7 +21,7 @@ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -static const char cvs_ident[] = "$Id: file.c,v 1.1 2001/01/03 02:23:53 mej Exp $"; +static const char cvs_ident[] = "$Id: file.c,v 1.2 2001/05/07 07:54:39 mej Exp $"; #ifdef HAVE_CONFIG_H # include <config.h> @@ -49,6 +49,7 @@ if (len) { strncpy(template, buff, len); + template[len - 1] = 0; } return (fd); } =================================================================== RCS file: /cvsroot/enlightenment/eterm/libast/libast.h,v retrieving revision 1.4 retrieving revision 1.5 diff -u -3 -r1.4 -r1.5 --- libast.h 2001/05/05 06:58:19 1.4 +++ libast.h 2001/05/07 07:54:39 1.5 @@ -115,37 +115,37 @@ #if DEBUG >= 1 # if defined(__FILE__) && defined(__LINE__) # ifdef __GNUC__ -# define ASSERT(x) do {if (!(x)) {if (DEBUG_LEVEL>=1) {fatal_error("ASSERT failed in %s() at %s:%d: %s", __FUNCTION__, __FILE__, __LINE__, #x);} \ - else {print_warning("ASSERT failed in %s() at %s:%d: %s", __FUNCTION__, __FILE__, __LINE__, #x);}}} while (0) -# define ASSERT_RVAL(x, val) do {if (!(x)) {if (DEBUG_LEVEL>=1) {fatal_error("ASSERT failed in %s() at %s:%d: %s", __FUNCTION__, __FILE__, __LINE__, #x);} \ - else {print_warning("ASSERT failed in %s() at %s:%d: %s", __FUNCTION__, __FILE__, __LINE__, #x);} \ +# define ASSERT(x) do {if (!(x)) {if (DEBUG_LEVEL>=1) {fatal_error("ASSERT failed in %s() at %s:%d: %s\n", __FUNCTION__, __FILE__, __LINE__, #x);} \ + else {print_warning("ASSERT failed in %s() at %s:%d: %s\n", __FUNCTION__, __FILE__, __LINE__, #x);}}} while (0) +# define ASSERT_RVAL(x, val) do {if (!(x)) {if (DEBUG_LEVEL>=1) {fatal_error("ASSERT failed in %s() at %s:%d: %s\n", __FUNCTION__, __FILE__, __LINE__, #x);} \ + else {print_warning("ASSERT failed in %s() at %s:%d: %s\n", __FUNCTION__, __FILE__, __LINE__, #x);} \ return (val);}} while (0) -# define ASSERT_NOTREACHED() do {if (DEBUG_LEVEL>=1) {fatal_error("ASSERT failed in %s() at %s:%d: This code should not be reached.", __FUNCTION__, __FILE__, __LINE__);} \ - else {print_warning("ASSERT failed in %s() at %s:%d: This code should not be reached.", __FUNCTION__, __FILE__, __LINE__);} \ +# define ASSERT_NOTREACHED() do {if (DEBUG_LEVEL>=1) {fatal_error("ASSERT failed in %s() at %s:%d: This code should not be reached.\n", __FUNCTION__, __FILE__, __LINE__);} \ + else {print_warning("ASSERT failed in %s() at %s:%d: This code should not be reached.\n", __FUNCTION__, __FILE__, __LINE__);} \ } while (0) -# define ASSERT_NOTREACHED_RVAL(val) do {if (DEBUG_LEVEL>=1) {fatal_error("ASSERT failed in %s() at %s:%d: This code should not be reached.", __FUNCTION__, __FILE__, __LINE__);} \ - else {print_warning("ASSERT failed in %s() at %s:%d: This code should not be reached.", __FUNCTION__, __FILE__, __LINE__);} \ +# define ASSERT_NOTREACHED_RVAL(val) do {if (DEBUG_LEVEL>=1) {fatal_error("ASSERT failed in %s() at %s:%d: This code should not be reached.\n", __FUNCTION__, __FILE__, __LINE__);} \ + else {print_warning("ASSERT failed in %s() at %s:%d: This code should not be reached.\n", __FUNCTION__, __FILE__, __LINE__);} \ return (val);} while (0) -# define ABORT() fatal_error("Aborting in %s() at %s:%d.", __FUNCTION__, __FILE__, __LINE__) +# define ABORT() fatal_error("Aborting in %s() at %s:%d.\n", __FUNCTION__, __FILE__, __LINE__) # else -# define ASSERT(x) do {if (!(x)) {if (DEBUG_LEVEL>=1) {fatal_error("ASSERT failed at %s:%d: %s", __FILE__, __LINE__, #x);} \ - else {print_warning("ASSERT failed at %s:%d: %s", __FILE__, __LINE__, #x);}}} while (0) -# define ASSERT_RVAL(x, val) do {if (!(x)) {if (DEBUG_LEVEL>=1) {fatal_error("ASSERT failed at %s:%d: %s", __FILE__, __LINE__, #x);} \ - else {print_warning("ASSERT failed at %s:%d: %s", __FILE__, __LINE__, #x);} \ +# define ASSERT(x) do {if (!(x)) {if (DEBUG_LEVEL>=1) {fatal_error("ASSERT failed at %s:%d: %s\n", __FILE__, __LINE__, #x);} \ + else {print_warning("ASSERT failed at %s:%d: %s\n", __FILE__, __LINE__, #x);}}} while (0) +# define ASSERT_RVAL(x, val) do {if (!(x)) {if (DEBUG_LEVEL>=1) {fatal_error("ASSERT failed at %s:%d: %s\n", __FILE__, __LINE__, #x);} \ + else {print_warning("ASSERT failed at %s:%d: %s\n", __FILE__, __LINE__, #x);} \ return (val);}} while (0) -# define ASSERT_NOTREACHED() do {if (DEBUG_LEVEL>=1) {fatal_error("ASSERT failed at %s:%d: This code should not be reached.", __FILE__, __LINE__);} \ - else {print_warning("ASSERT failed at %s:%d: This code should not be reached.", __FILE__, __LINE__);} \ +# define ASSERT_NOTREACHED() do {if (DEBUG_LEVEL>=1) {fatal_error("ASSERT failed at %s:%d: This code should not be reached.\n", __FILE__, __LINE__);} \ + else {print_warning("ASSERT failed at %s:%d: This code should not be reached.\n", __FILE__, __LINE__);} \ } while (0) -# define ASSERT_NOTREACHED_RVAL(val) do {if (DEBUG_LEVEL>=1) {fatal_error("ASSERT failed at %s:%d: This code should not be reached.", __FILE__, __LINE__);} \ - else {print_warning("ASSERT failed at %s:%d: This code should not be reached.", __FILE__, __LINE__);} \ +# define ASSERT_NOTREACHED_RVAL(val) do {if (DEBUG_LEVEL>=1) {fatal_error("ASSERT failed at %s:%d: This code should not be reached.\n", __FILE__, __LINE__);} \ + else {print_warning("ASSERT failed at %s:%d: This code should not be reached.\n", __FILE__, __LINE__);} \ return (val);} while (0) -# define ABORT() fatal_error("Aborting at %s:%d.", __FILE__, __LINE__) +# define ABORT() fatal_error("Aborting at %s:%d.\n", __FILE__, __LINE__) # endif # else -# define ASSERT(x) do {if (!(x)) {if (DEBUG_LEVEL>=1) {fatal_error("ASSERT failed: %s", #x);} \ - else {print_warning("ASSERT failed: %s", #x);}}} while (0) -# define ASSERT_RVAL(x, val) do {if (!(x)) {if (DEBUG_LEVEL>=1) {fatal_error("ASSERT failed: %s", #x);} \ - else {print_warning("ASSERT failed: %s", #x);} return (val);}} while (0) +# define ASSERT(x) do {if (!(x)) {if (DEBUG_LEVEL>=1) {fatal_error("ASSERT failed: %s\n", #x);} \ + else {print_warning("ASSERT failed: %s\n", #x);}}} while (0) +# define ASSERT_RVAL(x, val) do {if (!(x)) {if (DEBUG_LEVEL>=1) {fatal_error("ASSERT failed: %s\n", #x);} \ + else {print_warning("ASSERT failed: %s\n", #x);} return (val);}} while (0) # define ASSERT_NOTREACHED() return # define ASSERT_NOTREACHED_RVAL(x) return (x) # define ABORT() fatal_error("Aborting.\n") =================================================================== RCS file: /cvsroot/enlightenment/eterm/libast/strings.c,v retrieving revision 1.2 retrieving revision 1.3 diff -u -3 -r1.2 -r1.3 --- strings.c 2001/05/05 06:58:19 1.2 +++ strings.c 2001/05/07 07:54:39 1.3 @@ -21,7 +21,7 @@ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -static const char cvs_ident[] = "$Id: strings.c,v 1.2 2001/05/05 06:58:19 mej Exp $"; +static const char cvs_ident[] = "$Id: strings.c,v 1.3 2001/05/07 07:54:39 mej Exp $"; #ifdef HAVE_CONFIG_H # include <config.h> @@ -78,6 +78,10 @@ { char *tmpstr; + REQUIRE_RVAL(str != NULL, NULL); + REQUIRE_RVAL(cnt <= strlen(str), NULL); + REQUIRE_RVAL(cnt > 0, NULL); + tmpstr = (char *) MALLOC(cnt + 1); strncpy(tmpstr, str, cnt); tmpstr[cnt] = 0; @@ -90,6 +94,13 @@ { char *tmpstr; const char *pstr = str; + size_t len; + + REQUIRE_RVAL(str != NULL, NULL); + len = strlen(str); + REQUIRE_RVAL(index < len, NULL); + REQUIRE_RVAL(cnt <= len, NULL); + REQUIRE_RVAL(cnt > 0, NULL); tmpstr = (char *) MALLOC(cnt + 1); pstr += index; @@ -105,6 +116,10 @@ char *tmpstr; const char *pstr = str; + REQUIRE_RVAL(str != NULL, NULL); + REQUIRE_RVAL(cnt <= strlen(str), NULL); + REQUIRE_RVAL(cnt > 0, NULL); + tmpstr = (char *) MALLOC(cnt + 1); pstr += strlen(str); pstr -= cnt; @@ -155,11 +170,13 @@ *rexp = (regex_t *) MALLOC(sizeof(regex_t)); } - if ((result = regcomp(*rexp, pattern, REG_EXTENDED)) != 0) { - regerror(result, *rexp, errbuf, 256); - fprintf(stderr, "Unable to compile regexp %s -- %s.\n", pattern, errbuf); - FREE(*rexp); - return (FALSE); + if (pattern) { + if ((result = regcomp(*rexp, pattern, REG_EXTENDED)) != 0) { + regerror(result, *rexp, errbuf, 256); + fprintf(stderr, "Unable to compile regexp %s -- %s.\n", pattern, errbuf); + FREE(*rexp); + return (FALSE); + } } if (((result = regexec(*rexp, str, (size_t) 0, (regmatch_t *) NULL, 0)) |
From: <enl...@li...> - 2001-05-08 02:18:02
|
Enlightenment CVS committal Author : mej Project : eterm Module : libast Dir : eterm/libast/test Modified Files: test.c Log Message: Mon May 7 19:08:45 PDT 2001 Michael Jennings <me...@et...> I have created a testbed for libast. You can now run "make test" to run a series of tests which will test some of the functionality of the library. I didn't finish all the tests I'll eventually have; I just wanted to get the stuff that's immediately important. I also added a new split() function, which functions somewhat like its Perl counterpart, although there are differences. This function will be used in the remaining Eterm work I must do before release. =================================================================== RCS file: /cvsroot/enlightenment/eterm/libast/test/test.c,v retrieving revision 1.1 retrieving revision 1.2 diff -u -3 -r1.1 -r1.2 --- test.c 2001/05/07 07:54:39 1.1 +++ test.c 2001/05/08 02:18:01 1.2 @@ -21,7 +21,7 @@ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -static const char cvs_ident[] = "$Id: test.c,v 1.1 2001/05/07 07:54:39 mej Exp $"; +static const char cvs_ident[] = "$Id: test.c,v 1.2 2001/05/08 02:18:01 mej Exp $"; #ifdef HAVE_CONFIG_H # include <config.h> @@ -38,7 +38,7 @@ char memset_test[] = "abcdefghijklmnopqrstuvwxyz"; char sc1 = 'X', sc2 = 'K'; int si1 = 472, si2 = 8786345; - long sl1 = 0x98765432, sl2 = 0xffeeddff; + unsigned long sl1 = 0x98765432, sl2 = 0xffeeddff; TEST_BEGIN("MEMSET() macro"); MEMSET(memset_test, '!', CONST_STRLEN(memset_test)); @@ -143,12 +143,47 @@ TEST_BEGIN("split() function"); slist = split(" ", "Splitting a string on spaces"); TEST_FAIL_IF(!slist); - TEST_FAIL_IF(!slist[0] || !slist[1] || !slist[2] || !slist[3] || !slist[4]); - TEST_FAIL_IF(strcmp(slist[1], "Splitting")); + TEST_FAIL_IF(!slist[0] || !slist[1] || !slist[2] || !slist[3] || !slist[4] || slist[5]); + TEST_FAIL_IF(strcmp(slist[0], "Splitting")); + TEST_FAIL_IF(strcmp(slist[1], "a")); + TEST_FAIL_IF(strcmp(slist[2], "string")); + TEST_FAIL_IF(strcmp(slist[3], "on")); + TEST_FAIL_IF(strcmp(slist[4], "spaces")); + slist = split(NULL, " a\t \ta a a a a a "); + TEST_FAIL_IF(!slist); + TEST_FAIL_IF(!slist[0] || !slist[1] || !slist[2] || !slist[3] || !slist[4] || !slist[5] || !slist[6] || slist[7]); + TEST_FAIL_IF(strcmp(slist[0], "a")); + TEST_FAIL_IF(strcmp(slist[1], "a")); TEST_FAIL_IF(strcmp(slist[2], "a")); - TEST_FAIL_IF(strcmp(slist[3], "string")); - TEST_FAIL_IF(strcmp(slist[4], "on")); - TEST_FAIL_IF(strcmp(slist[5], "spaces")); + TEST_FAIL_IF(strcmp(slist[3], "a")); + TEST_FAIL_IF(strcmp(slist[4], "a")); + TEST_FAIL_IF(strcmp(slist[5], "a")); + TEST_FAIL_IF(strcmp(slist[6], "a")); + slist = split(NULL, " first \"just the second\" third \'fourth and \'\"fifth to\"gether last"); + TEST_FAIL_IF(!slist); + TEST_FAIL_IF(!slist[0] || !slist[1] || !slist[2] || !slist[3] || !slist[4] || slist[5]); + TEST_FAIL_IF(strcmp(slist[0], "first")); + TEST_FAIL_IF(strcmp(slist[1], "just the second")); + TEST_FAIL_IF(strcmp(slist[2], "third")); + TEST_FAIL_IF(strcmp(slist[3], "fourth and fifth together")); + TEST_FAIL_IF(strcmp(slist[4], "last")); + slist = split(NULL, "\'don\\\'t\' try this at home \"\" "); + TEST_FAIL_IF(!slist); + TEST_FAIL_IF(!slist[0] || !slist[1] || !slist[2] || !slist[3] || !slist[4] || !slist[5] || slist[6]); + TEST_FAIL_IF(strcmp(slist[0], "don\'t")); + TEST_FAIL_IF(strcmp(slist[1], "try")); + TEST_FAIL_IF(strcmp(slist[2], "this")); + TEST_FAIL_IF(strcmp(slist[3], "at")); + TEST_FAIL_IF(strcmp(slist[4], "home")); + TEST_FAIL_IF(slist[5][0]); + slist = split(":", "A:B:C:D:::E"); + TEST_FAIL_IF(!slist); + TEST_FAIL_IF(!slist[0] || !slist[1] || !slist[2] || !slist[3] || !slist[4] || slist[5]); + TEST_FAIL_IF(strcmp(slist[0], "A")); + TEST_FAIL_IF(strcmp(slist[1], "B")); + TEST_FAIL_IF(strcmp(slist[2], "C")); + TEST_FAIL_IF(strcmp(slist[3], "D")); + TEST_FAIL_IF(strcmp(slist[4], "E")); TEST_PASS(); TEST_PASSED("string"); |
From: <enl...@li...> - 2001-05-08 02:18:02
|
Enlightenment CVS committal Author : mej Project : eterm Module : libast Dir : eterm/libast Modified Files: ChangeLog Makefile.am configure.in strings.c Log Message: Mon May 7 19:08:45 PDT 2001 Michael Jennings <me...@et...> I have created a testbed for libast. You can now run "make test" to run a series of tests which will test some of the functionality of the library. I didn't finish all the tests I'll eventually have; I just wanted to get the stuff that's immediately important. I also added a new split() function, which functions somewhat like its Perl counterpart, although there are differences. This function will be used in the remaining Eterm work I must do before release. =================================================================== RCS file: /cvsroot/enlightenment/eterm/libast/ChangeLog,v retrieving revision 1.4 retrieving revision 1.5 diff -u -3 -r1.4 -r1.5 --- ChangeLog 2001/01/03 02:23:30 1.4 +++ ChangeLog 2001/05/08 02:18:01 1.5 @@ -30,3 +30,15 @@ systems, they will be addressed here. ------------------------------------------------------------------------------- +Mon May 7 19:08:45 PDT 2001 Michael Jennings <me...@et...> + + I have created a testbed for libast. You can now run "make test" to + run a series of tests which will test some of the functionality of the + library. I didn't finish all the tests I'll eventually have; I just + wanted to get the stuff that's immediately important. + + I also added a new split() function, which functions somewhat like its + Perl counterpart, although there are differences. This function will + be used in the remaining Eterm work I must do before release. + +------------------------------------------------------------------------------- =================================================================== RCS file: /cvsroot/enlightenment/eterm/libast/Makefile.am,v retrieving revision 1.3 retrieving revision 1.4 diff -u -3 -r1.3 -r1.4 --- Makefile.am 2001/05/07 07:54:39 1.3 +++ Makefile.am 2001/05/08 02:18:01 1.4 @@ -1,4 +1,4 @@ -# $Id: Makefile.am,v 1.3 2001/05/07 07:54:39 mej Exp $ +# $Id: Makefile.am,v 1.4 2001/05/08 02:18:01 mej Exp $ AUTOMAKE_OPTIONS = foreign SUBDIRS = . test @@ -11,7 +11,7 @@ LIBS = -lm -libast_la_LDFLAGS = -version-info 1:0:0 +libast_la_LDFLAGS = -version-info 1:1:0 EXTRA_DIST = README =================================================================== RCS file: /cvsroot/enlightenment/eterm/libast/configure.in,v retrieving revision 1.2 retrieving revision 1.3 diff -u -3 -r1.2 -r1.3 --- configure.in 2001/05/07 07:54:39 1.2 +++ configure.in 2001/05/08 02:18:01 1.3 @@ -1,7 +1,7 @@ -dnl# $Id: configure.in,v 1.2 2001/05/07 07:54:39 mej Exp $ +dnl# $Id: configure.in,v 1.3 2001/05/08 02:18:01 mej Exp $ AC_INIT(configure.in) -AM_INIT_AUTOMAKE(libast, 0.1) +AM_INIT_AUTOMAKE(libast, 0.2) AC_DEFINE_UNQUOTED(LIBAST_VERSION, "$VERSION") dnl# Set some basic variables =================================================================== RCS file: /cvsroot/enlightenment/eterm/libast/strings.c,v retrieving revision 1.3 retrieving revision 1.4 diff -u -3 -r1.3 -r1.4 --- strings.c 2001/05/07 07:54:39 1.3 +++ strings.c 2001/05/08 02:18:01 1.4 @@ -21,7 +21,7 @@ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -static const char cvs_ident[] = "$Id: strings.c,v 1.3 2001/05/07 07:54:39 mej Exp $"; +static const char cvs_ident[] = "$Id: strings.c,v 1.4 2001/05/08 02:18:01 mej Exp $"; #ifdef HAVE_CONFIG_H # include <config.h> @@ -145,7 +145,7 @@ if (pattern) { if ((result = regcomp(rexp, pattern, REG_EXTENDED)) != 0) { regerror(result, rexp, errbuf, 256); - fprintf(stderr, "Unable to compile regexp %s -- %s.\n", pattern, errbuf); + print_error("Unable to compile regexp %s -- %s.\n", pattern, errbuf); return (FALSE); } } @@ -153,7 +153,7 @@ if (((result = regexec(rexp, str, (size_t) 0, (regmatch_t *) NULL, 0)) != 0) && (result != REG_NOMATCH)) { regerror(result, rexp, errbuf, 256); - fprintf(stderr, "Error testing input string %s -- %s.\n", str, errbuf); + print_error("Error testing input string %s -- %s.\n", str, errbuf); return (FALSE); } return (!result); @@ -173,7 +173,7 @@ if (pattern) { if ((result = regcomp(*rexp, pattern, REG_EXTENDED)) != 0) { regerror(result, *rexp, errbuf, 256); - fprintf(stderr, "Unable to compile regexp %s -- %s.\n", pattern, errbuf); + print_error("Unable to compile regexp %s -- %s.\n", pattern, errbuf); FREE(*rexp); return (FALSE); } @@ -182,7 +182,7 @@ if (((result = regexec(*rexp, str, (size_t) 0, (regmatch_t *) NULL, 0)) != 0) && (result != REG_NOMATCH)) { regerror(result, *rexp, errbuf, 256); - fprintf(stderr, "Error testing input string %s -- %s.\n", str, errbuf); + print_error("Error testing input string %s -- %s.\n", str, errbuf); return (FALSE); } return (!result); @@ -204,21 +204,20 @@ REQUIRE_RVAL(str != NULL, (char **) NULL); - if ((slist = (char **) MALLOC(1)) == NULL) { + if ((slist = (char **) MALLOC(sizeof(char *))) == NULL) { print_error("split(): Unable to allocate memory -- %s\n", strerror(errno)); return ((char **) NULL); } /* Before we do anything, skip leading "whitespace." */ - for (; IS_DELIM(*pstr); pstr++); + for (pstr = str; *pstr && IS_DELIM(*pstr); pstr++); /* The outermost for loop is where we traverse the string. Each new word brings us back to the top where we resize our string list. */ - for (pstr = str; *pstr; cnt++) { - + for (; *pstr; cnt++) { /* First, resize the list to two bigger than our count. Why two? One for the string we're about to do, and one for a trailing NULL. */ - if ((slist = (char **) REALLOC(slist, cnt + 2)) == NULL) { + if ((slist = (char **) REALLOC(slist, sizeof(char *) * (cnt + 2))) == NULL) { print_error("split(): Unable to allocate memory -- %s\n", strerror(errno)); return ((char **) NULL); } @@ -227,15 +226,22 @@ of the string we have yet to parse, so allocate that much space to start. */ len = strlen(pstr) + 1; if ((slist[cnt] = (char *) MALLOC(len)) == NULL) { - fprintf(stderr, "split(): Unable to allocate memory -- %s.\n", strerror(errno)); + print_error("split(): Unable to allocate memory -- %s.\n", strerror(errno)); return ((char **) NULL); } pdest = slist[cnt]; - for (; *pstr && !IS_QUOTE(*pstr) && !IS_DELIM(*pstr); pdest++, pstr++) { + /* This for loop is where we process each character. */ + for (; *pstr && (quote || !IS_DELIM(*pstr));) { if (*pstr == '\"' || *pstr == '\'') { + /* It's a quote character, so set or reset the quote variable. */ if (quote) { - quote = 0; + if (quote == *pstr) { + quote = 0; + } else { + /* It's a single quote inside double quotes, or vice versa. Leave it alone. */ + *pdest++ = *pstr++; + } } else { quote = *pstr; } @@ -247,15 +253,20 @@ below will copy the next character to the new token, no questions asked. */ pstr++; } - *pdest = *pstr; + *pdest++ = *pstr++; } } + /* Add the trailing \0 to terminate the new string. */ *pdest = 0; + + /* Reallocate the new string to be just the right size. */ + len = strlen(slist[cnt]) + 1; + slist[cnt] = (char *) REALLOC(slist[cnt], len); - len = strlen(pdest) + 1; - slist[cnt] = (char *) REALLOC(pdest, len); - for (; IS_DELIM(*pstr); pstr++); + /* Move past any trailing "whitespace." */ + for (; *pstr && IS_DELIM(*pstr); pstr++); } + /* The last element of slist[] should be NULL. */ slist[cnt] = 0; return slist; } @@ -279,7 +290,7 @@ k = strlen(str) + 1; if ((tmpstr = (char *) MALLOC(k)) == NULL) { - fprintf(stderr, "get_word(%lu, %s): Unable to allocate memory -- %s.\n", + print_error("get_word(%lu, %s): Unable to allocate memory -- %s.\n", index, str, strerror(errno)); return ((char *) NULL); } @@ -656,19 +667,19 @@ register unsigned char *ptr; unsigned char buffr[9]; - fprintf(stderr, " Address | Size | Offset | 00 01 02 03 04 05 06 07 | ASCII \n"); - fprintf(stderr, "---------+--------+---------+-------------------------+---------\n"); + print_error(" Address | Size | Offset | 00 01 02 03 04 05 06 07 | ASCII \n"); + print_error("---------+--------+---------+-------------------------+---------\n"); for (ptr = (unsigned char *) buff, j = 0; j < count; j += 8) { - fprintf(stderr, " %8p | %06lu | %07x | ", buff, (unsigned long) count, (unsigned int) j); + print_error(" %8p | %06lu | %07x | ", buff, (unsigned long) count, (unsigned int) j); l = ((count - j < 8) ? (count - j) : (8)); memset(buffr, 0, 9); memcpy(buffr, ptr + j, l); for (k = 0; k < l; k++) { - fprintf(stderr, "%02x ", buffr[k]); + print_error("%02x ", buffr[k]); } for (; k < 8; k++) { - fprintf(stderr, " "); + print_error(" "); } - fprintf(stderr, "| %-8s\n", safe_str((char *) buffr, l)); + print_error("| %-8s\n", safe_str((char *) buffr, l)); } } |
From: <enl...@li...> - 2001-05-08 05:16:51
|
Enlightenment CVS committal Author : mej Project : eterm Module : libast Dir : eterm/libast Modified Files: ChangeLog libast.h strings.c Log Message: Mon May 7 22:16:11 PDT 2001 Michael Jennings <me...@et...> Moved chomp() to libast. It's awfully handy. =================================================================== RCS file: /cvsroot/enlightenment/eterm/libast/ChangeLog,v retrieving revision 1.5 retrieving revision 1.6 diff -u -3 -r1.5 -r1.6 --- ChangeLog 2001/05/08 02:18:01 1.5 +++ ChangeLog 2001/05/08 05:16:51 1.6 @@ -42,3 +42,8 @@ be used in the remaining Eterm work I must do before release. ------------------------------------------------------------------------------- +Mon May 7 22:16:11 PDT 2001 Michael Jennings <me...@et...> + + Moved chomp() to libast. It's awfully handy. + +------------------------------------------------------------------------------- =================================================================== RCS file: /cvsroot/enlightenment/eterm/libast/libast.h,v retrieving revision 1.5 retrieving revision 1.6 diff -u -3 -r1.5 -r1.6 --- libast.h 2001/05/07 07:54:39 1.5 +++ libast.h 2001/05/08 05:16:51 1.6 @@ -360,6 +360,7 @@ extern char *get_word(unsigned long, const char *); extern char *get_pword(unsigned long, const char *); extern unsigned long num_words(const char *); +extern char *chomp(char *); extern char *strip_whitespace(char *); extern char *downcase_str(char *); extern char *upcase_str(char *); =================================================================== RCS file: /cvsroot/enlightenment/eterm/libast/strings.c,v retrieving revision 1.4 retrieving revision 1.5 diff -u -3 -r1.4 -r1.5 --- strings.c 2001/05/08 02:18:01 1.4 +++ strings.c 2001/05/08 05:16:51 1.5 @@ -21,7 +21,7 @@ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -static const char cvs_ident[] = "$Id: strings.c,v 1.4 2001/05/08 02:18:01 mej Exp $"; +static const char cvs_ident[] = "$Id: strings.c,v 1.5 2001/05/08 05:16:51 mej Exp $"; #ifdef HAVE_CONFIG_H # include <config.h> @@ -400,11 +400,30 @@ return (cnt); } +/* chomp() removes leading and trailing whitespace from a string */ char * +chomp(char *s) +{ + + register char *front, *back; + + ASSERT_RVAL(s != NULL, NULL); + for (front = s; *front && isspace(*front); front++); + for (back = s + strlen(s) - 1; *back && isspace(*back) && back > front; back--); + + *(++back) = 0; + if (front != s) { + memmove(s, front, back - front + 1); + } + return (s); +} + +char * strip_whitespace(register char *str) { register unsigned long i, j; + ASSERT_RVAL(str != NULL, NULL); if ((j = strlen(str))) { for (i = j - 1; isspace(*(str + i)); i--); str[j = i + 1] = 0; |
From: <enl...@li...> - 2001-05-09 02:53:47
|
Enlightenment CVS committal Author : mej Project : eterm Module : libast Dir : eterm/libast Modified Files: ChangeLog libast.h mem.c strings.c Log Message: Tue May 8 19:51:51 PDT 2001 Michael Jennings <me...@et...> Added two more convenience functions: join(), also borrowed from Perl, and free_array() for freeing lists. I also threw in a USE_VAR() macro for getting rid of bogus unused variable warnings. =================================================================== RCS file: /cvsroot/enlightenment/eterm/libast/ChangeLog,v retrieving revision 1.6 retrieving revision 1.7 diff -u -3 -r1.6 -r1.7 --- ChangeLog 2001/05/08 05:16:51 1.6 +++ ChangeLog 2001/05/09 02:53:47 1.7 @@ -47,3 +47,10 @@ Moved chomp() to libast. It's awfully handy. ------------------------------------------------------------------------------- +Tue May 8 19:51:51 PDT 2001 Michael Jennings <me...@et...> + + Added two more convenience functions: join(), also borrowed from + Perl, and free_array() for freeing lists. I also threw in a USE_VAR() + macro for getting rid of bogus unused variable warnings. + +------------------------------------------------------------------------------- =================================================================== RCS file: /cvsroot/enlightenment/eterm/libast/libast.h,v retrieving revision 1.6 retrieving revision 1.7 diff -u -3 -r1.6 -r1.7 --- libast.h 2001/05/08 05:16:51 1.6 +++ libast.h 2001/05/09 02:53:47 1.7 @@ -74,8 +74,8 @@ # define FALSE ((unsigned char)(0)) #endif +#define USE_VAR(x) (void) x - /****************************** DEBUGGING GOOP ********************************/ #ifndef LIBAST_DEBUG_FD # define LIBAST_DEBUG_FD (stderr) @@ -343,6 +343,7 @@ extern void libast_x_free_gc(const char *, const char *, unsigned long, Display *, GC); extern void libast_dump_gc_tables(void); #endif +extern void free_array(void **, size_t); /* file.c */ extern int libast_temp_file(char *, size_t); @@ -357,6 +358,7 @@ #endif extern char **split(const char *, const char *); extern char **split_regexp(const char *, const char *); +extern char *join(const char *, char **); extern char *get_word(unsigned long, const char *); extern char *get_pword(unsigned long, const char *); extern unsigned long num_words(const char *); =================================================================== RCS file: /cvsroot/enlightenment/eterm/libast/mem.c,v retrieving revision 1.2 retrieving revision 1.3 diff -u -3 -r1.2 -r1.3 --- mem.c 2000/11/16 23:40:37 1.2 +++ mem.c 2001/05/09 02:53:47 1.3 @@ -22,7 +22,7 @@ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -static const char cvs_ident[] = "$Id: mem.c,v 1.2 2000/11/16 23:40:37 mej Exp $"; +static const char cvs_ident[] = "$Id: mem.c,v 1.3 2001/05/09 02:53:47 mej Exp $"; #ifdef HAVE_CONFIG_H # include <config.h> @@ -447,5 +447,20 @@ fprintf(LIBAST_DEBUG_FD, "Dumping X11 GC allocation table:\n"); memrec_dump_resources(&gc_rec); } - #endif + +/* Convenience function for freeing a list. */ +void +free_array(void **list, size_t count) +{ + register size_t i; + + if (count == 0) { + count = (size_t) -1; + } + for (i = 0; i < count && list[i]; i++) { + FREE(list[i]); + list[i] = NULL; + } + FREE(list); +} =================================================================== RCS file: /cvsroot/enlightenment/eterm/libast/strings.c,v retrieving revision 1.5 retrieving revision 1.6 diff -u -3 -r1.5 -r1.6 --- strings.c 2001/05/08 05:16:51 1.5 +++ strings.c 2001/05/09 02:53:47 1.6 @@ -21,7 +21,7 @@ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -static const char cvs_ident[] = "$Id: strings.c,v 1.5 2001/05/08 05:16:51 mej Exp $"; +static const char cvs_ident[] = "$Id: strings.c,v 1.6 2001/05/09 02:53:47 mej Exp $"; #ifdef HAVE_CONFIG_H # include <config.h> @@ -275,6 +275,32 @@ split_regexp(const char *regexp, const char *str) { +} + +char * +join(const char *sep, char **slist) +{ + register unsigned long i; + size_t len, slen; + char *new_str; + + if (sep == NULL) { + sep = ""; + } + slen = strlen(sep); + for (i = len = 0; slist[i]; i++) { + len += strlen(slist[i]); + } + len += slen * (i - 1); + new_str = (char *) MALLOC(len); + strcpy(new_str, slist[0]); + for (i = 1; slist[i]; i++) { + if (slen) { + strcat(new_str, sep); + } + strcat(new_str, slist[i]); + } + return new_str; } /* Return malloc'd pointer to index-th word in str. "..." counts as 1 word. */ |
From: <enl...@li...> - 2001-05-10 00:21:44
|
Enlightenment CVS committal Author : mej Project : eterm Module : libast Dir : eterm/libast Modified Files: ChangeLog mem.c strings.c Log Message: Wed May 9 17:20:46 PDT 2001 Michael Jennings <me...@et...> Better handling of NULL values all around. =================================================================== RCS file: /cvsroot/enlightenment/eterm/libast/ChangeLog,v retrieving revision 1.7 retrieving revision 1.8 diff -u -3 -r1.7 -r1.8 --- ChangeLog 2001/05/09 02:53:47 1.7 +++ ChangeLog 2001/05/10 00:21:44 1.8 @@ -54,3 +54,8 @@ macro for getting rid of bogus unused variable warnings. ------------------------------------------------------------------------------- +Wed May 9 17:20:46 PDT 2001 Michael Jennings <me...@et...> + + Better handling of NULL values all around. + +------------------------------------------------------------------------------- =================================================================== RCS file: /cvsroot/enlightenment/eterm/libast/mem.c,v retrieving revision 1.3 retrieving revision 1.4 diff -u -3 -r1.3 -r1.4 --- mem.c 2001/05/09 02:53:47 1.3 +++ mem.c 2001/05/10 00:21:44 1.4 @@ -22,7 +22,7 @@ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -static const char cvs_ident[] = "$Id: mem.c,v 1.3 2001/05/09 02:53:47 mej Exp $"; +static const char cvs_ident[] = "$Id: mem.c,v 1.4 2001/05/10 00:21:44 mej Exp $"; #ifdef HAVE_CONFIG_H # include <config.h> @@ -454,6 +454,8 @@ free_array(void **list, size_t count) { register size_t i; + + REQUIRE(list != NULL); if (count == 0) { count = (size_t) -1; =================================================================== RCS file: /cvsroot/enlightenment/eterm/libast/strings.c,v retrieving revision 1.6 retrieving revision 1.7 diff -u -3 -r1.6 -r1.7 --- strings.c 2001/05/09 02:53:47 1.6 +++ strings.c 2001/05/10 00:21:44 1.7 @@ -21,7 +21,7 @@ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -static const char cvs_ident[] = "$Id: strings.c,v 1.6 2001/05/09 02:53:47 mej Exp $"; +static const char cvs_ident[] = "$Id: strings.c,v 1.7 2001/05/10 00:21:44 mej Exp $"; #ifdef HAVE_CONFIG_H # include <config.h> @@ -266,9 +266,13 @@ /* Move past any trailing "whitespace." */ for (; *pstr && IS_DELIM(*pstr); pstr++); } - /* The last element of slist[] should be NULL. */ - slist[cnt] = 0; - return slist; + if (cnt == 0) { + return NULL; + } else { + /* The last element of slist[] should be NULL. */ + slist[cnt] = 0; + return slist; + } } char ** |
From: <enl...@li...> - 2001-05-17 17:28:12
|
Enlightenment CVS committal Author : mej Project : eterm Module : libast Dir : eterm/libast/test Modified Files: Makefile.am Log Message: Thu May 17 10:27:02 PDT 2001 Michael Jennings <me...@et...> Fixed "make distcheck." =================================================================== RCS file: /cvsroot/enlightenment/eterm/libast/test/Makefile.am,v retrieving revision 1.1 retrieving revision 1.2 diff -u -3 -r1.1 -r1.2 --- Makefile.am 2001/05/07 07:54:39 1.1 +++ Makefile.am 2001/05/17 17:28:10 1.2 @@ -1,8 +1,8 @@ -# $Id: Makefile.am,v 1.1 2001/05/07 07:54:39 mej Exp $ +# $Id: Makefile.am,v 1.2 2001/05/17 17:28:10 mej Exp $ bin_PROGRAMS = libast-test -libast_test_SOURCES = test.c +libast_test_SOURCES = test.c test.h libast_test_DEPENDENCIES = $(top_builddir)/libast.la libast_test_LDADD = $(top_builddir)/libast.la |
From: <enl...@li...> - 2001-05-17 17:28:40
|
Enlightenment CVS committal Author : mej Project : eterm Module : libast Dir : eterm/libast Modified Files: ChangeLog Log Message: Thu May 17 10:27:02 PDT 2001 Michael Jennings <me...@et...> Fixed "make distcheck." =================================================================== RCS file: /cvsroot/enlightenment/eterm/libast/ChangeLog,v retrieving revision 1.8 retrieving revision 1.9 diff -u -3 -r1.8 -r1.9 --- ChangeLog 2001/05/10 00:21:44 1.8 +++ ChangeLog 2001/05/17 17:28:10 1.9 @@ -59,3 +59,8 @@ Better handling of NULL values all around. ------------------------------------------------------------------------------- +Thu May 17 10:27:02 PDT 2001 Michael Jennings <me...@et...> + + Fixed "make distcheck." + +------------------------------------------------------------------------------- |
From: <enl...@li...> - 2001-06-12 00:03:23
|
Enlightenment CVS committal Author : mej Project : eterm Module : libast Dir : eterm/libast/test Modified Files: test.c test.h Log Message: Mon Jun 11 16:57:40 PDT 2001 Michael Jennings <me...@et...> I moved the config file code from Eterm to libast. I also relocated some of the generic macros (MIN(), MAX(), BOUND(), etc.). Version up to 0.3 now. =================================================================== RCS file: /cvsroot/enlightenment/eterm/libast/test/test.c,v retrieving revision 1.2 retrieving revision 1.3 diff -u -3 -r1.2 -r1.3 --- test.c 2001/05/08 02:18:01 1.2 +++ test.c 2001/06/12 00:03:22 1.3 @@ -1,5 +1,5 @@ /* - * Copyright (C) 1997-2000, Michael Jennings + * Copyright (C) 1997-2001, Michael Jennings * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to @@ -21,7 +21,7 @@ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -static const char cvs_ident[] = "$Id: test.c,v 1.2 2001/05/08 02:18:01 mej Exp $"; +static const char cvs_ident[] = "$Id: test.c,v 1.3 2001/06/12 00:03:22 mej Exp $"; #ifdef HAVE_CONFIG_H # include <config.h> =================================================================== RCS file: /cvsroot/enlightenment/eterm/libast/test/test.h,v retrieving revision 1.1 retrieving revision 1.2 diff -u -3 -r1.1 -r1.2 --- test.h 2001/05/07 07:54:39 1.1 +++ test.h 2001/06/12 00:03:22 1.2 @@ -1,5 +1,5 @@ /* - * Copyright (C) 1997-2000, Michael Jennings + * Copyright (C) 1997-2001, Michael Jennings * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to |
From: <enl...@li...> - 2001-06-12 00:03:52
|
Enlightenment CVS committal Author : mej Project : eterm Module : libast Dir : eterm/libast/debian Modified Files: copyright Log Message: Mon Jun 11 16:57:40 PDT 2001 Michael Jennings <me...@et...> I moved the config file code from Eterm to libast. I also relocated some of the generic macros (MIN(), MAX(), BOUND(), etc.). Version up to 0.3 now. =================================================================== RCS file: /cvsroot/enlightenment/eterm/libast/debian/copyright,v retrieving revision 1.1 retrieving revision 1.2 diff -u -3 -r1.1 -r1.2 --- copyright 2000/11/13 18:08:16 1.1 +++ copyright 2001/06/12 00:03:22 1.2 @@ -9,7 +9,7 @@ Copyright: -Copyright (C) 1997-2000, Michael Jennings +Copyright (C) 1997-2001, Michael Jennings Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to |
From: <enl...@li...> - 2001-06-12 00:03:52
|
Enlightenment CVS committal Author : mej Project : eterm Module : libast Dir : eterm/libast Modified Files: ChangeLog Makefile.am acconfig.h configure.in debug.c file.c libast.h libast_internal.h mem.c msgs.c strings.c Added Files: conf.c Log Message: Mon Jun 11 16:57:40 PDT 2001 Michael Jennings <me...@et...> I moved the config file code from Eterm to libast. I also relocated some of the generic macros (MIN(), MAX(), BOUND(), etc.). Version up to 0.3 now. =================================================================== RCS file: /cvsroot/enlightenment/eterm/libast/ChangeLog,v retrieving revision 1.9 retrieving revision 1.10 diff -u -3 -r1.9 -r1.10 --- ChangeLog 2001/05/17 17:28:10 1.9 +++ ChangeLog 2001/06/12 00:03:21 1.10 @@ -64,3 +64,10 @@ Fixed "make distcheck." ------------------------------------------------------------------------------- +Mon Jun 11 16:57:40 PDT 2001 Michael Jennings <me...@et...> + + I moved the config file code from Eterm to libast. I also relocated + some of the generic macros (MIN(), MAX(), BOUND(), etc.). Version up + to 0.3 now. + +------------------------------------------------------------------------------- =================================================================== RCS file: /cvsroot/enlightenment/eterm/libast/Makefile.am,v retrieving revision 1.4 retrieving revision 1.5 diff -u -3 -r1.4 -r1.5 --- Makefile.am 2001/05/08 02:18:01 1.4 +++ Makefile.am 2001/06/12 00:03:21 1.5 @@ -1,4 +1,4 @@ -# $Id: Makefile.am,v 1.4 2001/05/08 02:18:01 mej Exp $ +# $Id: Makefile.am,v 1.5 2001/06/12 00:03:21 mej Exp $ AUTOMAKE_OPTIONS = foreign SUBDIRS = . test @@ -7,11 +7,11 @@ lib_LTLIBRARIES = libast.la include_HEADERS = libast.h -libast_la_SOURCES = debug.c file.c mem.c msgs.c strings.c snprintf.c libast.h libast_internal.h +libast_la_SOURCES = conf.c debug.c file.c mem.c msgs.c strings.c snprintf.c libast.h libast_internal.h LIBS = -lm -libast_la_LDFLAGS = -version-info 1:1:0 +libast_la_LDFLAGS = -version-info 1:2:0 EXTRA_DIST = README =================================================================== RCS file: /cvsroot/enlightenment/eterm/libast/acconfig.h,v retrieving revision 1.1 retrieving revision 1.2 diff -u -3 -r1.1 -r1.2 --- acconfig.h 2000/10/30 22:02:42 1.1 +++ acconfig.h 2001/06/12 00:03:21 1.2 @@ -8,3 +8,4 @@ #undef LIBAST_X11_SUPPORT #undef LIBAST_IMLIB2_SUPPORT #undef LIBAST_MMX_SUPPORT +#undef ALLOW_BACKQUOTE_EXEC =================================================================== RCS file: /cvsroot/enlightenment/eterm/libast/configure.in,v retrieving revision 1.3 retrieving revision 1.4 diff -u -3 -r1.3 -r1.4 --- configure.in 2001/05/08 02:18:01 1.3 +++ configure.in 2001/06/12 00:03:21 1.4 @@ -1,7 +1,7 @@ -dnl# $Id: configure.in,v 1.3 2001/05/08 02:18:01 mej Exp $ +dnl# $Id: configure.in,v 1.4 2001/06/12 00:03:21 mej Exp $ AC_INIT(configure.in) -AM_INIT_AUTOMAKE(libast, 0.2) +AM_INIT_AUTOMAKE(libast, 0.3) AC_DEFINE_UNQUOTED(LIBAST_VERSION, "$VERSION") dnl# Set some basic variables @@ -182,6 +182,20 @@ AC_MSG_RESULT($CONFIG_BUFF_SIZE bytes) AC_DEFINE_UNQUOTED(CONFIG_BUFF, $CONFIG_BUFF_SIZE) +AC_MSG_CHECKING(if backquote execution support should be enabled) +AC_ARG_WITH(backquote-exec, +[ --without-backquote-exec + disables the execution of commands from inside config files], + if test "$withval" = "no"; then + AC_MSG_RESULT(no) + else + AC_MSG_RESULT(yes) + AC_DEFINE(ALLOW_BACKQUOTE_EXEC) + fi, + AC_MSG_RESULT(yes) + AC_DEFINE(ALLOW_BACKQUOTE_EXEC) +) + CPPFLAGS=`eval eval eval eval eval echo "-I$includedir -I$prefix/include $CPPFLAGS"` CPPFLAGS=`echo $CPPFLAGS | tr ' ' '\n' | uniq | grep -v NONE | tr '\n' ' '` CFLAGS=${CFLAGS--O} @@ -214,8 +228,6 @@ Compiler: $CC $CFLAGS Linker: $CC $LDFLAGS $LIBS Install path: $prefix - - See src/feature.h for further configuration information. Now type 'make' to build $PACKAGE $VERSION. " =================================================================== RCS file: /cvsroot/enlightenment/eterm/libast/debug.c,v retrieving revision 1.1 retrieving revision 1.2 diff -u -3 -r1.1 -r1.2 --- debug.c 2000/10/30 22:02:42 1.1 +++ debug.c 2001/06/12 00:03:21 1.2 @@ -1,5 +1,5 @@ /* - * Copyright (C) 1997-2000, Michael Jennings + * Copyright (C) 1997-2001, Michael Jennings * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to @@ -21,7 +21,7 @@ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -static const char cvs_ident[] = "$Id: debug.c,v 1.1 2000/10/30 22:02:42 mej Exp $"; +static const char cvs_ident[] = "$Id: debug.c,v 1.2 2001/06/12 00:03:21 mej Exp $"; #ifdef HAVE_CONFIG_H # include <config.h> =================================================================== RCS file: /cvsroot/enlightenment/eterm/libast/file.c,v retrieving revision 1.2 retrieving revision 1.3 diff -u -3 -r1.2 -r1.3 --- file.c 2001/05/07 07:54:39 1.2 +++ file.c 2001/06/12 00:03:21 1.3 @@ -1,5 +1,5 @@ /* - * Copyright (C) 1997-2000, Michael Jennings + * Copyright (C) 1997-2001, Michael Jennings * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to @@ -21,7 +21,7 @@ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -static const char cvs_ident[] = "$Id: file.c,v 1.2 2001/05/07 07:54:39 mej Exp $"; +static const char cvs_ident[] = "$Id: file.c,v 1.3 2001/06/12 00:03:21 mej Exp $"; #ifdef HAVE_CONFIG_H # include <config.h> =================================================================== RCS file: /cvsroot/enlightenment/eterm/libast/libast.h,v retrieving revision 1.7 retrieving revision 1.8 diff -u -3 -r1.7 -r1.8 --- libast.h 2001/05/09 02:53:47 1.7 +++ libast.h 2001/06/12 00:03:21 1.8 @@ -1,5 +1,5 @@ /* - * Copyright (C) 1997-2000, Michael Jennings + * Copyright (C) 1997-2001, Michael Jennings * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to @@ -48,6 +48,8 @@ #include <unistd.h> #include <ctype.h> #include <string.h> +#include <fcntl.h> +#include <dirent.h> #include <errno.h> #include <signal.h> #ifdef WITH_DMALLOC @@ -76,6 +78,38 @@ #define USE_VAR(x) (void) x +#ifdef MIN +# undef MIN +#endif +#ifdef MAX +# undef MAX +#endif +#ifdef __GNUC__ +# define MIN(a,b) __extension__ ({__typeof__(a) aa = (a); __typeof__(b) bb = (b); (aa < bb) ? (aa) : (bb);}) +# define MAX(a,b) __extension__ ({__typeof__(a) aa = (a); __typeof__(b) bb = (b); (aa > bb) ? (aa) : (bb);}) +# define LOWER_BOUND(current, other) __extension__ ({__typeof__(other) o = (other); ((current) < o) ? ((current) = o) : (current);}) +# define AT_LEAST(current, other) LOWER_BOUND(current, other) +# define MAX_IT(current, other) LOWER_BOUND(current, other) +# define UPPER_BOUND(current, other) __extension__ ({__typeof__(other) o = (other); ((current) > o) ? ((current) = o) : (current);}) +# define AT_MOST(current, other) UPPER_BOUND(current, other) +# define MIN_IT(current, other) UPPER_BOUND(current, other) +# define BOUND(val, min, max) __extension__ ({__typeof__(min) m1 = (min); __typeof__(max) m2 = (max); ((val) < m1) ? ((val) = m1) : (((val) > m2) ? ((val) = m2) : (val));}) +# define CONTAIN(val, min, max) BOUND(val, min, max) +# define SWAP_IT(one, two, tmp) do {(tmp) = (one); (one) = (two); (two) = (tmp);} while (0) +#else +# define MIN(a,b) (((a) < (b)) ? (a) : (b)) +# define MAX(a,b) (((a) > (b)) ? (a) : (b)) +# define LOWER_BOUND(current, other) (((current) < (other)) ? ((current) = (other)) : (current)) +# define AT_LEAST(current, other) LOWER_BOUND(current, other) +# define MAX_IT(current, other) LOWER_BOUND(current, other) +# define UPPER_BOUND(current, other) (((current) > (other)) ? ((current) = (other)) : (current)) +# define AT_MOST(current, other) UPPER_BOUND(current, other) +# define MIN_IT(current, other) UPPER_BOUND(current, other) +# define BOUND(val, min, max) (((val) < (min)) ? ((val) = (min)) : (((val) > (max)) ? ((val) = (max)) : (val))) +# define CONTAIN(val, min, max) BOUND(val, min, max) +# define SWAP_IT(one, two, tmp) do {(tmp) = (one); (one) = (two); (two) = (tmp);} while (0) +#endif + /****************************** DEBUGGING GOOP ********************************/ #ifndef LIBAST_DEBUG_FD # define LIBAST_DEBUG_FD (stderr) @@ -196,10 +230,14 @@ /* Use this for stuff that you only want turned on in dire situations */ #define D_NEVER(x) NOP +#define DEBUG_CONF 3 +#define D_CONF(x) DPRINTF3(x) #define DEBUG_MEM 5 #define D_MEM(x) DPRINTF5(x) #define DEBUG_STRINGS 9999 #define D_STRINGS(x) D_NEVER(x) +#define DEBUG_PARSE 9999 +#define D_PARSE(x) D_NEVER(x) @@ -310,6 +348,107 @@ +/******************************** CONF GOOP ***********************************/ + +#if defined(PATH_MAX) && (PATH_MAX < 255) +# undef PATH_MAX +#endif +#ifndef PATH_MAX +# define PATH_MAX 255 +#endif + +#define CONF_BEGIN_CHAR ((char) 1) +#define CONF_END_CHAR ((char) 2) + +#define BOOL_OPT_ISTRUE(s) (!strcasecmp((s), true_vals[0]) || !strcasecmp((s), true_vals[1]) \ + || !strcasecmp((s), true_vals[2]) || !strcasecmp((s), true_vals[3])) +#define BOOL_OPT_ISFALSE(s) (!strcasecmp((s), false_vals[0]) || !strcasecmp((s), false_vals[1]) \ + || !strcasecmp((s), false_vals[2]) || !strcasecmp((s), false_vals[3])) + +/* The context table */ +#define ctx_name_to_id(the_id, n, i) do { \ + for ((i)=0; (i) <= ctx_idx; (i)++) { \ + if (!strcasecmp((n), context[(i)].name)) { \ + (the_id) = (i); \ + break; \ + } \ + } \ + if ((i) > ctx_idx) (the_id) = 0; \ + } while (0) +#define ctx_id_to_name(id) (context[(id)].name) +#define ctx_id_to_func(id) (context[(id)].handler) + +/* The context state stack. This keeps track of the current context and each previous one. */ +#define ctx_push(ctx) conf_register_context_state(ctx) +#define ctx_pop() (ctx_state_idx--) +#define ctx_peek() (ctx_state[ctx_state_idx]) +#define ctx_peek_id() (ctx_state[ctx_state_idx].ctx_id) +#define ctx_peek_state() (ctx_state[ctx_state_idx].state) +#define ctx_peek_last_id() (ctx_state[(ctx_state_idx?ctx_state_idx-1:0)].ctx_id) +#define ctx_peek_last_state() (ctx_state[(ctx_state_idx?ctx_state_idx-1:0)].state) +#define ctx_poke_state(q) ((ctx_state[ctx_state_idx].state) = (q)) +#define ctx_get_depth() (ctx_state_idx) + +/* The file state stack */ +#define FILE_SKIP_TO_END (0x01) +#define FILE_PREPROC (0x02) +#define file_push(f, p, o, l, fl) conf_register_fstate(f, p, o, l, fl) +#define file_pop() (fstate_idx--) +#define file_peek() (fstate[fstate_idx]) +#define file_peek_fp() (fstate[fstate_idx].fp) +#define file_peek_path() (fstate[fstate_idx].path) +#define file_peek_outfile() (fstate[fstate_idx].outfile) +#define file_peek_line() (fstate[fstate_idx].line) +#define file_peek_skip() (fstate[fstate_idx].flags & FILE_SKIP_TO_END) +#define file_peek_preproc() (fstate[fstate_idx].flags & FILE_PREPROC) + +#define file_poke_fp(f) ((fstate[fstate_idx].fp) = (f)) +#define file_poke_path(p) ((fstate[fstate_idx].path) = (p)) +#define file_poke_outfile(o) ((fstate[fstate_idx].outfile) = (o)) +#define file_poke_line(l) ((fstate[fstate_idx].line) = (l)) +#define file_skip_to_end() ((fstate[fstate_idx].flags) |= (FILE_SKIP_TO_END)) +#define file_poke_skip(s) do {if (s) {fstate[fstate_idx].flags |= FILE_SKIP_TO_END;} else {fstate[fstate_idx].flags &= ~(FILE_SKIP_TO_END);} } while (0) +#define file_poke_preproc(s) do {if (s) {fstate[fstate_idx].flags |= FILE_PREPROC;} else {fstate[fstate_idx].flags &= ~(FILE_PREPROC);} } while (0) +#define file_poke(f, p, o, l, fl) do {file_poke_fp(f); file_poke_path(p); file_poke_outfile(o); file_poke_line(l); fstate[fstate_idx].flags = (fl);} while (0) + +#define file_inc_line() (fstate[fstate_idx].line++) + +/* Contexts */ +typedef void * (*ctx_handler_t)(char *, void *); +typedef struct context_struct { + char *name; + ctx_handler_t handler; +} ctx_t; +typedef struct ctx_state_struct { + unsigned char ctx_id; + void *state; +} ctx_state_t; + +/* Parser states */ +typedef struct file_state_struct { + FILE *fp; + char *path, *outfile; + unsigned long line; + unsigned char flags; +} fstate_t; + +/* Built-in functions */ +typedef char * (*conf_func_ptr_t) (char *); +typedef struct conf_func_struct { + char *name; + conf_func_ptr_t ptr; +} conf_func_t; + +typedef struct conf_var_struct { + char *var, *value; + struct conf_var_struct *next; +} conf_var_t; + +extern fstate_t *fstate; +extern unsigned char fstate_idx; + + + /******************************** PROTOTYPES **********************************/ /* msgs.c */ @@ -396,5 +535,17 @@ extern int vsnprintf(char *str, size_t count, const char *fmt, va_list args); extern int snprintf(char *str, size_t count, const char *fmt, ...); #endif + +/* conf.c */ +extern void conf_init_subsystem(void); +extern unsigned char conf_register_context(char *name, ctx_handler_t handler); +extern unsigned char conf_register_fstate(FILE *fp, char *path, char *outfile, unsigned long line, unsigned char flags); +extern unsigned char conf_register_builtin(char *name, conf_func_ptr_t ptr); +extern unsigned char conf_register_context_state(unsigned char ctx_id); +extern void conf_free_subsystem(void); +extern char *shell_expand(char *); +extern char *conf_find_file(const char *file, const char *dir, const char *pathlist); +extern FILE *open_config_file(char *name); +extern char *conf_parse(char *conf_name, const char *dir, const char *path); #endif /* _LIBAST_H_ */ =================================================================== RCS file: /cvsroot/enlightenment/eterm/libast/libast_internal.h,v retrieving revision 1.1 retrieving revision 1.2 diff -u -3 -r1.1 -r1.2 --- libast_internal.h 2000/10/30 22:02:42 1.1 +++ libast_internal.h 2001/06/12 00:03:21 1.2 @@ -1,5 +1,5 @@ /* - * Copyright (C) 1997-2000, Michael Jennings + * Copyright (C) 1997-2001, Michael Jennings * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to @@ -49,6 +49,11 @@ #ifdef HAVE_STDARG_H # include <stdarg.h> #endif + +/******************************** MSGS GOOP ***********************************/ +extern char *libast_program_name, *libast_program_version; + + /********************************* MEM GOOP ***********************************/ #define LIBAST_FNAME_LEN 20 =================================================================== RCS file: /cvsroot/enlightenment/eterm/libast/mem.c,v retrieving revision 1.4 retrieving revision 1.5 diff -u -3 -r1.4 -r1.5 --- mem.c 2001/05/10 00:21:44 1.4 +++ mem.c 2001/06/12 00:03:21 1.5 @@ -1,6 +1,6 @@ /* - * Copyright (C) 1997-2000, Michael Jennings + * Copyright (C) 1997-2001, Michael Jennings * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to @@ -22,7 +22,7 @@ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -static const char cvs_ident[] = "$Id: mem.c,v 1.4 2001/05/10 00:21:44 mej Exp $"; +static const char cvs_ident[] = "$Id: mem.c,v 1.5 2001/06/12 00:03:21 mej Exp $"; #ifdef HAVE_CONFIG_H # include <config.h> =================================================================== RCS file: /cvsroot/enlightenment/eterm/libast/msgs.c,v retrieving revision 1.3 retrieving revision 1.4 diff -u -3 -r1.3 -r1.4 --- msgs.c 2000/11/10 03:20:16 1.3 +++ msgs.c 2001/06/12 00:03:21 1.4 @@ -1,5 +1,5 @@ /* - * Copyright (C) 1997-2000, Michael Jennings + * Copyright (C) 1997-2001, Michael Jennings * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to @@ -21,7 +21,7 @@ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -static const char cvs_ident[] = "$Id: msgs.c,v 1.3 2000/11/10 03:20:16 mej Exp $"; +static const char cvs_ident[] = "$Id: msgs.c,v 1.4 2001/06/12 00:03:21 mej Exp $"; #ifdef HAVE_CONFIG_H # include <config.h> @@ -29,24 +29,24 @@ #include "libast_internal.h" -static char *program_name = PACKAGE, *program_version = VERSION; +char *libast_program_name = PACKAGE, *libast_program_version = VERSION; void libast_set_program_name(const char *progname) { - if (program_name && strcmp(program_name, PACKAGE)) { - FREE(program_name); + if (libast_program_name && strcmp(libast_program_name, PACKAGE)) { + FREE(libast_program_name); } - program_name = STRDUP(progname); + libast_program_name = STRDUP(progname); } void libast_set_program_version(const char *progversion) { - if (program_version && strcmp(program_version, VERSION)) { - FREE(program_version); + if (libast_program_version && strcmp(libast_program_version, VERSION)) { + FREE(libast_program_version); } - program_version = STRDUP(progversion); + libast_program_version = STRDUP(progversion); } int @@ -69,7 +69,7 @@ va_list arg_ptr; va_start(arg_ptr, fmt); - fprintf(stderr, "%s: Error: ", program_name); + fprintf(stderr, "%s: Error: ", libast_program_name); vfprintf(stderr, fmt, arg_ptr); va_end(arg_ptr); } @@ -81,7 +81,7 @@ va_list arg_ptr; va_start(arg_ptr, fmt); - fprintf(stderr, "%s: Warning: ", program_name); + fprintf(stderr, "%s: Warning: ", libast_program_name); vfprintf(stderr, fmt, arg_ptr); va_end(arg_ptr); } @@ -93,7 +93,7 @@ va_list arg_ptr; va_start(arg_ptr, fmt); - fprintf(stderr, "%s: FATAL: ", program_name); + fprintf(stderr, "%s: FATAL: ", libast_program_name); vfprintf(stderr, fmt, arg_ptr); va_end(arg_ptr); exit(-1); =================================================================== RCS file: /cvsroot/enlightenment/eterm/libast/strings.c,v retrieving revision 1.7 retrieving revision 1.8 diff -u -3 -r1.7 -r1.8 --- strings.c 2001/05/10 00:21:44 1.7 +++ strings.c 2001/06/12 00:03:21 1.8 @@ -1,5 +1,5 @@ /* - * Copyright (C) 1997-2000, Michael Jennings + * Copyright (C) 1997-2001, Michael Jennings * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to @@ -21,7 +21,7 @@ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -static const char cvs_ident[] = "$Id: strings.c,v 1.7 2001/05/10 00:21:44 mej Exp $"; +static const char cvs_ident[] = "$Id: strings.c,v 1.8 2001/06/12 00:03:21 mej Exp $"; #ifdef HAVE_CONFIG_H # include <config.h> @@ -278,7 +278,9 @@ char ** split_regexp(const char *regexp, const char *str) { - + USE_VAR(regexp); + USE_VAR(str); + return (NULL); } char * |
From: <enl...@li...> - 2001-06-15 23:56:06
|
Enlightenment CVS committal Author : mej Project : eterm Module : libast Dir : eterm/libast Modified Files: ChangeLog libast.spec.in Log Message: Fri Jun 15 16:50:54 PDT 2001 Michael Jennings <me...@et...> Cleaned up spec file in preparation for release. =================================================================== RCS file: /cvsroot/enlightenment/eterm/libast/ChangeLog,v retrieving revision 1.10 retrieving revision 1.11 diff -u -3 -r1.10 -r1.11 --- ChangeLog 2001/06/12 00:03:21 1.10 +++ ChangeLog 2001/06/15 23:56:05 1.11 @@ -71,3 +71,8 @@ to 0.3 now. ------------------------------------------------------------------------------- +Fri Jun 15 16:50:54 PDT 2001 Michael Jennings <me...@et...> + + Cleaned up spec file in preparation for release. + +------------------------------------------------------------------------------- =================================================================== RCS file: /cvsroot/enlightenment/eterm/libast/libast.spec.in,v retrieving revision 1.2 retrieving revision 1.3 diff -u -3 -r1.2 -r1.3 --- libast.spec.in 2001/01/16 07:45:09 1.2 +++ libast.spec.in 2001/06/15 23:56:05 1.3 @@ -7,7 +7,6 @@ Source: %{name}-%{version}.tar.gz URL: http://www.eterm.org/ BuildRoot: /var/tmp/%{name}-root -Prefix: %{_prefix} %description LibAST is the Library of Assorted Spiffy Things. It contains various @@ -15,6 +14,9 @@ functions. It currently has a built-in memory tracking subsystem as well as some debugging aids and other similar tools. +It's not documented yet, mostly because it's not finished. Hence the +version number that begins with 0. + %changelog %prep @@ -23,9 +25,9 @@ %build if [ -e ./configure ] then - %configure + %configure --prefix=%{_prefix} --bindir=%{_bindir} --libdir=%{_libdir} --includedir=%{_includedir} else - ./autogen.sh --prefix=%prefix + ./autogen.sh --prefix=%{_prefix} --bindir=%{_bindir} --libdir=%{_libdir} --includedir=%{_includedir} fi make @@ -42,6 +44,6 @@ %files %defattr(-,root,root) -%{_prefix}/bin/* -%{_prefix}/lib/* -%{_prefix}/include/* +%{_bindir}/* +%{_libdir}/* +%{_includedir}/* |
From: <enl...@li...> - 2001-06-16 00:35:56
|
Enlightenment CVS committal Author : mej Project : eterm Module : libast Dir : eterm/libast Modified Files: ChangeLog Log Message: Fri Jun 15 17:31:34 2001 Michael Jennings (mej) Converted the ChangeLog to Avalon's log format. Yay! :-) =================================================================== RCS file: /cvsroot/enlightenment/eterm/libast/ChangeLog,v retrieving revision 1.11 retrieving revision 1.12 diff -u -3 -r1.11 -r1.12 --- ChangeLog 2001/06/15 23:56:05 1.11 +++ ChangeLog 2001/06/16 00:35:55 1.12 @@ -1,78 +1,82 @@ ChangeLog ========= -This file contains a listing of modifications to libast in CVS on a per-commit -basis. Dates are included, as are nicknames/names/initials for the persons -making the changes. - - -Thu Nov 9 19:09:48 PST 2000 Michael Jennings <me...@et...> - - Added name- and version-setting functions since we can't just use - PACKAGE and VERSION any more. - -------------------------------------------------------------------------------- -Thu Nov 9 19:19:31 PST 2000 Michael Jennings <me...@et...> - - It usually helps if you finish writing the code BEFORE you commit it. - -------------------------------------------------------------------------------- -Thu Nov 16 16:38:55 PST 2000 Michael Jennings <me...@et...> - - Insure++ found a small logic error here that could result in a tiny - leak under certain circumstances. - -------------------------------------------------------------------------------- -Tue Jan 2 18:22:25 PST 2001 Michael Jennings <me...@et...> - - Added file.c for any file routines I write. The first one is a secure - temp file generator. If portability issues arise from non-POSIX - systems, they will be addressed here. - -------------------------------------------------------------------------------- -Mon May 7 19:08:45 PDT 2001 Michael Jennings <me...@et...> - - I have created a testbed for libast. You can now run "make test" to - run a series of tests which will test some of the functionality of the - library. I didn't finish all the tests I'll eventually have; I just - wanted to get the stuff that's immediately important. - - I also added a new split() function, which functions somewhat like its - Perl counterpart, although there are differences. This function will - be used in the remaining Eterm work I must do before release. - -------------------------------------------------------------------------------- -Mon May 7 22:16:11 PDT 2001 Michael Jennings <me...@et...> - - Moved chomp() to libast. It's awfully handy. - -------------------------------------------------------------------------------- -Tue May 8 19:51:51 PDT 2001 Michael Jennings <me...@et...> - - Added two more convenience functions: join(), also borrowed from - Perl, and free_array() for freeing lists. I also threw in a USE_VAR() - macro for getting rid of bogus unused variable warnings. - -------------------------------------------------------------------------------- -Wed May 9 17:20:46 PDT 2001 Michael Jennings <me...@et...> - - Better handling of NULL values all around. - -------------------------------------------------------------------------------- -Thu May 17 10:27:02 PDT 2001 Michael Jennings <me...@et...> - - Fixed "make distcheck." - -------------------------------------------------------------------------------- -Mon Jun 11 16:57:40 PDT 2001 Michael Jennings <me...@et...> - - I moved the config file code from Eterm to libast. I also relocated - some of the generic macros (MIN(), MAX(), BOUND(), etc.). Version up - to 0.3 now. - -------------------------------------------------------------------------------- -Fri Jun 15 16:50:54 PDT 2001 Michael Jennings <me...@et...> - - Cleaned up spec file in preparation for release. - -------------------------------------------------------------------------------- +This file contains a listing of modifications to libast in CVS on a +per-commit basis. Dates are included, as are the names and userid's +of the people making the changes. + +Contributors: + +mej - Michael Jennings ("KainX") <me...@et...> + +---------------------------------------------------------------------- +Thu Nov 9 19:09:48 PST 2000 Michael Jennings (mej) + +Added name- and version-setting functions since we can't just use +PACKAGE and VERSION any more. + +---------------------------------------------------------------------- +Thu Nov 9 19:19:31 PST 2000 Michael Jennings (mej) + +It usually helps if you finish writing the code BEFORE you commit it. + +---------------------------------------------------------------------- +Thu Nov 16 16:38:55 PST 2000 Michael Jennings (mej) + +Insure++ found a small logic error here that could result in a tiny +leak under certain circumstances. + +---------------------------------------------------------------------- +Tue Jan 2 18:22:25 PST 2001 Michael Jennings (mej) + +Added file.c for any file routines I write. The first one is a secure +temp file generator. If portability issues arise from non-POSIX +systems, they will be addressed here. + +---------------------------------------------------------------------- +Mon May 7 19:08:45 PDT 2001 Michael Jennings (mej) + +I have created a testbed for libast. You can now run "make test" to +run a series of tests which will test some of the functionality of the +library. I didn't finish all the tests I'll eventually have; I just +wanted to get the stuff that's immediately important. + +I also added a new split() function, which functions somewhat like its +Perl counterpart, although there are differences. This function will +be used in the remaining Eterm work I must do before release. + +---------------------------------------------------------------------- +Mon May 7 22:16:11 PDT 2001 Michael Jennings (mej) + +Moved chomp() to libast. It's awfully handy. + +---------------------------------------------------------------------- +Tue May 8 19:51:51 PDT 2001 Michael Jennings (mej) + +Added two more convenience functions: join(), also borrowed from +Perl, and free_array() for freeing lists. I also threw in a USE_VAR() +macro for getting rid of bogus unused variable warnings. + +---------------------------------------------------------------------- +Wed May 9 17:20:46 PDT 2001 Michael Jennings (mej) + +Better handling of NULL values all around. + +---------------------------------------------------------------------- +Thu May 17 10:27:02 PDT 2001 Michael Jennings (mej) + +Fixed "make distcheck." + +---------------------------------------------------------------------- +Mon Jun 11 16:57:40 PDT 2001 Michael Jennings (mej) + +I moved the config file code from Eterm to libast. I also relocated +some of the generic macros (MIN(), MAX(), BOUND(), etc.). Version up +to 0.3 now. + +---------------------------------------------------------------------- +Fri Jun 15 16:50:54 PDT 2001 Michael Jennings (mej) + +Cleaned up spec file in preparation for release. + +---------------------------------------------------------------------- |
From: <enl...@li...> - 2001-06-16 06:44:52
|
Enlightenment CVS committal Author : mej Project : eterm Module : libast Dir : eterm/libast Modified Files: conf.c libast.h Log Message: Fri Jun 15 23:40:45 2001 Michael Jennings (mej) Moved the parsing of each config file line into a separate function. You'll see why in a moment. =================================================================== RCS file: /cvsroot/enlightenment/eterm/libast/conf.c,v retrieving revision 1.1 retrieving revision 1.2 diff -u -3 -r1.1 -r1.2 --- conf.c 2001/06/12 00:03:21 1.1 +++ conf.c 2001/06/16 06:44:51 1.2 @@ -21,7 +21,7 @@ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -static const char cvs_ident[] = "$Id: conf.c,v 1.1 2001/06/12 00:03:21 mej Exp $"; +static const char cvs_ident[] = "$Id: conf.c,v 1.2 2001/06/16 06:44:51 mej Exp $"; #ifdef HAVE_CONFIG_H # include <config.h> @@ -756,7 +756,6 @@ FILE * open_config_file(char *name) { - FILE *fp; int ver; char buff[256], test[30], *begin_ptr, *end_ptr; @@ -784,15 +783,103 @@ return (fp); } -char * -conf_parse(char *conf_name, const char *dir, const char *path) { +#define CONF_PARSE_RET() do {if (!fp) {file_pop(); ctx_end();} return;} while (0) +void +conf_parse_line(FILE *fp, char *buff) +{ + register unsigned long i = 0; + unsigned char id; + void *state = NULL; + + ASSERT(buff != NULL); + + if (!(*buff) || *buff == '\n' || *buff == '#' || *buff == '<') { + CONF_PARSE_RET(); + } + if (fp == NULL) { + file_push(NULL, "<argv>", NULL, 0, 0); + ctx_begin(1); + buff = get_pword(2, buff); + if (!buff) { + CONF_PARSE_RET(); + } + } + id = ctx_peek_id(); + chomp(buff); + D_CONF(("Parsing line #%lu of file %s\n", file_peek_line(), file_peek_path())); + switch (*buff) { + case '%': + if (!BEG_STRCASECMP(get_pword(1, buff + 1), "include ")) { + char *path; + FILE *fp; + + shell_expand(buff); + path = get_word(2, buff + 1); + if ((fp = open_config_file(path)) == NULL) { + print_error("Parsing file %s, line %lu: Unable to locate %%included config file %s (%s), continuing\n", file_peek_path(), file_peek_line(), + path, strerror(errno)); + } else { + file_push(fp, path, NULL, 1, 0); + } + } else if (!BEG_STRCASECMP(get_pword(1, buff + 1), "preproc ")) { + char cmd[PATH_MAX], fname[PATH_MAX], *outfile; + int fd; + FILE *fp; + if (file_peek_preproc()) { + CONF_PARSE_RET(); + } + strcpy(fname, "Eterm-preproc-"); + fd = libast_temp_file(fname, PATH_MAX); + outfile = STRDUP(fname); + snprintf(cmd, PATH_MAX, "%s < %s > %s", get_pword(2, buff), file_peek_path(), fname); + system(cmd); + fp = fdopen(fd, "rt"); + if (fp != NULL) { + fclose(file_peek_fp()); + file_poke_fp(fp); + file_poke_preproc(1); + file_poke_outfile(outfile); + } + } else { + if (file_peek_skip()) { + CONF_PARSE_RET(); + } + shell_expand(buff); + } + break; + case 'b': + if (file_peek_skip()) { + CONF_PARSE_RET(); + } + if (!BEG_STRCASECMP(buff, "begin ")) { + ctx_begin(2); + break; + } + /* Intentional pass-through */ + case 'e': + if (!BEG_STRCASECMP(buff, "end ") || !strcasecmp(buff, "end")) { + ctx_end(); + break; + } + /* Intentional pass-through */ + default: + if (file_peek_skip()) { + CONF_PARSE_RET(); + } + shell_expand(buff); + ctx_poke_state((*ctx_id_to_func(id))(buff, ctx_peek_state())); + } + CONF_PARSE_RET(); +} +#undef CONF_PARSE_RET + +char * +conf_parse(char *conf_name, const char *dir, const char *path) +{ FILE *fp; - char *name = NULL, *outfile, *p = "."; + char *name = NULL, *p = "."; char buff[CONFIG_BUFF], orig_dir[PATH_MAX]; - register unsigned long i = 0; - unsigned char id = 0; - void *state = NULL; REQUIRE_RVAL(conf_name != NULL, 0); @@ -823,99 +910,8 @@ print_error("Parse error in file %s, line %lu: line too long\n", file_peek_path(), file_peek_line()); for (; fgets(buff, CONFIG_BUFF, file_peek_fp()) && !strrchr(buff, '\n');); continue; - } - if (!(*buff) || *buff == '\n') { - continue; - } - chomp(buff); - switch (*buff) { - case '#': - case '<': - break; - case '%': - D_CONF(("read_config(): Parsing line #%lu of file %s\n", file_peek_line(), file_peek_path())); - if (!BEG_STRCASECMP(get_pword(1, buff + 1), "include ")) { - char *path; - FILE *fp; - - shell_expand(buff); - path = get_word(2, buff + 1); - if ((fp = open_config_file(path)) == NULL) { - print_error("Error in file %s, line %lu: Unable to locate %%included config file %s (%s), continuing\n", file_peek_path(), file_peek_line(), - path, strerror(errno)); - } else { - file_push(fp, path, NULL, 1, 0); - } - } else if (!BEG_STRCASECMP(get_pword(1, buff + 1), "preproc ")) { - char cmd[PATH_MAX], fname[PATH_MAX]; - int fd; - FILE *fp; - - if (file_peek_preproc()) { - continue; - } - strcpy(fname, "Eterm-preproc-"); - fd = libast_temp_file(fname, PATH_MAX); - outfile = STRDUP(fname); - snprintf(cmd, PATH_MAX, "%s < %s > %s", get_pword(2, buff), file_peek_path(), fname); - system(cmd); - fp = fdopen(fd, "rt"); - if (fp != NULL) { - fclose(file_peek_fp()); - file_poke_fp(fp); - file_poke_preproc(1); - file_poke_outfile(outfile); - } - } else { - D_CONF(("read_config(): Parsing line #%lu of file %s\n", file_peek_line(), file_peek_path())); - if (file_peek_skip()) { - continue; - } - shell_expand(buff); - } - break; - case 'b': - D_CONF(("read_config(): Parsing line #%lu of file %s\n", file_peek_line(), file_peek_path())); - if (file_peek_skip()) { - continue; - } - if (!BEG_STRCASECMP(buff, "begin ")) { - name = get_pword(2, buff); - ctx_name_to_id(id, name, i); - ctx_push(id); - *buff = CONF_BEGIN_CHAR; - state = (*ctx_id_to_func(id))(buff, ctx_peek_last_state()); - ctx_poke_state(state); - break; - } - /* Intentional pass-through */ - case 'e': - if (*buff != 'b') { - D_CONF(("read_config(): Parsing line #%lu of file %s\n", file_peek_line(), file_peek_path())); - } - if (!BEG_STRCASECMP(buff, "end ") || !strcasecmp(buff, "end")) { - if (ctx_get_depth()) { - *buff = CONF_END_CHAR; - state = (*ctx_id_to_func(id))(buff, ctx_peek_state()); - ctx_poke_state(NULL); - ctx_pop(); - id = ctx_peek_id(); - ctx_poke_state(state); - file_poke_skip(0); - } - break; - } - /* Intentional pass-through */ - default: - if (*buff != 'b' && *buff != 'e') { - D_CONF(("read_config(): Parsing line #%lu of file %s\n", file_peek_line(), file_peek_path())); - } - if (file_peek_skip()) { - continue; - } - shell_expand(buff); - ctx_poke_state((*ctx_id_to_func(id))(buff, ctx_peek_state())); } + conf_parse_line(fp, buff); } fclose(file_peek_fp()); if (file_peek_preproc()) { =================================================================== RCS file: /cvsroot/enlightenment/eterm/libast/libast.h,v retrieving revision 1.8 retrieving revision 1.9 diff -u -3 -r1.8 -r1.9 --- libast.h 2001/06/12 00:03:21 1.8 +++ libast.h 2001/06/16 06:44:51 1.9 @@ -358,7 +358,9 @@ #endif #define CONF_BEGIN_CHAR ((char) 1) +#define CONF_BEGIN_STRING "\001" #define CONF_END_CHAR ((char) 2) +#define CONF_END_STRING "\002" #define BOOL_OPT_ISTRUE(s) (!strcasecmp((s), true_vals[0]) || !strcasecmp((s), true_vals[1]) \ || !strcasecmp((s), true_vals[2]) || !strcasecmp((s), true_vals[3])) @@ -373,7 +375,10 @@ break; \ } \ } \ - if ((i) > ctx_idx) (the_id) = 0; \ + if ((i) > ctx_idx) { \ + print_error("Parsing file %s, line %lu: No such context \"%s\"\n", file_peek_path(), file_peek_line(), (n)); \ + (the_id) = 0; \ + } \ } while (0) #define ctx_id_to_name(id) (context[(id)].name) #define ctx_id_to_func(id) (context[(id)].handler) @@ -388,6 +393,25 @@ #define ctx_peek_last_state() (ctx_state[(ctx_state_idx?ctx_state_idx-1:0)].state) #define ctx_poke_state(q) ((ctx_state[ctx_state_idx].state) = (q)) #define ctx_get_depth() (ctx_state_idx) +#define ctx_begin(idx) do { \ + char *name; \ + name = get_word(idx, buff); \ + ctx_name_to_id(id, name, i); \ + ctx_push(id); \ + state = (*ctx_id_to_func(id))(CONF_BEGIN_STRING, ctx_peek_last_state()); \ + ctx_poke_state(state); \ + FREE(name); \ + } while (0) +#define ctx_end() do { \ + if (ctx_get_depth()) { \ + state = (*ctx_id_to_func(id))(CONF_END_STRING, ctx_peek_state()); \ + ctx_poke_state(NULL); \ + ctx_pop(); \ + id = ctx_peek_id(); \ + ctx_poke_state(state); \ + file_poke_skip(0); \ + } \ + } while (0) /* The file state stack */ #define FILE_SKIP_TO_END (0x01) @@ -546,6 +570,7 @@ extern char *shell_expand(char *); extern char *conf_find_file(const char *file, const char *dir, const char *pathlist); extern FILE *open_config_file(char *name); +extern void conf_parse_line(FILE *fp, char *buff); extern char *conf_parse(char *conf_name, const char *dir, const char *path); #endif /* _LIBAST_H_ */ |