From c8b8b9539aaf11b48c4c1e5baba434db09722111 Mon Sep 17 00:00:00 2001 From: Pierre Habouzit Date: Sun, 19 Nov 2006 02:14:57 +0100 Subject: [PATCH] move functions around. replace mutt_expand_fmt with m_snsubst that has a more coherent API now. Signed-off-by: Pierre Habouzit --- lib-lib/str.c | 27 ++++++++++ lib-lib/str.h | 8 +++ lib-mime/rfc1524.c | 5 +- lib-ui/curs_lib.c | 18 +++++++ lib-ui/curses.h | 1 + muttlib.c | 121 +-------------------------------------------- pattern.c | 2 +- protos.h | 3 -- recvcmd.c | 65 ++++++++++++++++++++++++ 9 files changed, 123 insertions(+), 127 deletions(-) diff --git a/lib-lib/str.c b/lib-lib/str.c index 7b57305..6537746 100644 --- a/lib-lib/str.c +++ b/lib-lib/str.c @@ -178,3 +178,30 @@ int ascii_strncasecmp (const char *a, const char *b, ssize_t n) return 0; } + +ssize_t m_snsubst(char *dst, ssize_t n, const char *fmt, const char *src) +{ + ssize_t pos = 0; + const char *p; + + p = strchr(fmt, '%'); + if (!p) + return snprintf(dst, n, "%s %s", fmt, src); + + for (;;) { + if (p[1] == 's') { + pos += m_strncpy(dst + pos, n - pos, fmt, p - fmt); + pos += m_strcpy(dst + pos, n - pos, src); + fmt = p + 2; + } else { + pos += m_strncpy(dst + pos, n - pos, fmt, p + 1 - fmt); + fmt = p + 1; + if (p[1] == '%') + p++; + } + + p = strchr(fmt, '%'); + if (!p) + return pos + m_strcpy(dst + pos, n - pos, fmt); + } +} diff --git a/lib-lib/str.h b/lib-lib/str.h index a5791c3..d62dc0a 100644 --- a/lib-lib/str.h +++ b/lib-lib/str.h @@ -181,4 +181,12 @@ m_stristr(const char *haystack, const char *needle) { return m_stristrn(haystack, needle, m_strlen(needle)); } + +/****************************************************************************/ +/* misc functions */ +/****************************************************************************/ + +/* replace any %s with src, or appends " $src" */ +ssize_t m_snsubst(char *dst, ssize_t n, const char *fmt, const char *src); + #endif /* MUTT_LIB_LIB_STR_H */ diff --git a/lib-mime/rfc1524.c b/lib-mime/rfc1524.c index 456e04c..576f212 100644 --- a/lib-mime/rfc1524.c +++ b/lib-mime/rfc1524.c @@ -437,9 +437,8 @@ int rfc1524_expand_filename (char *nametemplate, m_strcpy(newfile, nflen, oldfile); } else if (!oldfile) { - mutt_expand_fmt (newfile, nflen, nametemplate, "mutt"); - } - else { /* oldfile && nametemplate */ + m_snsubst(newfile, nflen, nametemplate, "mutt"); + } else { /* oldfile && nametemplate */ /* first, compare everything left from the "%s" diff --git a/lib-ui/curs_lib.c b/lib-ui/curs_lib.c index fb65b64..079a34a 100644 --- a/lib-ui/curs_lib.c +++ b/lib-ui/curs_lib.c @@ -550,6 +550,24 @@ int mutt_addwch (wchar_t wc) return addstr (buf); } +ssize_t mutt_pretty_size(char *s, ssize_t len, ssize_t n) +{ + if (n == 0) + return m_strcpy(s, len, "0K"); + + if (n < 10189) /* 0.1K - 9.9K */ + return snprintf(s, len, "%3.1fK", (n < 103) ? 0.1 : n / 1024.0); + + if (n < 1023949) /* 10K - 999K */ + /* 51 is magic which causes 10189/10240 to be rounded up to 10 */ + return snprintf(s, len, "%ldK", (n + 51) / 1024); + + if (n < 10433332) /* 1.0M - 9.9M */ + return snprintf(s, len, "%3.1fM", n / 1048576.0); + + /* (10433332 + 52428) / 1048576 = 10 */ + return snprintf (s, len, "%ldM", (n + 52428) / 1048576); +} /* * This formats a string, a bit like diff --git a/lib-ui/curses.h b/lib-ui/curses.h index 33286c3..0e7b670 100644 --- a/lib-ui/curses.h +++ b/lib-ui/curses.h @@ -161,6 +161,7 @@ void _mutt_perror (const char*, const char*,int); void mutt_query_exit (void); void mutt_query_menu (char *, ssize_t); void mutt_show_error (void); +ssize_t mutt_pretty_size(char *s, ssize_t len, ssize_t n); int mutt_addwch (wchar_t); int mutt_alloc_color (int fg, int bg); diff --git a/muttlib.c b/muttlib.c index 539f7fa..81a0788 100644 --- a/muttlib.c +++ b/muttlib.c @@ -70,72 +70,6 @@ void mutt_adv_mktemp (const char* dir, char *s, ssize_t l) } } -/* create a send-mode duplicate from a receive-mode body */ - -int mutt_copy_body (FILE * fp, BODY ** tgt, BODY * src) -{ - char tmp[_POSIX_PATH_MAX]; - BODY *b; - - parameter_t *par, **ppar; - - short use_disp; - - if (src->filename) { - use_disp = 1; - m_strcpy(tmp, sizeof(tmp), src->filename); - } - else { - use_disp = 0; - tmp[0] = '\0'; - } - - mutt_adv_mktemp (NULL, tmp, sizeof (tmp)); - if (mutt_save_attachment (fp, src, tmp, 0, NULL) == -1) - return -1; - - *tgt = body_new(); - b = *tgt; - - memcpy (b, src, sizeof (BODY)); - b->parts = NULL; - b->next = NULL; - - b->filename = m_strdup(tmp); - b->use_disp = use_disp; - b->unlink = 1; - - if (mutt_is_text_part (b)) - b->noconv = 1; - - b->xtype = m_strdup(b->xtype); - b->subtype = m_strdup(b->subtype); - b->form_name = m_strdup(b->form_name); - b->filename = m_strdup(b->filename); - b->d_filename = m_strdup(b->d_filename); - b->description = m_strdup(b->description); - - /* - * we don't seem to need the HEADER structure currently. - * XXX - this may change in the future - */ - - if (b->hdr) - b->hdr = NULL; - - /* copy parameters */ - for (par = b->parameter, ppar = &b->parameter; par; - ppar = &(*ppar)->next, par = par->next) { - *ppar = parameter_new(); - (*ppar)->attribute = m_strdup(par->attribute); - (*ppar)->value = m_strdup(par->value); - } - - mutt_stamp_attachment (b); - - return 0; -} - /* returns true if the header contained in "s" is in list "t" */ int mutt_matches_ignore (const char *s, string_list_t * t) { @@ -316,66 +250,13 @@ void mutt_pretty_mailbox (char *s) } } -void mutt_pretty_size (char *s, ssize_t len, long n) -{ - if (n == 0) - m_strcpy(s, len, "0K"); - else if (n < 10189) /* 0.1K - 9.9K */ - snprintf (s, len, "%3.1fK", (n < 103) ? 0.1 : n / 1024.0); - else if (n < 1023949) { /* 10K - 999K */ - /* 51 is magic which causes 10189/10240 to be rounded up to 10 */ - snprintf (s, len, "%ldK", (n + 51) / 1024); - } - else if (n < 10433332) /* 1.0M - 9.9M */ - snprintf (s, len, "%3.1fM", n / 1048576.0); - else { /* 10M+ */ - - /* (10433332 + 52428) / 1048576 = 10 */ - snprintf (s, len, "%ldM", (n + 52428) / 1048576); - } -} - void mutt_expand_file_fmt(char *dest, ssize_t destlen, const char *fmt, const char *src) { char tmp[LONG_STRING]; mutt_quote_filename(tmp, sizeof(tmp), src); - mutt_expand_fmt(dest, destlen, fmt, tmp); -} - -void mutt_expand_fmt(char *dst, ssize_t dlen, - const char *fmt, const char *src) -{ - ssize_t pos = 0; - int found = 0; - - while (*fmt && pos < dlen - 1) { - if (*fmt == '%') { - switch (*++fmt) { - case 's': - found = 1; - pos += m_strcpy(dst + pos, dlen - pos, src); - break; - - case '%': - dst[pos++] = *fmt++; - break; - - default: - dst[pos++] = '%'; - break; - } - } else { - dst[pos++] = *fmt++; - } - } - - dst[pos] = '\0'; - if (!found) { - pos += m_strcpy(dst + pos, dlen - pos, " "); - pos += m_strcpy(dst + pos, dlen - pos, src); - } + m_snsubst(dest, destlen, fmt, tmp); } /* return 0 on success, -1 on abort, 1 on error */ diff --git a/pattern.c b/pattern.c index de4efb4..40600b6 100644 --- a/pattern.c +++ b/pattern.c @@ -1141,7 +1141,7 @@ void mutt_check_simple (char *s, ssize_t len, const char *simple) m_strcpy(s, len, "~U"); else { quote_simple (tmp, sizeof (tmp), s); - mutt_expand_fmt (s, len, simple, tmp); + m_snsubst(s, len, simple, tmp); } } } diff --git a/protos.h b/protos.h index 5baa9dd..5e0a1a3 100644 --- a/protos.h +++ b/protos.h @@ -64,7 +64,6 @@ void mutt_edit_content_type (HEADER *, BODY *, FILE *); void mutt_edit_headers (const char *, const char *, HEADER *, char *, ssize_t); void mutt_enter_command (void); void mutt_expand_file_fmt (char *, ssize_t, const char *, const char *); -void mutt_expand_fmt (char *, ssize_t, const char *, const char *); void mutt_fix_reply_recipients (ENVELOPE * env); void mutt_folder_hook (char *); void mutt_forward_intro (FILE * fp, HEADER * cur); @@ -84,7 +83,6 @@ void mutt_mktemp (char *); void mutt_prepare_envelope (ENVELOPE *, int); void mutt_unprepare_envelope (ENVELOPE *); void mutt_pretty_mailbox (char *); -void mutt_pretty_size (char *, ssize_t, long); void mutt_pipe_message (HEADER *); void mutt_print_message (HEADER *); void mutt_safe_path (char *s, ssize_t l, address_t * a); @@ -116,7 +114,6 @@ int mutt_check_overwrite (const char *, const char *, char *, ssize_t, int *, int mutt_check_traditional_pgp (HEADER *, int *); int mutt_command_complete (char *, ssize_t, int, int); int mutt_var_value_complete (char *, ssize_t, int); -int mutt_copy_body (FILE *, BODY **, BODY *); int mutt_display_message (HEADER * h); int mutt_dump_variables (int full); diff --git a/recvcmd.c b/recvcmd.c index 550ec9c..cf0aa4f 100644 --- a/recvcmd.c +++ b/recvcmd.c @@ -316,6 +316,71 @@ static void include_header (int quote, FILE * ifp, mutt_copy_header (ifp, hdr, ofp, chflags, quote ? prefix : NULL); } +/* create a send-mode duplicate from a receive-mode body */ +static int mutt_copy_body (FILE * fp, BODY ** tgt, BODY * src) +{ + char tmp[_POSIX_PATH_MAX]; + BODY *b; + + parameter_t *par, **ppar; + + short use_disp; + + if (src->filename) { + use_disp = 1; + m_strcpy(tmp, sizeof(tmp), src->filename); + } + else { + use_disp = 0; + tmp[0] = '\0'; + } + + mutt_adv_mktemp (NULL, tmp, sizeof (tmp)); + if (mutt_save_attachment (fp, src, tmp, 0, NULL) == -1) + return -1; + + *tgt = body_new(); + b = *tgt; + + memcpy (b, src, sizeof (BODY)); + b->parts = NULL; + b->next = NULL; + + b->filename = m_strdup(tmp); + b->use_disp = use_disp; + b->unlink = 1; + + if (mutt_is_text_part (b)) + b->noconv = 1; + + b->xtype = m_strdup(b->xtype); + b->subtype = m_strdup(b->subtype); + b->form_name = m_strdup(b->form_name); + b->filename = m_strdup(b->filename); + b->d_filename = m_strdup(b->d_filename); + b->description = m_strdup(b->description); + + /* + * we don't seem to need the HEADER structure currently. + * XXX - this may change in the future + */ + + if (b->hdr) + b->hdr = NULL; + + /* copy parameters */ + for (par = b->parameter, ppar = &b->parameter; par; + ppar = &(*ppar)->next, par = par->next) { + *ppar = parameter_new(); + (*ppar)->attribute = m_strdup(par->attribute); + (*ppar)->value = m_strdup(par->value); + } + + mutt_stamp_attachment (b); + + return 0; +} + /* Attach all the body parts which can't be decoded. * This code is shared by forwarding and replying. */ -- 2.20.1