Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 14 Oct 2013 20:56:51 +0000 (UTC)
From:      Alan Somers <asomers@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject:   svn commit: r256453 - projects/zfsd/head/cddl/sbin/zfsd
Message-ID:  <201310142056.r9EKup26052579@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: asomers
Date: Mon Oct 14 20:56:51 2013
New Revision: 256453
URL: http://svnweb.freebsd.org/changeset/base/256453

Log:
  In the static method CaseFile::DeSerializeFile(), break out the acutal parsing
  of the serialization stream into the instance method
  CaseFile::DeSerialize(ifstream &caseStream).
  
  	cddl/sbin/zfsd/case_file.h:
  		Declaration of CaseFile::DeSerialize().
  
  	cddl/sbin/zfsd/case_file.cc:
  		o Factor out CaseFile::DeSerialize() from
  		  CaseFile::DeSerializeFile().
  
  		o In CaseFile::DeSerialize() remove a superfluous
  		  return statement after a throw.
  
  Submitted by:	gibbs
  Approved by:	ken (mentor)
  Sponsored by:	Spectra Logic Corporation

Modified:
  projects/zfsd/head/cddl/sbin/zfsd/case_file.cc
  projects/zfsd/head/cddl/sbin/zfsd/case_file.h

Modified: projects/zfsd/head/cddl/sbin/zfsd/case_file.cc
==============================================================================
--- projects/zfsd/head/cddl/sbin/zfsd/case_file.cc	Mon Oct 14 20:53:51 2013	(r256452)
+++ projects/zfsd/head/cddl/sbin/zfsd/case_file.cc	Mon Oct 14 20:56:51 2013	(r256453)
@@ -552,7 +552,6 @@ void
 CaseFile::DeSerializeFile(const char *fileName)
 {
 	string	  fullName(s_caseFilePath + '/' + fileName);
-	string	  evString;
 	CaseFile *existingCaseFile(NULL);
 	CaseFile *caseFile(NULL);
 
@@ -603,50 +602,11 @@ CaseFile::DeSerializeFile(const char *fi
 		}
 
 		ifstream caseStream(fullName.c_str());
-		if (!caseStream) {
+		if (!caseStream)
 			throw ZfsdException("CaseFile::DeSerialize: Unable to "
 					    "read %s.\n", fileName);
-			return;
-		}
-		stringstream fakeDevdSocket(stringstream::in|stringstream::out);
-		IstreamReader caseReader(&fakeDevdSocket);
 
-		/* Re-load EventData */
-		EventBuffer eventBuffer(caseReader);
-		caseStream >> std::noskipws >> std::ws;
-		while (!caseStream.eof()) {
-			/*
-			 * Outline:
-			 * read the beginning of a line and check it for
-			 * "tentative".  If found, discard "tentative".
-			 * Shove into fakeDevdSocket.
-			 * call ExtractEvent
-			 * continue
-			 */
-			DevCtlEventList* destEvents;
-			string tentFlag("tentative ");
-			string line;
-			std::stringbuf lineBuf;
-			caseStream.get(lineBuf);
-			caseStream.ignore();  /*discard the newline character*/
-			line = lineBuf.str();
-			if (line.compare(0, tentFlag.size(), tentFlag) == 0) {
-				line.erase(0, tentFlag.size());
-				destEvents = &caseFile->m_tentativeEvents;
-			} else {
-				destEvents = &caseFile->m_events;
-			}
-			fakeDevdSocket << line;
-			fakeDevdSocket << '\n';
-			while (eventBuffer.ExtractEvent(evString)) {
-				DevCtlEvent *event(DevCtlEvent::CreateEvent(
-							evString));
-				if (event != NULL) {
-					destEvents->push_back(event);
-					caseFile->RegisterCallout(*event);
-				}
-			}
-		}
+		caseFile->DeSerialize(caseStream);
 	} catch (const ParseException &exp) {
 
 		exp.Log();
@@ -759,6 +719,50 @@ CaseFile::Serialize()
 }
 
 void
+CaseFile::DeSerialize(ifstream &caseStream)
+{
+	stringstream  fakeDevdSocket(stringstream::in|stringstream::out);
+	IstreamReader caseReader(&fakeDevdSocket);
+	EventBuffer   eventBuffer(caseReader);
+	string	      evString;
+
+	caseStream >> std::noskipws >> std::ws;
+	while (!caseStream.eof()) {
+		/*
+		 * Outline:
+		 * read the beginning of a line and check it for
+		 * "tentative".  If found, discard "tentative".
+		 * Shove into fakeDevdSocket.
+		 * call ExtractEvent
+		 * continue
+		 */
+		DevCtlEventList* destEvents;
+		string tentFlag("tentative ");
+		string line;
+		std::stringbuf lineBuf;
+
+		caseStream.get(lineBuf);
+		caseStream.ignore();  /*discard the newline character*/
+		line = lineBuf.str();
+		if (line.compare(0, tentFlag.size(), tentFlag) == 0) {
+			line.erase(0, tentFlag.size());
+			destEvents = &m_tentativeEvents;
+		} else {
+			destEvents = &m_events;
+		}
+		fakeDevdSocket << line;
+		fakeDevdSocket << '\n';
+		while (eventBuffer.ExtractEvent(evString)) {
+			DevCtlEvent *event(DevCtlEvent::CreateEvent(evString));
+			if (event != NULL) {
+				destEvents->push_back(event);
+				RegisterCallout(*event);
+			}
+		}
+	}
+}
+
+void
 CaseFile::Close()
 {
 	/*

Modified: projects/zfsd/head/cddl/sbin/zfsd/case_file.h
==============================================================================
--- projects/zfsd/head/cddl/sbin/zfsd/case_file.h	Mon Oct 14 20:53:51 2013	(r256452)
+++ projects/zfsd/head/cddl/sbin/zfsd/case_file.h	Mon Oct 14 20:56:51 2013	(r256453)
@@ -255,6 +255,13 @@ protected:
 	void Serialize();
 
 	/**
+	 * \brief Retrieve event data from a serialization stream.
+	 *
+	 * \param caseStream  The serializtion stream to parse.
+	 */
+	void DeSerialize(std::ifstream &caseStream);
+
+	/**
 	 * \brief Serializes the supplied event list and writes it to fd
 	 *
 	 * \param prefix  If not NULL, this prefix will be prepended to



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201310142056.r9EKup26052579>