mirror of
https://github.com/opencv/opencv.git
synced 2024-11-29 13:47:32 +08:00
Merge pull request #13346 from alalek:fix_kw_persistence
This commit is contained in:
commit
ea3a5950a3
@ -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;
|
||||
};
|
||||
|
Loading…
Reference in New Issue
Block a user