2 * tools.c -- Miscellaneous routines
13 #include <sys/types.h>
15 #include <sys/socket.h>
18 #include <netinet/in.h>
31 "Jan", "Feb", "Mar", "Apr", "May", "Jun",
32 "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
36 "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"
40 char *safestrncpy(char *dest, const char *src, size_t n)
42 if (dest == NULL || src == NULL) {
43 fprintf(stderr, "safestrncpy: NULL argument\n");
46 strncpy(dest, src, n);
53 * num_parms() - discover number of parameters...
55 int num_parms(char *source)
60 for (a = 0; a < strlen(source); ++a)
67 * extract() - extract a parameter from a series of "|" separated...
69 void extract(char *dest, char *source, int parmnum)
75 if (strlen(source) == 0) {
79 n = num_parms(source);
86 if ((parmnum == 0) && (n == 1)) {
88 for (n = 0; n < strlen(dest); ++n)
93 while (count++ < parmnum)
96 } while ((strlen(buf) > 0) && (buf[0] != '|'));
99 for (count = 0; count < strlen(buf); ++count)
100 if (buf[count] == '|')
106 * extract_int() - extract an int parm w/o supplying a buffer
108 int extract_int(char *source, int parmnum)
112 extract(buf, source, parmnum);
117 * extract_long() - extract an long parm w/o supplying a buffer
119 long extract_long(char *source, long int parmnum)
123 extract(buf, source, parmnum);
129 * check for the presence of a character within a string (returns count)
137 for (a = 0; a < strlen(st); ++a)
145 * Format a date/time stamp for output
147 void fmt_date(char *buf, time_t thetime) {
151 tm = localtime(&thetime);
153 sprintf(buf, "%s %d %d %2d:%02d%s",
154 ascmonths[tm->tm_mon],
157 ( (tm->tm_hour > 12) ? (tm->tm_hour - 12) : (tm->tm_hour) ),
159 ( (tm->tm_hour > 12) ? "pm" : "am" )
167 * Format a date/time stamp to the format used in HTTP headers
169 void httpdate(char *buf, time_t thetime) {
173 tm = localtime(&thetime);
175 sprintf(buf, "%s, %02d %s %4d %02d:%02d:%02d",
176 ascdays[tm->tm_wday],
178 ascmonths[tm->tm_mon],
191 * Utility function to "readline" from memory
192 * (returns new pointer)
194 char *memreadline(char *start, char *buf, int maxlen)
198 int len = 0; /* tally our own length to avoid strlen() delays */
201 memset(buf, 0, maxlen);
205 if ( (len < (maxlen - 1)) && (ch != 13) && (ch != 10) ) {
206 buf[strlen(buf) + 1] = 0;
207 buf[strlen(buf)] = ch;
210 if ((ch == 10) || (ch == 0)) {