core: fix FileStorage format detection in case of .gz archives

pull/9209/head
Alexander Alekhin 8 years ago
parent 5bc291937f
commit ec7ce81401
  1. 20
      modules/core/src/persistence.cpp

@ -4270,11 +4270,25 @@ cvOpenFileStorage( const char* query, CvMemStorage* dststorage, int flags, const
if( fmt == CV_STORAGE_FORMAT_AUTO && filename )
{
const char* dot_pos = strrchr( filename, '.' );
const char* dot_pos = NULL;
const char* dot_pos2 = NULL;
// like strrchr() implementation, but save two last positions simultaneously
for (const char* pos = filename; pos[0] != 0; pos++)
{
if (pos[0] == '.')
{
dot_pos2 = dot_pos;
dot_pos = pos;
}
}
if (cv_strcasecmp(dot_pos, ".gz") && dot_pos2 != NULL)
{
dot_pos = dot_pos2;
}
fs->fmt
= cv_strcasecmp( dot_pos, ".xml" )
= (cv_strcasecmp(dot_pos, ".xml") || cv_strcasecmp(dot_pos, ".xml.gz"))
? CV_STORAGE_FORMAT_XML
: cv_strcasecmp( dot_pos, ".json" )
: (cv_strcasecmp(dot_pos, ".json") || cv_strcasecmp(dot_pos, ".json.gz"))
? CV_STORAGE_FORMAT_JSON
: CV_STORAGE_FORMAT_YAML
;

Loading…
Cancel
Save