/*
- *
+ * A basic toolset containing miscellaneous functions for string manipluation,
+ * encoding/decoding, and a bunch of other stuff.
*/
static byte dtable[256] = "\0"; /* base64 decode table */
static byte etable[256] = "\0"; /* base64 encode table */
-/* Month strings for date conversions */
-char *ascmonths[12] = {
- "Jan", "Feb", "Mar", "Apr", "May", "Jun",
- "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
-};
-
char *safestrncpy(char *dest, const char *src, size_t n)
{
int i = 0;
{
char buf[32];
- extract_token(buf, source, parmnum, '|', sizeof buf);
- return(atoi(buf));
+ if (extract_token(buf, source, parmnum, '|', sizeof buf) > 0)
+ return(atoi(buf));
+ else
+ return 0;
}
/*
{
char buf[32];
- extract_token(buf, source, parmnum, '|', sizeof buf);
- return(atol(buf));
+ if (extract_token(buf, source, parmnum, '|', sizeof buf) > 0)
+ return(atol(buf));
+ else
+ return 0;
}
{
char buf[32];
- extract_token(buf, source, parmnum, '|', sizeof buf);
- return strtoul(buf, NULL, 10);
+ if (extract_token(buf, source, parmnum, '|', sizeof buf) > 0)
+ return strtoul(buf, NULL, 10);
+ else
+ return 0;
}
struct tm tm;
int hour;
+ /* Month strings for date conversions ... this needs to be localized eventually */
+ char *fmt_date_months[12] = {
+ "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
+ };
+
strcpy(buf, "");
localtime_r(&thetime, &tm);
if (seconds) {
snprintf(buf, n, "%s %d %4d %d:%02d:%02d%s",
- ascmonths[tm.tm_mon],
+ fmt_date_months[tm.tm_mon],
tm.tm_mday,
tm.tm_year + 1900,
hour,
);
} else {
snprintf(buf, n, "%s %d %4d %d:%02d%s",
- ascmonths[tm.tm_mon],
+ fmt_date_months[tm.tm_mon],
tm.tm_mday,
tm.tm_year + 1900,
hour,
return ret;
}
-/*
- * Escape a string for feeding out as a URL.
- * Output buffer must be big enough to handle escape expansion!
+/**
+ * \brief Escape a string for feeding out as a URL.
+ * \param outbuf the output buffer
+ * \param oblen the size of outbuf to sanitize
+ * \param strbuf the input buffer
*/
-void urlesc(char *outbuf, char *strbuf)
+void urlesc(char *outbuf, size_t oblen, char *strbuf)
{
- int a, b, c;
- char *ec = " #&;`'|*?-~<>^()[]{}$\\";
+ int a, b, c, len, eclen, olen;
+ char *ec = " +#&;`'|*?-~<>^()[]{}/$\"\\";
strcpy(outbuf, "");
-
- for (a = 0; a < (int)strlen(strbuf); ++a) {
+ len = strlen(strbuf);
+ eclen = strlen(ec);
+ olen = 0;
+ for (a = 0; a < len; ++a) {
c = 0;
- for (b = 0; b < strlen(ec); ++b) {
+ for (b = 0; b < eclen; ++b) {
if (strbuf[a] == ec[b])
c = 1;
}
- b = strlen(outbuf);
- if (c == 1)
- sprintf(&outbuf[b], "%%%02x", strbuf[a]);
- else
- sprintf(&outbuf[b], "%c", strbuf[a]);
+ if (c == 1) {
+ snprintf(&outbuf[olen], oblen - olen, "%%%02x", strbuf[a]);
+ olen += 3;
+ }
+ else
+ outbuf[olen ++] = strbuf[a];
}
+ outbuf[olen] = '\0';
}
}
-/**
+/*
* \brief searches for a paternn within asearch string
* \param search the string to search
* \param patn the pattern to find in string