|
|
@ -415,15 +415,30 @@ int Params::setLogLevel(const std::string& optarg)
|
|
|
|
return rc;
|
|
|
|
return rc;
|
|
|
|
} // Params::setLogLevel
|
|
|
|
} // Params::setLogLevel
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// http://stackoverflow.com/questions/874134/find-if-string-ends-with-another-string-in-c
|
|
|
|
|
|
|
|
static inline bool ends_with(std::string const & value, std::string const & ending,std::string& stub)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
if (ending.size() > value.size()) return false;
|
|
|
|
|
|
|
|
bool bResult = std::equal(ending.rbegin(), ending.rend(), value.rbegin());
|
|
|
|
|
|
|
|
stub = bResult ? value.substr(0,value.length() - ending.length()) : value;
|
|
|
|
|
|
|
|
return bResult ;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
int Params::evalGrep( const std::string& optarg)
|
|
|
|
int Params::evalGrep( const std::string& optarg)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
int result=0;
|
|
|
|
int result=0;
|
|
|
|
|
|
|
|
std::string pattern;
|
|
|
|
|
|
|
|
std::string ignoreCase("/i");
|
|
|
|
|
|
|
|
bool bIgnoreCase = ends_with(optarg,ignoreCase,pattern);
|
|
|
|
|
|
|
|
#if __cplusplus >= CPLUSPLUS11
|
|
|
|
|
|
|
|
greps_.push_back( std::regex(pattern, bIgnoreCase ? std::regex::icase|std::regex::extended : std::regex::extended) );
|
|
|
|
|
|
|
|
#else
|
|
|
|
#if EXV_HAVE_REGEX
|
|
|
|
#if EXV_HAVE_REGEX
|
|
|
|
// try to compile a reg-exp from the input argument and store it in the vector
|
|
|
|
// try to compile a reg-exp from the input argument and store it in the vector
|
|
|
|
const size_t i = greps_.size();
|
|
|
|
const size_t i = greps_.size();
|
|
|
|
greps_.resize(i + 1);
|
|
|
|
greps_.resize(i + 1);
|
|
|
|
regex_t *pRegex = &greps_[i];
|
|
|
|
regex_t *pRegex = &greps_[i];
|
|
|
|
int errcode = regcomp( pRegex, optarg.c_str(), REG_NOSUB);
|
|
|
|
int errcode = regcomp( pRegex, pattern.c_str(), bIgnoreCase ? REG_NOSUB|REG_ICASE : REG_NOSUB);
|
|
|
|
|
|
|
|
|
|
|
|
// there was an error compiling the regexp
|
|
|
|
// there was an error compiling the regexp
|
|
|
|
if( errcode ) {
|
|
|
|
if( errcode ) {
|
|
|
@ -441,7 +456,8 @@ int Params::evalGrep( const std::string& optarg)
|
|
|
|
result=1;
|
|
|
|
result=1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
#else
|
|
|
|
#else
|
|
|
|
greps_.push_back(optarg);
|
|
|
|
greps_.push_back(Exiv2_grep_key_t(pattern,bIgnoreCase));
|
|
|
|
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
return result;
|
|
|
|
return result;
|
|
|
|
} // Params::evalGrep
|
|
|
|
} // Params::evalGrep
|
|
|
@ -846,50 +862,50 @@ typedef std::map<std::string,std::string> long_t;
|
|
|
|
|
|
|
|
|
|
|
|
int Params::getopt(int argc, char* const Argv[])
|
|
|
|
int Params::getopt(int argc, char* const Argv[])
|
|
|
|
{
|
|
|
|
{
|
|
|
|
char** argv = new char* [argc+1];
|
|
|
|
char** argv = new char* [argc+1];
|
|
|
|
argv[argc] = NULL;
|
|
|
|
argv[argc] = NULL;
|
|
|
|
long_t longs;
|
|
|
|
long_t longs;
|
|
|
|
|
|
|
|
|
|
|
|
longs["--adjust" ] = "-a";
|
|
|
|
longs["--adjust" ] = "-a";
|
|
|
|
longs["--binary" ] = "-b";
|
|
|
|
longs["--binary" ] = "-b";
|
|
|
|
longs["--comment" ] = "-c";
|
|
|
|
longs["--comment" ] = "-c";
|
|
|
|
longs["--delete" ] = "-d";
|
|
|
|
longs["--delete" ] = "-d";
|
|
|
|
longs["--days" ] = "-D";
|
|
|
|
longs["--days" ] = "-D";
|
|
|
|
longs["--force" ] = "-f";
|
|
|
|
longs["--force" ] = "-f";
|
|
|
|
longs["--Force" ] = "-F";
|
|
|
|
longs["--Force" ] = "-F";
|
|
|
|
longs["--grep" ] = "-g";
|
|
|
|
longs["--grep" ] = "-g";
|
|
|
|
longs["--help" ] = "-h";
|
|
|
|
longs["--help" ] = "-h";
|
|
|
|
longs["--insert" ] = "-i";
|
|
|
|
longs["--insert" ] = "-i";
|
|
|
|
longs["--keep" ] = "-k";
|
|
|
|
longs["--keep" ] = "-k";
|
|
|
|
longs["--key" ] = "-K";
|
|
|
|
longs["--key" ] = "-K";
|
|
|
|
longs["--location" ] = "-l";
|
|
|
|
longs["--location" ] = "-l";
|
|
|
|
longs["--modify" ] = "-m";
|
|
|
|
longs["--modify" ] = "-m";
|
|
|
|
longs["--Modify" ] = "-M";
|
|
|
|
longs["--Modify" ] = "-M";
|
|
|
|
longs["--encode" ] = "-n";
|
|
|
|
longs["--encode" ] = "-n";
|
|
|
|
longs["--months" ] = "-O";
|
|
|
|
longs["--months" ] = "-O";
|
|
|
|
longs["--print" ] = "-p";
|
|
|
|
longs["--print" ] = "-p";
|
|
|
|
longs["--Print" ] = "-P";
|
|
|
|
longs["--Print" ] = "-P";
|
|
|
|
longs["--quiet" ] = "-q";
|
|
|
|
longs["--quiet" ] = "-q";
|
|
|
|
longs["--log" ] = "-Q";
|
|
|
|
longs["--log" ] = "-Q";
|
|
|
|
longs["--rename" ] = "-r";
|
|
|
|
longs["--rename" ] = "-r";
|
|
|
|
longs["--suffix" ] = "-S";
|
|
|
|
longs["--suffix" ] = "-S";
|
|
|
|
longs["--timestamp"] = "-t";
|
|
|
|
longs["--timestamp"] = "-t";
|
|
|
|
longs["--Timestamp"] = "-T";
|
|
|
|
longs["--Timestamp"] = "-T";
|
|
|
|
longs["--unknown" ] = "-u";
|
|
|
|
longs["--unknown" ] = "-u";
|
|
|
|
longs["--verbose" ] = "-v";
|
|
|
|
longs["--verbose" ] = "-v";
|
|
|
|
longs["--Version" ] = "-V";
|
|
|
|
longs["--Version" ] = "-V";
|
|
|
|
longs["--version" ] = "-V";
|
|
|
|
longs["--version" ] = "-V";
|
|
|
|
longs["--years" ] = "-Y";
|
|
|
|
longs["--years" ] = "-Y";
|
|
|
|
|
|
|
|
|
|
|
|
for ( int i = 0 ; i < argc ; i++ ) {
|
|
|
|
for ( int i = 0 ; i < argc ; i++ ) {
|
|
|
|
std::string* arg = new std::string(Argv[i]);
|
|
|
|
std::string* arg = new std::string(Argv[i]);
|
|
|
|
if (longs.find(*arg) != longs.end() ) {
|
|
|
|
if (longs.find(*arg) != longs.end() ) {
|
|
|
|
argv[i] = ::strdup(longs[*arg].c_str());
|
|
|
|
argv[i] = ::strdup(longs[*arg].c_str());
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
|
argv[i] = ::strdup(Argv[i]);
|
|
|
|
argv[i] = ::strdup(Argv[i]);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
delete arg;
|
|
|
|
delete arg;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
int rc = Util::Getopt::getopt(argc, argv, optstring_);
|
|
|
|
int rc = Util::Getopt::getopt(argc, argv, optstring_);
|
|
|
|
// Further consistency checks
|
|
|
|
// Further consistency checks
|
|
|
@ -958,8 +974,8 @@ int Params::getopt(int argc, char* const Argv[])
|
|
|
|
rc = 1;
|
|
|
|
rc = 1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// cleanup the argument vector
|
|
|
|
// cleanup the argument vector
|
|
|
|
for ( int i = 0 ; i < argc ; i++ ) ::free((void*)argv[i]);
|
|
|
|
for ( int i = 0 ; i < argc ; i++ ) ::free((void*)argv[i]);
|
|
|
|
delete [] argv;
|
|
|
|
delete [] argv;
|
|
|
|
|
|
|
|
|
|
|
|
return rc;
|
|
|
|
return rc;
|
|
|
|