From: Alexander P. <ale...@us...> - 2010-05-06 13:42:56
|
Build Version : T3.0.0.28393 Firebird 3.0 Unstable (writeBuildNum.sh,v 1.28567 2010/05/06 13:42:18 alexpeshkof ) Update of /cvsroot/firebird/firebird2/src/jrd In directory sfp-cvsdas-3.v30.ch3.sourceforge.com:/tmp/cvs-serv19582/jrd Modified Files: svc.cpp svc.h Log Message: Fixed CORE-2984: gbak -v srv:db stdout creates a broken backup Index: svc.cpp =================================================================== RCS file: /cvsroot/firebird/firebird2/src/jrd/svc.cpp,v retrieving revision 1.312 retrieving revision 1.313 diff -b -U3 -r1.312 -r1.313 --- svc.cpp 21 Apr 2010 12:55:39 -0000 1.312 +++ svc.cpp 6 May 2010 13:42:15 -0000 1.313 @@ -369,14 +369,35 @@ } } -void Service::output(const char* text) +void Service::outputVerbose(const char* text) { - size_t len = strlen(text); + if (!usvcDataMode) + { + ULONG len = strlen(text); enqueue(reinterpret_cast<const UCHAR*>(text), len); + } +} + +void Service::outputError(const char* text) +{ + fb_assert(false); +} + +void Service::outputData(const void* data, size_t len) +{ + fb_assert(usvcDataMode); + enqueue(reinterpret_cast<const UCHAR*>(data), len); } -void Service::printf(const SCHAR* format, ...) +void Service::printf(bool err, const SCHAR* format, ...) { + // Errors are returned from services as vectors + fb_assert(!err); + if (err || usvcDataMode) + { + return; + } + // Ensure that service is not detached. if (svc_flags & SVC_detached) { @@ -1521,6 +1542,11 @@ recv_item_length, recv_items, res_successful); } + if (status.hasData()) + { + status.raise(); + } + } // try catch (const Firebird::Exception& ex) { @@ -1544,7 +1570,6 @@ finish(SVC_finished); } - status.copyTo(svc_status); return svc_status[1]; } @@ -2138,11 +2163,13 @@ started(); svc_started = true; TEXT buffer[100]; + setDataMode(true); while (!feof(file) && !ferror(file)) { fgets(buffer, sizeof(buffer), file); - output(buffer); + outputData(buffer, strlen(buffer)); } + setDataMode(false); } if (!file || (file && ferror(file))) Index: svc.h =================================================================== RCS file: /cvsroot/firebird/firebird2/src/jrd/svc.h,v retrieving revision 1.90 retrieving revision 1.91 diff -b -U3 -r1.90 -r1.91 --- svc.h 15 Apr 2010 14:40:22 -0000 1.90 +++ svc.h 6 May 2010 13:42:15 -0000 1.91 @@ -95,10 +95,14 @@ class Service : public Firebird::UtilSvc, public TypedHandle<type_svc> { public: // utilities interface with service - // output to svc_stdout - virtual void output(const char* text); + // output to svc_stdout verbose info + virtual void outputVerbose(const char* text); + // outpur error text + virtual void outputError(const char* text); + // output some data to service + virtual void outputData(const void* data, size_t len); // printf() to svc_stdout - virtual void printf(const SCHAR* format, ...); + virtual void printf(bool err, const SCHAR* format, ...); // returns true - it's service :) virtual bool isService(); // client thread started |