* unbreak mu-str

This commit is contained in:
Dirk-Jan C. Binnema
2011-01-21 20:13:18 -05:00
parent abd1a45d6c
commit a2dbe365c6

View File

@ -34,305 +34,306 @@
/* not all systems provide PATH_MAX in limits.h */ /* not all systems provide PATH_MAX in limits.h */
#ifndef PATH_MAX #ifndef PATH_MAX
#include <sys/param.h> #include <sys/param.h>
/* #ifndef PATH_MAX */ #ifndef PATH_MAX
/* #define PATH_MAX MAXPATHLEN */ #define PATH_MAX MAXPATHLEN
/* #endif /\*!PATH_MAX*\/ */ #endif /*!PATH_MAX*/
/* #endif /\*PATH_MAX*\/ */ #endif /*PATH_MAX*/
/* #include "mu-str.h" */ #include "mu-str.h"
/* #include "mu-msg-flags.h" */ #include "mu-msg-flags.h"
/* #include "mu-msg-fields.h" */ #include "mu-msg-fields.h"
/* const char* */ const char*
/* mu_str_date_s (const char* frm, time_t t) */ mu_str_date_s (const char* frm, time_t t)
/* { */ {
/* struct tm *tmbuf; */ struct tm *tmbuf;
/* static char buf[128]; */ static char buf[128];
/* g_return_val_if_fail (frm, NULL); */ g_return_val_if_fail (frm, NULL);
/* tmbuf = localtime(&t); */ tmbuf = localtime(&t);
/* strftime (buf, sizeof(buf), frm, tmbuf); */ strftime (buf, sizeof(buf), frm, tmbuf);
/* return buf; */ return buf;
/* } */ }
/* char* */ char*
/* mu_str_date (const char *frm, time_t t) */ mu_str_date (const char *frm, time_t t)
/* { */ {
/* return g_strdup (mu_str_date_s(frm, t)); */ return g_strdup (mu_str_date_s(frm, t));
/* } */ }
/* const char* */ const char*
/* mu_str_display_date_s (time_t t) */ mu_str_display_date_s (time_t t)
/* { */ {
/* time_t now; */ time_t now;
/* static const time_t SECS_IN_DAY = 24 * 60 * 60; */ static const time_t SECS_IN_DAY = 24 * 60 * 60;
/* now = time (NULL); */ now = time (NULL);
/* if (ABS(now - t) > SECS_IN_DAY) */ if (ABS(now - t) > SECS_IN_DAY)
/* return mu_str_date_s ("%x", t); */ return mu_str_date_s ("%x", t);
/* else */ else
/* return mu_str_date_s ("%X", t); */ return mu_str_date_s ("%X", t);
/* } */ }
/* const char* */ const char*
/* mu_str_size_s (size_t s) */ mu_str_size_s (size_t s)
/* { */ {
/* static char buf[32]; */ static char buf[32];
/* #ifdef HAVE_GLIB216 */ #ifdef HAVE_GLIB216
/* char *tmp; */ char *tmp;
/* tmp = g_format_size_for_display ((goffset)s); */ tmp = g_format_size_for_display ((goffset)s);
/* strncpy (buf, tmp, sizeof(buf)); */ strncpy (buf, tmp, sizeof(buf));
/* buf[sizeof(buf) -1] = '\0'; /\* just in case *\/ */ buf[sizeof(buf) -1] = '\0'; /* just in case */
/* g_free (tmp); */ g_free (tmp);
/* #else */ #else
/* if (s >= 1000 * 1000) */ if (s >= 1000 * 1000)
/* g_snprintf(buf, sizeof(buf), "%.1f MB", */ g_snprintf(buf, sizeof(buf), "%.1f MB",
/* (double)s/(1000*1000)); */ (double)s/(1000*1000));
/* else */ else
/* g_snprintf(buf, sizeof(buf), "%.1f kB", (double)s/(1000)); */ g_snprintf(buf, sizeof(buf), "%.1f kB", (double)s/(1000));
/* #endif /\*HAVE_GLIB216*\/ */ #endif /*HAVE_GLIB216*/
/* return buf; */ return buf;
/* } */ }
/* char* */ char*
/* mu_str_size (size_t s) */ mu_str_size (size_t s)
/* { */ {
/* return g_strdup (mu_str_size_s(s)); */ return g_strdup (mu_str_size_s(s));
/* } */ }
/* const char* */ const char*
/* mu_str_flags_s (MuMsgFlags flags) */ mu_str_flags_s (MuMsgFlags flags)
/* { */ {
/* return mu_msg_flags_str_s (flags); */ return mu_msg_flags_str_s (flags);
/* } */ }
/* char* */ char*
/* mu_str_flags (MuMsgFlags flags) */ mu_str_flags (MuMsgFlags flags)
/* { */ {
/* return g_strdup (mu_str_flags_s(flags)); */ return g_strdup (mu_str_flags_s(flags));
/* } */ }
/* char* */ char*
/* mu_str_summarize (const char* str, size_t max_lines) */ mu_str_summarize (const char* str, size_t max_lines)
/* { */ {
/* char *summary; */ char *summary;
/* size_t nl_seen; */ size_t nl_seen;
/* unsigned i,j; */ unsigned i,j;
/* gboolean last_was_blank; */ gboolean last_was_blank;
/* g_return_val_if_fail (str, NULL); */ g_return_val_if_fail (str, NULL);
/* g_return_val_if_fail (max_lines > 0, NULL); */ g_return_val_if_fail (max_lines > 0, NULL);
/* /\* len for summary <= original len *\/ */ /* len for summary <= original len */
/* summary = g_new (gchar, strlen(str) + 1); */ summary = g_new (gchar, strlen(str) + 1);
/* /\* copy the string up to max_lines lines, replace CR/LF/tab with */ /* copy the string up to max_lines lines, replace CR/LF/tab with
/* * single space *\/ */ * single space */
/* for (i = j = 0, nl_seen = 0, last_was_blank = TRUE; */ for (i = j = 0, nl_seen = 0, last_was_blank = TRUE;
/* nl_seen < max_lines && str[i] != '\0'; ++i) { */ nl_seen < max_lines && str[i] != '\0'; ++i) {
/* if (str[i] == '\n' || str[i] == '\r' || */ if (str[i] == '\n' || str[i] == '\r' ||
/* str[i] == '\t' || str[i] == ' ' ) { */ str[i] == '\t' || str[i] == ' ' ) {
/* if (str[i] == '\n') */ if (str[i] == '\n')
/* ++nl_seen; */ ++nl_seen;
/* /\* no double-blanks or blank at end of str *\/ */ /* no double-blanks or blank at end of str */
/* if (!last_was_blank && str[i+1] != '\0') */ if (!last_was_blank && str[i+1] != '\0')
/* summary[j++] = ' '; */ summary[j++] = ' ';
/* last_was_blank = TRUE; */ last_was_blank = TRUE;
/* } else { */ } else {
/* summary[j++] = str[i]; */ summary[j++] = str[i];
/* last_was_blank = FALSE; */ last_was_blank = FALSE;
/* } */ }
/* } */ }
/* summary[j] = '\0'; */ summary[j] = '\0';
/* return summary; */ return summary;
/* } */ }
/* /\* this is still somewhat simplistic... *\/ */ /* this is still somewhat simplistic... */
/* const char* */ const char*
/* mu_str_display_contact_s (const char *str) */ mu_str_display_contact_s (const char *str)
/* { */ {
/* static gchar contact[255]; */ static gchar contact[255];
/* gchar *c, *c2; */ gchar *c, *c2;
/* str = str ? str : ""; */ str = str ? str : "";
/* g_strlcpy (contact, str, sizeof(contact)); */ g_strlcpy (contact, str, sizeof(contact));
/* /\* we check for '<', so we can strip out the address stuff in */ /* we check for '<', so we can strip out the address stuff in
/* * e.g. 'Hello World <hello@world.xx>, but only if there is */ * e.g. 'Hello World <hello@world.xx>, but only if there is
/* * something alphanumeric before the < */ * something alphanumeric before the <
/* *\/ */ */
/* c = g_strstr_len (contact, -1, "<"); */ c = g_strstr_len (contact, -1, "<");
/* if (c != NULL) { */ if (c != NULL) {
/* for (c2 = contact; c2 < c && !(isalnum(*c2)); ++c2); */ for (c2 = contact; c2 < c && !(isalnum(*c2)); ++c2);
/* if (c2 != c) /\* apparently, there was something, */ if (c2 != c) /* apparently, there was something,
/* * so we can remove the <... part*\/ */ * so we can remove the <... part*/
/* *c = '\0'; */ *c = '\0';
/* } */ }
/* /\* replace "'<> with space *\/ */ /* replace "'<> with space */
/* for (c2 = contact; *c2; ++c2) */ for (c2 = contact; *c2; ++c2)
/* if (*c2 == '"' || *c2 == '\'' || *c2 == '<' || *c2 == '>') */ if (*c2 == '"' || *c2 == '\'' || *c2 == '<' || *c2 == '>')
/* *c2 = ' '; */ *c2 = ' ';
/* /\* FIXME: this breaks cc10 *\/ */ /* FIXME: this breaks cc10 */
/* /\* remove everything between '()' if it's after the 5th pos*\/ */ /* remove everything between '()' if it's after the 5th pos;
/* /\* c = g_strstr_len (contact, -1, "("); *\/ */ * good to cleanup corporate contact address spam... */
/* /\* if (c && c - contact > 5) *\/ */ c = g_strstr_len (contact, -1, "(");
/* /\* *c = '\0'; *\/ */ if (c && c - contact > 5)
*c = '\0';
/* g_strstrip (contact); */
g_strstrip (contact);
/* return contact; */
/* } */ return contact;
}
/* char* */
/* mu_str_display_contact (const char *str) */ char*
/* { */ mu_str_display_contact (const char *str)
/* g_return_val_if_fail (str, NULL); */ {
g_return_val_if_fail (str, NULL);
/* return g_strdup (mu_str_display_contact_s (str)); */
/* } */ return g_strdup (mu_str_display_contact_s (str));
}
/* struct _CheckPrefix { */
/* const char *pfx; */ struct _CheckPrefix {
/* guint len; */ const char *pfx;
/* gboolean match; */ guint len;
/* }; */ gboolean match;
/* typedef struct _CheckPrefix CheckPrefix; */ };
typedef struct _CheckPrefix CheckPrefix;
/* static void */
/* each_check_prefix (MuMsgFieldId mfid, CheckPrefix *cpfx) */ static void
/* { */ each_check_prefix (MuMsgFieldId mfid, CheckPrefix *cpfx)
/* const char *field_name; */ {
/* char field_shortcut; */ const char *field_name;
char field_shortcut;
/* if (!cpfx || cpfx->match) */
/* return; */ if (!cpfx || cpfx->match)
return;
/* field_shortcut = mu_msg_field_shortcut (mfid); */
/* if (field_shortcut == cpfx->pfx[0] && cpfx->pfx[1] == ':') { */ field_shortcut = mu_msg_field_shortcut (mfid);
/* cpfx->match = TRUE; */ if (field_shortcut == cpfx->pfx[0] && cpfx->pfx[1] == ':') {
/* return; */ cpfx->match = TRUE;
/* } */ return;
}
/* field_name = mu_msg_field_name (mfid); */
/* if (field_name && */ field_name = mu_msg_field_name (mfid);
/* strncmp (cpfx->pfx, field_name, cpfx->len) == 0) { */ if (field_name &&
/* cpfx->match = TRUE; */ strncmp (cpfx->pfx, field_name, cpfx->len) == 0) {
/* return; */ cpfx->match = TRUE;
/* } */ return;
/* } */ }
}
/* /\* colon is a position inside q pointing at a ':' character. function */
/* * determines whether the prefix is a registered prefix (like */ /* colon is a position inside q pointing at a ':' character. function
/* * 'subject' or 'from' or 's') *\/ */ * determines whether the prefix is a registered prefix (like
/* static gboolean */ * 'subject' or 'from' or 's') */
/* is_xapian_prefix (const char *q, const char *colon) */ static gboolean
/* { */ is_xapian_prefix (const char *q, const char *colon)
/* const char *cur; */ {
const char *cur;
/* if (colon == q) */
/* return FALSE; /\* : at beginning, not a prefix *\/ */ if (colon == q)
return FALSE; /* : at beginning, not a prefix */
/* /\* track back from colon until a boundary or beginning of the */
/* * str *\/ */ /* track back from colon until a boundary or beginning of the
/* for (cur = colon - 1; cur >= q; --cur) { */ * str */
for (cur = colon - 1; cur >= q; --cur) {
/* if (cur == q || !isalpha (*(cur-1))) { */
if (cur == q || !isalpha (*(cur-1))) {
/* CheckPrefix cpfx; */
/* memset (&cpfx, 0, sizeof(CheckPrefix)); */ CheckPrefix cpfx;
memset (&cpfx, 0, sizeof(CheckPrefix));
/* cpfx.pfx = cur; */
/* cpfx.len = (colon - cur); */ cpfx.pfx = cur;
/* cpfx.match = FALSE; */ cpfx.len = (colon - cur);
cpfx.match = FALSE;
/* mu_msg_field_foreach ((MuMsgFieldForEachFunc) */
/* each_check_prefix, */ mu_msg_field_foreach ((MuMsgFieldForEachFunc)
/* &cpfx); */ each_check_prefix,
&cpfx);
/* return (cpfx.match); */
/* } */ return (cpfx.match);
/* } */ }
}
/* return FALSE; */
/* } */ return FALSE;
}
/* time_t */
/* mu_str_date_parse_hdwmy (const char* str) */ time_t
/* { */ mu_str_date_parse_hdwmy (const char* str)
/* long int num; */ {
/* char *end; */ long int num;
/* time_t now, delta; */ char *end;
/* time_t never = (time_t)-1; */ time_t now, delta;
time_t never = (time_t)-1;
/* g_return_val_if_fail (str, never); */
g_return_val_if_fail (str, never);
/* num = strtol (str, &end, 10); */
/* if (num <= 0 || num > 9999) */ num = strtol (str, &end, 10);
/* return never; */ if (num <= 0 || num > 9999)
return never;
/* if (!end || end[1] != '\0') */
/* return never; */ if (!end || end[1] != '\0')
return never;
/* switch (end[0]) { */
/* case 'h': /\* hour *\/ */ switch (end[0]) {
/* delta = num * 60 * 60; break; */ case 'h': /* hour */
/* case 'd': /\* day *\/ */ delta = num * 60 * 60; break;
/* delta = num * 24 * 60 * 60; break; */ case 'd': /* day */
/* case 'w': /\* week *\/ */ delta = num * 24 * 60 * 60; break;
/* delta = num * 7 * 24 * 60 * 60; break; */ case 'w': /* week */
/* case 'm': */ delta = num * 7 * 24 * 60 * 60; break;
/* delta = num * 30 * 24 * 60 * 60; break; */ case 'm':
/* case 'y': */ delta = num * 30 * 24 * 60 * 60; break;
/* delta = num * 365 * 24 * 60 * 60; break; */ case 'y':
/* default: */ delta = num * 365 * 24 * 60 * 60; break;
/* return never; */ default:
/* } */ return never;
}
/* now = time(NULL); */
/* return delta <= now ? now - delta : never; */ now = time(NULL);
/* } */ return delta <= now ? now - delta : never;
}
/* guint64 */
/* mu_str_size_parse_kmg (const char* str) */ guint64
/* { */ mu_str_size_parse_kmg (const char* str)
/* guint64 num; */ {
/* char *end; */ guint64 num;
char *end;
/* g_return_val_if_fail (str, G_MAXUINT64); */
g_return_val_if_fail (str, G_MAXUINT64);
/* num = strtol (str, &end, 10); */
/* if (num <= 0) */ num = strtol (str, &end, 10);
/* return G_MAXUINT64; */ if (num <= 0)
return G_MAXUINT64;
/* if (!end || end[1] != '\0') */
/* return G_MAXUINT64; */ if (!end || end[1] != '\0')
return G_MAXUINT64;
/* switch (tolower(end[0])) { */
/* case 'k': return num * 1000; /\* kilobyte *\/ */ switch (tolower(end[0])) {
/* case 'm': return num * 1000 * 1000; /\* megabyte *\/ */ case 'k': return num * 1000; /* kilobyte */
/* /\* case 'g': return num * 1000 * 1000 * 1000; /\\* gigabyte *\\/ *\/ */ case 'm': return num * 1000 * 1000; /* megabyte */
/* default: */ /* case 'g': return num * 1000 * 1000 * 1000; /\* gigabyte *\/ */
default:
return G_MAXUINT64; return G_MAXUINT64;
} }