added safety to READ_INT macro

This commit is contained in:
John Wiegley 2004-09-26 20:22:57 -04:00
parent 17808869b2
commit f32f698d7f

33
util.h
View file

@ -16,23 +16,22 @@ inline char peek_next_nonws(std::istream& in) {
return c; return c;
} }
#define READ_INTO(str, targ, size, var, cond) { \ #define READ_INTO(str, targ, size, var, cond) { \
char * _p = targ; \ char * _p = targ; \
var = str.peek(); \ var = str.peek(); \
while (! str.eof() && (cond)) { \ while (! str.eof() && (cond) && _p - targ < size) { \
str.get(var); \ str.get(var); \
if (str.eof()) \ if (str.eof()) \
break; \ break; \
if (var == '\\') { \ if (var == '\\') { \
str.get(var); \ str.get(var); \
if (in.eof()) \ if (in.eof()) \
break; \ break; \
} \ } \
*_p++ = var; \ *_p++ = var; \
var = str.peek(); \ var = str.peek(); \
} \ } \
assert(_p < targ + ((size) - 1)); \ *_p = '\0'; \
*_p = '\0'; \
} }
#endif // _UTIL_H #endif // _UTIL_H