Sam Varshavchik <[EMAIL PROTECTED]> writes:

> [ ... ]
>
> It looks to me like your patch reinvents the wheel.
>
> The id field in question has already been computed and placed in
> basemsgid field. Parsing the filename is completely and totally
> unnecessary.  Try reducing your patch to two or three lines of code.

Thanks for the tip.

It turns out that `basemsgid' doesn't contain the inode part of the
queue id; that's contained in `ctlinodenum', which needs to be converted
into a hex string.  Therefore, it took more than 2-3 lines.  But not
much more.

So how about this patch?

*** courier/submit.C.orig	Mon Dec 15 20:51:29 2003
--- courier/submit.C	Tue Apr  6 19:52:55 2004
***************
*** 1096,1101 ****
--- 1096,1105 ----
  	line += mf->module->name;
  	line += "; ";
  	line += rfc822_mkdate(submit_time);
+ 
+ 	// Add unique id here.
+ 	line += "\n  id ";
+ 	line += my_rcptinfo.submitfile.QueueID();
  	line += "\n";
  
  	for (p=line; *p; p++)
*** courier/submit.h.orig	Mon Sep 22 19:43:24 2003
--- courier/submit.h	Tue Apr  6 19:40:55 2004
***************
*** 117,122 ****
--- 117,123 ----
  	SubmitFile();
  	~SubmitFile();
  
+ 	char* QueueID();
  	void SendingModule(const char *p) {sending_module=p;}
  	void Sender(const char *, const char *, const char *, char);
  	int ChkRecipient(const char *);
*** courier/submit2.C.orig	Mon Sep 22 19:44:30 2003
--- courier/submit2.C	Tue Apr  6 19:45:46 2004
***************
*** 434,439 ****
--- 434,455 ----
  		) ;
  }
  
+ char *SubmitFile::QueueID()
+ {
+ static char ino_buf[sizeof(ino_t)*2+1];
+ static char result[sizeof(ino_buf)+sizeof(time_t)*4+2];
+ 
+ 	libmail_strh_ino_t(ctlinodenum, ino_buf);
+ 
+ 	strcat(
+ 	strcat(
+ 	strcpy(result, ino_buf)
+ 		, ".")
+ 		, basemsgid) ;
+ 
+ 	return (result);
+ }
+ 
  char *SubmitFile::namefile(const char *pfix, unsigned n)
  {
  char	buf[MAXLONGSIZE], *p;

-- 
 Lloyd Zusman
 [EMAIL PROTECTED]

Reply via email to