solve warnings and do some cleaning.

pull/7088/head
MYLS 8 years ago
parent 8596e82d98
commit d99832163a
  1. 32
      modules/core/src/persistence.cpp

@ -703,8 +703,10 @@ cvReleaseFileStorage( CvFileStorage** p_fs )
cvFree( &fs->buffer_start ); cvFree( &fs->buffer_start );
cvReleaseMemStorage( &fs->memstorage ); cvReleaseMemStorage( &fs->memstorage );
if( fs->outbuf )
delete fs->outbuf; delete fs->outbuf;
delete fs->base64_writer;
delete fs->delayed_struct_key;
delete fs->delayed_type_name;
memset( fs, 0, sizeof(*fs) ); memset( fs, 0, sizeof(*fs) );
cvFree( &fs ); cvFree( &fs );
@ -1358,7 +1360,7 @@ static char* icvYMLParseBase64(CvFileStorage* fs, char* ptr, int indent, CvFileN
std::vector<char> header(base64::HEADER_SIZE + 1, ' '); std::vector<char> header(base64::HEADER_SIZE + 1, ' ');
base64::base64_decode(beg, header.data(), 0U, base64::ENCODED_HEADER_SIZE); base64::base64_decode(beg, header.data(), 0U, base64::ENCODED_HEADER_SIZE);
if ( !base64::read_base64_header(header, dt) || dt.empty() ) if ( !base64::read_base64_header(header, dt) || dt.empty() )
CV_PARSE_ERROR("Cannot parse dt in Base64 header"); CV_PARSE_ERROR("Invalid `dt` in Base64 header");
beg += base64::ENCODED_HEADER_SIZE; beg += base64::ENCODED_HEADER_SIZE;
} }
@ -2317,7 +2319,7 @@ static char* icvXMLParseBase64(CvFileStorage* fs, char* ptr, CvFileNode * node)
std::vector<char> header(base64::HEADER_SIZE + 1, ' '); std::vector<char> header(base64::HEADER_SIZE + 1, ' ');
base64::base64_decode(beg, header.data(), 0U, base64::ENCODED_HEADER_SIZE); base64::base64_decode(beg, header.data(), 0U, base64::ENCODED_HEADER_SIZE);
if ( !base64::read_base64_header(header, dt) || dt.empty() ) if ( !base64::read_base64_header(header, dt) || dt.empty() )
CV_PARSE_ERROR("Cannot parse dt in Base64 header"); CV_PARSE_ERROR("Invalid `dt` in Base64 header");
beg += base64::ENCODED_HEADER_SIZE; beg += base64::ENCODED_HEADER_SIZE;
} }
@ -3268,7 +3270,7 @@ icvJSONSkipSpaces( CvFileStorage* fs, char* ptr )
else if ( *ptr == '*' ) else if ( *ptr == '*' )
{ {
ptr++; ptr++;
while ( true ) for (;;)
{ {
if ( *ptr == '\0' ) if ( *ptr == '\0' )
{ {
@ -3294,7 +3296,7 @@ icvJSONSkipSpaces( CvFileStorage* fs, char* ptr )
} }
else else
{ {
CV_PARSE_ERROR( "Unexpected character" ); CV_PARSE_ERROR( "Not supported escape character" );
} }
} break; } break;
/* whitespace */ /* whitespace */
@ -3356,11 +3358,11 @@ static char* icvJSONParseKey( CvFileStorage* fs, char* ptr, CvFileNode* map, CvF
return 0; return 0;
if( *ptr != ':' ) if( *ptr != ':' )
CV_PARSE_ERROR( "Missing \':\'" ); CV_PARSE_ERROR( "Missing \':\' between key and value" );
/* [beg, end) */ /* [beg, end) */
if( end <= beg ) if( end <= beg )
CV_PARSE_ERROR( "An empty key" ); CV_PARSE_ERROR( "Key is empty" );
if ( end - beg == 7u && memcmp(beg, "type_id", 7u) == 0 ) if ( end - beg == 7u && memcmp(beg, "type_id", 7u) == 0 )
{ {
@ -3452,7 +3454,7 @@ static char* icvJSONParseValue( CvFileStorage* fs, char* ptr, CvFileNode* node )
std::vector<char> header(base64::HEADER_SIZE + 1, ' '); std::vector<char> header(base64::HEADER_SIZE + 1, ' ');
base64::base64_decode(base64_beg, header.data(), 0U, base64::ENCODED_HEADER_SIZE); base64::base64_decode(base64_beg, header.data(), 0U, base64::ENCODED_HEADER_SIZE);
if ( !base64::read_base64_header(header, dt) || dt.empty() ) if ( !base64::read_base64_header(header, dt) || dt.empty() )
CV_PARSE_ERROR("Cannot parse dt in Base64 header"); CV_PARSE_ERROR("Invalid `dt` in Base64 header");
} }
/* set base64_beg to beginning of base64 data */ /* set base64_beg to beginning of base64 data */
@ -3572,7 +3574,12 @@ static char* icvJSONParseValue( CvFileStorage* fs, char* ptr, CvFileNode* node )
else else
ptr++; ptr++;
node->data.str = cvMemStorageAllocString( fs->memstorage, string_buffer.c_str(), string_buffer.size() ); node->data.str = cvMemStorageAllocString
(
fs->memstorage,
string_buffer.c_str(),
static_cast<int>(string_buffer.size())
);
node->tag = CV_NODE_STRING; node->tag = CV_NODE_STRING;
} }
} }
@ -3641,7 +3648,7 @@ static char* icvJSONParseSeq( CvFileStorage* fs, char* ptr, CvFileNode* node )
memset( node, 0, sizeof(*node) ); memset( node, 0, sizeof(*node) );
icvFSCreateCollection( fs, CV_NODE_SEQ, node ); icvFSCreateCollection( fs, CV_NODE_SEQ, node );
while ( true ) for (;;)
{ {
ptr = icvJSONSkipSpaces( fs, ptr ); ptr = icvJSONSkipSpaces( fs, ptr );
if ( ptr == 0 || fs->dummy_eof ) if ( ptr == 0 || fs->dummy_eof )
@ -3689,7 +3696,7 @@ static char* icvJSONParseMap( CvFileStorage* fs, char* ptr, CvFileNode* node )
memset( node, 0, sizeof(*node) ); memset( node, 0, sizeof(*node) );
icvFSCreateCollection( fs, CV_NODE_MAP, node ); icvFSCreateCollection( fs, CV_NODE_MAP, node );
while ( true ) for ( ;; )
{ {
ptr = icvJSONSkipSpaces( fs, ptr ); ptr = icvJSONSkipSpaces( fs, ptr );
if ( ptr == 0 || fs->dummy_eof ) if ( ptr == 0 || fs->dummy_eof )
@ -4335,7 +4342,6 @@ cvOpenFileStorage( const char* query, CvMemStorage* dststorage, int flags, const
} }
else else
{ {
// TODO: JSON func
if( !append ) if( !append )
icvPuts( fs, "{\n" ); icvPuts( fs, "{\n" );
else else
@ -7818,8 +7824,6 @@ public:
src_cur = src_beg; src_cur = src_beg;
{ {
// TODO: better solutions.
if ( file_storage->fmt == CV_STORAGE_FORMAT_JSON ) if ( file_storage->fmt == CV_STORAGE_FORMAT_JSON )
{ {
::icvPuts(file_storage, (const char*)base64_buffer.data()); ::icvPuts(file_storage, (const char*)base64_buffer.data());

Loading…
Cancel
Save