* unbreak mu-str

This commit is contained in:
Dirk-Jan C. Binnema 2011-01-21 20:13:18 -05:00
parent abd1a45d6c
commit a2dbe365c6
1 changed files with 234 additions and 233 deletions

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 *\/ */
/* /\* remove everything between '()' if it's after the 5th pos*\/ */ /* FIXME: this breaks cc10 */
/* /\* c = g_strstr_len (contact, -1, "("); *\/ */
/* /\* if (c && c - contact > 5) *\/ */ /* remove everything between '()' if it's after the 5th pos;
/* /\* *c = '\0'; *\/ */ * good to cleanup corporate contact address spam... */
c = g_strstr_len (contact, -1, "(");
if (c && c - contact > 5)
*c = '\0';
/* g_strstrip (contact); */ g_strstrip (contact);
/* return contact; */ return contact;
/* } */ }
/* char* */ char*
/* mu_str_display_contact (const char *str) */ 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 { */ struct _CheckPrefix {
/* const char *pfx; */ const char *pfx;
/* guint len; */ guint len;
/* gboolean match; */ gboolean match;
/* }; */ };
/* typedef struct _CheckPrefix CheckPrefix; */ typedef struct _CheckPrefix CheckPrefix;
/* static void */ static void
/* each_check_prefix (MuMsgFieldId mfid, CheckPrefix *cpfx) */ each_check_prefix (MuMsgFieldId mfid, CheckPrefix *cpfx)
/* { */ {
/* const char *field_name; */ const char *field_name;
/* char field_shortcut; */ char field_shortcut;
/* if (!cpfx || cpfx->match) */ if (!cpfx || cpfx->match)
/* return; */ return;
/* field_shortcut = mu_msg_field_shortcut (mfid); */ field_shortcut = mu_msg_field_shortcut (mfid);
/* if (field_shortcut == cpfx->pfx[0] && cpfx->pfx[1] == ':') { */ if (field_shortcut == cpfx->pfx[0] && cpfx->pfx[1] == ':') {
/* cpfx->match = TRUE; */ cpfx->match = TRUE;
/* return; */ return;
/* } */ }
/* field_name = mu_msg_field_name (mfid); */ field_name = mu_msg_field_name (mfid);
/* if (field_name && */ if (field_name &&
/* strncmp (cpfx->pfx, field_name, cpfx->len) == 0) { */ strncmp (cpfx->pfx, field_name, cpfx->len) == 0) {
/* cpfx->match = TRUE; */ cpfx->match = TRUE;
/* return; */ return;
/* } */ }
/* } */ }
/* /\* colon is a position inside q pointing at a ':' character. function */ /* colon is a position inside q pointing at a ':' character. function
/* * determines whether the prefix is a registered prefix (like */ * determines whether the prefix is a registered prefix (like
/* * 'subject' or 'from' or 's') *\/ */ * 'subject' or 'from' or 's') */
/* static gboolean */ static gboolean
/* is_xapian_prefix (const char *q, const char *colon) */ is_xapian_prefix (const char *q, const char *colon)
/* { */ {
/* const char *cur; */ const char *cur;
/* if (colon == q) */ if (colon == q)
/* return FALSE; /\* : at beginning, not a prefix *\/ */ return FALSE; /* : at beginning, not a prefix */
/* /\* track back from colon until a boundary or beginning of the */ /* track back from colon until a boundary or beginning of the
/* * str *\/ */ * str */
/* for (cur = colon - 1; cur >= q; --cur) { */ for (cur = colon - 1; cur >= q; --cur) {
/* if (cur == q || !isalpha (*(cur-1))) { */ if (cur == q || !isalpha (*(cur-1))) {
/* CheckPrefix cpfx; */ CheckPrefix cpfx;
/* memset (&cpfx, 0, sizeof(CheckPrefix)); */ memset (&cpfx, 0, sizeof(CheckPrefix));
/* cpfx.pfx = cur; */ cpfx.pfx = cur;
/* cpfx.len = (colon - cur); */ cpfx.len = (colon - cur);
/* cpfx.match = FALSE; */ cpfx.match = FALSE;
/* mu_msg_field_foreach ((MuMsgFieldForEachFunc) */ mu_msg_field_foreach ((MuMsgFieldForEachFunc)
/* each_check_prefix, */ each_check_prefix,
/* &cpfx); */ &cpfx);
/* return (cpfx.match); */ return (cpfx.match);
/* } */ }
/* } */ }
/* return FALSE; */ return FALSE;
/* } */ }
/* time_t */ time_t
/* mu_str_date_parse_hdwmy (const char* str) */ mu_str_date_parse_hdwmy (const char* str)
/* { */ {
/* long int num; */ long int num;
/* char *end; */ char *end;
/* time_t now, delta; */ time_t now, delta;
/* time_t never = (time_t)-1; */ 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); */ num = strtol (str, &end, 10);
/* if (num <= 0 || num > 9999) */ if (num <= 0 || num > 9999)
/* return never; */ return never;
/* if (!end || end[1] != '\0') */ if (!end || end[1] != '\0')
/* return never; */ return never;
/* switch (end[0]) { */ switch (end[0]) {
/* case 'h': /\* hour *\/ */ case 'h': /* hour */
/* delta = num * 60 * 60; break; */ delta = num * 60 * 60; break;
/* case 'd': /\* day *\/ */ case 'd': /* day */
/* delta = num * 24 * 60 * 60; break; */ delta = num * 24 * 60 * 60; break;
/* case 'w': /\* week *\/ */ case 'w': /* week */
/* delta = num * 7 * 24 * 60 * 60; break; */ delta = num * 7 * 24 * 60 * 60; break;
/* case 'm': */ case 'm':
/* delta = num * 30 * 24 * 60 * 60; break; */ delta = num * 30 * 24 * 60 * 60; break;
/* case 'y': */ case 'y':
/* delta = num * 365 * 24 * 60 * 60; break; */ delta = num * 365 * 24 * 60 * 60; break;
/* default: */ default:
/* return never; */ return never;
/* } */ }
/* now = time(NULL); */ now = time(NULL);
/* return delta <= now ? now - delta : never; */ return delta <= now ? now - delta : never;
/* } */ }
/* guint64 */ guint64
/* mu_str_size_parse_kmg (const char* str) */ mu_str_size_parse_kmg (const char* str)
/* { */ {
/* guint64 num; */ guint64 num;
/* char *end; */ char *end;
/* g_return_val_if_fail (str, G_MAXUINT64); */ g_return_val_if_fail (str, G_MAXUINT64);
/* num = strtol (str, &end, 10); */ num = strtol (str, &end, 10);
/* if (num <= 0) */ if (num <= 0)
/* return G_MAXUINT64; */ return G_MAXUINT64;
/* if (!end || end[1] != '\0') */ if (!end || end[1] != '\0')
/* return G_MAXUINT64; */ return G_MAXUINT64;
/* switch (tolower(end[0])) { */ switch (tolower(end[0])) {
/* case 'k': return num * 1000; /\* kilobyte *\/ */ case 'k': return num * 1000; /* kilobyte */
/* case 'm': return num * 1000 * 1000; /\* megabyte *\/ */ case 'm': return num * 1000 * 1000; /* megabyte */
/* /\* case 'g': return num * 1000 * 1000 * 1000; /\\* gigabyte *\\/ *\/ */ /* case 'g': return num * 1000 * 1000 * 1000; /\* gigabyte *\/ */
/* default: */ default:
return G_MAXUINT64; return G_MAXUINT64;
} }