/* Copyright 1989, 1990 by James Aspnes, David Applegate, and Bennet Yee */ /* See the file COPYING for distribution information */ #include <ctype.h> #include "db.h" /* note: it's ok if from == to */ void strip_whitespace(const char *from, char *to) { while(*from) { /* scan over word */ while(*from && !isspace(*from)) *to++ = *from++; /* smash spaces */ while(*from && isspace(*from)) from++; if(*from) *to++ = ' '; /* add a space to separate next word */ } /* terminate */ *to = '\0'; } const char *time_string(datum t) { extern char *ctime(long *); char *time_string; time_string = ctime(&t); /* kludge to get around high-octane ctime brain-damage */ time_string[24] = '\0'; return time_string; } const char *alloc_string(const char *string) { char *s; /* NULL->NULL */ if(string == 0) return 0; if((s = (char *) malloc(strlen(string)+1)) == 0) { abort(); } strcpy(s, string); return s; } datum concat(datum s1, datum s2) { char buf[MAX_STRLEN]; const char *c1; const char *c2; if((c1 = string(s1)) == NOTHING) { return s2; } else if((c2 = string(s2)) == NOTHING) { return s1; } else if(strlen(c1) + strlen(c2) + 1 > MAX_STRLEN) { /* too big, you lose */ return NOTHING; } else { strcpy(buf, c1); strcat(buf, c2); return intern(buf); } } datum num_to_string(datum x) { char buf[MAX_STRLEN]; sprintf(buf, "%d", x); return intern(buf); }