提交 4e831108 编写于 作者: A Alexander Alekhin

core(persistence): fix KW issues

上级 197285d1
......@@ -114,9 +114,11 @@ char* floatToString( char* buf, float value, bool halfprecision, bool explicitZe
}
else
{
static const char* fmt = halfprecision ? "%.4e" : "%.8e";
char* ptr = buf;
sprintf( buf, fmt, value );
if (halfprecision)
sprintf(buf, "%.4e", value);
else
sprintf(buf, "%.8e", value);
if( *ptr == '+' || *ptr == '-' )
ptr++;
for( ; cv_isdigit(*ptr); ptr++ )
......@@ -350,6 +352,7 @@ public:
void init()
{
flags = 0;
buffer.clear();
bufofs = 0;
state = UNDEFINED;
......@@ -358,6 +361,7 @@ public:
write_mode = false;
mem_mode = false;
space = 0;
wrap_margin = 71;
fmt = 0;
file = 0;
gzfile = 0;
......@@ -615,7 +619,8 @@ public:
for(;;)
{
int line_offset = (int)ftell( file );
char* ptr0 = gets( &xml_buf_[0], xml_buf_size ), *ptr;
const char* ptr0 = this->gets(&xml_buf_[0], xml_buf_size );
const char* ptr = NULL;
if( !ptr0 )
break;
ptr = ptr0;
......@@ -708,7 +713,7 @@ public:
const char* json_signature = "{";
const char* xml_signature = "<?xml";
char buf[16];
gets( buf, sizeof(buf)-2 );
this->gets( buf, sizeof(buf)-2 );
char* bufPtr = cv_skip_BOM(buf);
size_t bufOffset = bufPtr - buf;
......@@ -861,7 +866,7 @@ public:
char* gets()
{
char* ptr = gets(bufferStart(), (int)(bufferEnd() - bufferStart()));
char* ptr = this->gets(bufferStart(), (int)(bufferEnd() - bufferStart()));
if( !ptr )
{
ptr = bufferStart(); // FIXIT Why do we need this hack? What is about other parsers JSON/YAML?
......@@ -1766,11 +1771,13 @@ public:
};
FileStorage::FileStorage()
: state(0)
{
p = makePtr<FileStorage::Impl>(this);
}
FileStorage::FileStorage(const String& filename, int flags, const String& encoding)
: state(0)
{
p = makePtr<FileStorage::Impl>(this);
bool ok = p->open(filename.c_str(), flags, encoding.c_str());
......
......@@ -96,11 +96,20 @@ int decodeFormat( const char* dt, int* fmt_pairs, int max_len );
int decodeSimpleFormat( const char* dt );
}
#ifdef CV_STATIC_ANALYSIS
#define CV_PARSE_ERROR_CPP(errmsg) do { (void)fs; abort(); } while (0)
#else
#define CV_PARSE_ERROR_CPP( errmsg ) \
fs->parseError( CV_Func, (errmsg), __FILE__, __LINE__ )
#endif
#define CV_PERSISTENCE_CHECK_END_OF_BUFFER_BUG_CPP() do { \
CV_DbgAssert(ptr); \
if((ptr)[0] == 0 && (ptr) == fs->bufferEnd() - 1) CV_PARSE_ERROR_CPP("OpenCV persistence doesn't support very long lines"); \
} while (0)
#define CV_PERSISTENCE_CHECK_END_OF_BUFFER_BUG_CPP() \
if((ptr)[0] == 0 && (ptr) == fs->bufferEnd() - 1) CV_PARSE_ERROR_CPP("OpenCV persistence doesn't support very long lines")
class FileStorageParser;
class FileStorageEmitter;
......@@ -151,6 +160,7 @@ public:
virtual double strtod(char* ptr, char** endptr) = 0;
virtual char* parseBase64(char* ptr, int indent, FileNode& collection) = 0;
CV_NORETURN
virtual void parseError(const char* funcname, const std::string& msg,
const char* filename, int lineno) = 0;
};
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册