Files
MermsEmrWeb/mermsemr/src/core/input.cc
T
2019-02-19 22:35:27 +00:00

72 lines
1.9 KiB
C++

#include "input.h"
#include "clog.h"
#include "util.h"
#include <cstring>
#include <cstdlib>
/******************************************************************************/
void REQ_STRING( CVars &in, const char * name, int min_len, int max_len, const char *regex ) throw (bad_parameter)
{
int len = in[name].length();
char ret[2048]; ret[0] = 0;
logfmt( FLOG_MAX, "REQ_STRING(%s)", name );
bool match = reg_match( in[name].c_str(), regex, ret, sizeof(ret) );
len = strlen(ret);
if ( !match || len < min_len || len > max_len )
{
logfmt( FLOG_MAX, "Error in parameter '%s', len= %d <= %d <= %d", name, min_len, match, max_len );
in[name].set_valid( false );
throw bad_parameter( in, name );
}
in[name] = ret;
CVars::iterator i = in.find( name );
i->second.set_valid();
//logfmt( FLOG_MAX, "i->second.valid()=%d", i->second.valid() );
// if not match regexp
}
/******************************************************************************/
long REQ_LONG( CVars &in, const char *name, long min, long max )
{
char *end;
long r = strtol( in[name].c_str(), &end, 10 );
if ( in[name].length() && !*end )
{
in[name].set_valid();
return r;
}
else
{
in[name].set_valid( false );
throw bad_parameter( in, name );
}
return r;
}
/******************************************************************************/
bool OptionalSpecified( CVars &in, const char * name )
{
if ( in.find(name)==in.end() ) return false; // parameter omitted, not even passed from frontend
return ! reg_match( in[name].c_str(), "^[[:space:]]*$", NULL, 0 );
}
/******************************************************************************/
/*
vi:ts=2
*/