Here is a patch that implements the solution I discussed with James Baker for the automatic extraction of all MIME parts of a message with "reformime -xPREFIX".
This patch creates one more flag for reformime: "-u" so instead of "reformime -xPREFIX" I suggest "reformime -xPREFIX -u".
The -u flag will include an 8 hexa digits counter between PREFIX and the original filename.
Does anybody cares to test it?
BTW: if PREFIX is a directory, please end it with '/'. As far as I understand, this observation applies to reformime with or without this patch.
Rodrigo Severo
*** ../courier.original/courier-0.42.2/rfc2045/reformime.c 2003-03-06 21:47:08.000000000 -0300 --- ./rfc2045/reformime.c 2003-06-23 09:49:11.000000000 -0300 *************** *** 97,102 **** --- 97,103 ---- fprintf(stderr, " -h \"header\" - decode RFC 2047-encoded header.\n"); fprintf(stderr, " -o \"header\" - encode unstructured header using RFC 2047.\n"); fprintf(stderr, " -O \"header\" - encode address list header using RFC 2047.\n"); + fprintf(stderr, " -u - include a unique value for each MIME section (usefull with -xPREFIX and without -s).\n");
exit(1);
}
***************
*** 620,626 ****
static void extract_section(struct rfc2045 *top_rfcp, const char
*mimesection,
const char *extract_filename, int argc, char **argv,
void (*extract_func)(struct rfc2045 *, const char *,
! int, char **))
{
if (mimesection)
{
--- 621,627 ----
static void extract_section(struct rfc2045 *top_rfcp, const char
*mimesection,
const char *extract_filename, int argc, char **argv,
void (*extract_func)(struct rfc2045 *, const char *,
! int, char **), const int unique)
{
if (mimesection)
{
***************
*** 640,649 **** if (top_rfcp->firstpart)
{
! for (top_rfcp=top_rfcp->firstpart; top_rfcp;
! top_rfcp=top_rfcp->next)
! extract_section(top_rfcp, mimesection,
! extract_filename, argc, argv, extract_func);
return;
}--- 641,681 ----
if (top_rfcp->firstpart)
{
! if (unique)
! {
! char *unique_filename;
! unsigned long int unique_filename_size;
! unsigned long int attachment_counter=0;
!
! unique_filename_size=strlen(extract_filename)+10; // The 10 is
8
hexa digits + 1 for a final hyphen + 1 for the final \0
! unique_filename=malloc(unique_filename_size);
! if (!unique_filename)
! {
! perror("malloc");
! exit(1);
! }
! for (top_rfcp=top_rfcp->firstpart; top_rfcp;
! top_rfcp=top_rfcp->next)
! {
! if (snprintf(unique_filename, unique_filename_size,
! "%s%.8lx-", extract_filename, attachment_counter)
>=
unique_filename_size)
! {
! perror("snprintf");
! exit(1);
! }
! extract_section(top_rfcp, mimesection,
! unique_filename, argc, argv, extract_func, 0);
! attachment_counter++;
! }
! free(unique_filename);
! }
! else
! {
! for (top_rfcp=top_rfcp->firstpart; top_rfcp;
! top_rfcp=top_rfcp->next)
! extract_section(top_rfcp, mimesection,
! extract_filename, argc, argv, extract_func, 0);
! }
return;
}*************** *** 918,923 **** --- 950,956 ---- void (*do_extract)(struct rfc2045 *, const char *, int, char **)=0; const char *extract_filename=0; int rc=0; + int unique=0;
#if HAVE_SETLOCALE
setlocale(LC_ALL, "C");
***************
*** 1011,1016 ****
--- 1044,1052 ----
}
doencodemimehdr=1;
break;
+ case 'u':
+ unique=1;
+ break; default:
usage();
***************
*** 1068,1074 ****
print_info(p, mimesection);
if (do_extract)
extract_section(p, mimesection, extract_filename,
! argc-argn, argv+argn, do_extract);
}
else if (dodecode)
print_decode(p, mimesection);
--- 1104,1110 ----
print_info(p, mimesection);
if (do_extract)
extract_section(p, mimesection, extract_filename,
! argc-argn, argv+argn, do_extract, 0);
}
else if (dodecode)
print_decode(p, mimesection);
***************
*** 1078,1084 ****
dsn(p, dodsn == 2);
else if (do_extract)
extract_section(p, mimesection, extract_filename,
! argc-argn, argv+argn, do_extract);
else if (dovalidate)
{
rc=1;
--- 1114,1120 ----
dsn(p, dodsn == 2);
else if (do_extract)
extract_section(p, mimesection, extract_filename,
! argc-argn, argv+argn, do_extract, unique);
else if (dovalidate)
{
rc=1;
-- ---------------------------------------------------- Rodrigo Severo F�brica de Id�ias Fone: +55(61)321 1357 Fax: +55(61)223 1712 SBS - Quadra 2 - Ed. Empire Center - Sala 1301 Bras�lia/DF - Brasil CEP: 70.070-904 ----------------------------------------------------
------------------------------------------------------- This SF.Net email is sponsored by: INetU Attention Web Developers & Consultants: Become An INetU Hosting Partner. Refer Dedicated Servers. We Manage Them. You Get 10% Monthly Commission! INetU Dedicated Managed Hosting http://www.inetu.net/partner/index.php _______________________________________________ courier-users mailing list [EMAIL PROTECTED] Unsubscribe: https://lists.sourceforge.net/lists/listinfo/courier-users
