Closed Bug 280537 Opened 20 years ago Closed 17 years ago

Enhancement/Cleanup for nsNNTPProtocol class

Categories

(SeaMonkey :: MailNews: Backend, enhancement)

enhancement
Not set
normal

Tracking

(Not tracked)

RESOLVED DUPLICATE of bug 400331

People

(Reporter: tim.ruehsen, Assigned: Bienvenu)

Details

Attachments

(1 file, 1 obsolete file)

User-Agent:       Mozilla/5.0 (compatible; Konqueror/3.3; Linux) KHTML/3.3.2 (like Gecko)
Build Identifier: 

Mainly, I replaced NS_MsgSACopy/NS_MsgSACat/SendData combinations with a new 
helper function called PrintfToStream. 
 
This new function also removes the limits on some parts of the code when using 
a static buffer. e.g.: 
  char buf[OUTPUT_BUFFER_SIZE]; 
  PR_snprintf(buf,sizeof(buf),"GROUP %.512s"CRLF, groupname); 
  status = SendData(url, buf); 
now looks like 
  status = PrintfToStream(url, "GROUP %s", groupname); 
 
PrintfToStream() uses an 512 bytes buffer on the stack, and falls back to 
memory allocation if needed. It also calls SendData() without recalculating the 
data size via PL_strlen(). 
 
After all, this makes the code cleaner and reduces memory allocations. 
Comments are welcome. 
 

Reproducible: Always
Attached patch cvs diff (obsolete) — Splinter Review
Attachment #172958 - Flags: review?(bienvenu)
Comment on attachment 172958 [details] [diff] [review]
cvs diff

thx for looking at this code. a -uw diff would be helpful, so I don't have to
look at all the whitespace changes...
Sorry about that. 
But i am not able to reconstruct my changes with 'patch' using the diff file 
(says, it can't locate mailnews/news/src/nsNNTPProtocol.cpp, which is there). 
My changed files where overwritten, so using patch would be my only possibility 
to reconstruct them. So I can't provide you with a patch without whitespace 
changes. 
Please try to manage the whitespace changes. For the future I will always use 
-w. 
 
This is a new version which will work on trunk (i used the old one and applied most of the changes manually) and also fixed a little bug in it. So far it seems to work fine (post, read, cancel postings,etc.).
Attachment #172958 - Attachment is obsolete: true
Attachment #201422 - Flags: review?
Attachment #172958 - Flags: review?(bienvenu)
Comment on attachment 201422 [details] [diff] [review]
Patch for trunk, -uw


This is a new version which will work on trunk (i used the old one and applied
most of the changes manually) and also fixed a little bug in it. So far it
seems to work fine (post, read, cancel postings,etc.).
Attachment #201422 - Flags: review? → review?(bienvenu)
Ah i forgot the // XXX - FIX ME? is because Bug 313147 added a "if (!m_socketIsOpen || !m_dataBuf)" check, but m_dataBuf does no longer exist with this patch. I did not look at this further, for now i have just deleted that check for m_dataBuf.
we need the equivalent of the !m_dataBuf check, some check that we've called Cleanup on the protocol object, and gotten to where that check is w/o re-initing m_dataBuf (if you did a -uwp diff, it would be easier to give the name of the functions)

It looks like you've got tabs in your patch, e.g., +PRInt32 nsNNTPProtocol::VPrintfToStream

also, in +PRInt32 nsNNTPProtocol::VPrintfToStream, aren't you leaking datap in the case where you have to allocate it because it's too big?

Here,

+
+  if (bufSize)
+    len = bufSize;
+  else
+    len = PL_strlen(dataBuffer);
+

this can just be:

len = (bufSize) ? bufSize : PL_strlen(dataBuffer);

Why not add the logging param to +PRInt32 nsNNTPProtocol::PrintfToStream(nsIURI * aURL, const char * aFormat, ...)

instead of having two identical functions, one to pass false and one to pass true to VPrintfToStream? You can default the param to PR_TRUE so only the callers that don't want logging need to pass in the last param.


 		if (m_typeWanted == CANCEL_WANTED) {
-			NS_MsgSACopy(&command, "HEAD ");
+			PrintfToStream(mailnewsurl, "HEAD %s%s%s"CRLF,
+				*m_path != '<' ? "<" : "",
+				m_path,
+				PL_strchr(m_path, '>') == 0 ? ">" : "");
         }
 		else {
             NS_ASSERTION(m_typeWanted == ARTICLE_WANTED, "not cancel, and not article");
-			NS_MsgSACopy(&command, "ARTICLE ");
+			PrintfToStream(mailnewsurl, "ARTICLE %s%s%s"CRLF,
+				*m_path != '<' ? "<" : "",
+				m_path,
+				PL_strchr(m_path, '>') == 0 ? ">" : "");
         }

Here, you're just adding more code where there was less :-( you could just do:

const char *formatString;
formatString = (m_typeWanted == CANCEL_WANTED) ? "HEAD %s%s%s"CRLF : "ARTICLE %s%s%s"CRLF;
			PrintfToStream(mailnewsurl, formatString,
				*m_path != '<' ? "<" : "",
				m_path,
				PL_strchr(m_path, '>') == 0 ? ">" : "");

Or not even use the local var formatString at all.
Comment on attachment 201422 [details] [diff] [review]
Patch for trunk, -uw

ok will probably attach a new patch
Attachment #201422 - Flags: review?(bienvenu)
Bug 400331 is also about cleanup and more active.
Status: NEW → RESOLVED
Closed: 17 years ago
Resolution: --- → DUPLICATE
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Creator:
Created:
Updated:
Size: