Fixed memory corruption in optionless binaries.

This commit is contained in:
Thulinma 2013-04-15 10:45:56 +02:00
parent 61246062fb
commit 2705af4012

View file

@ -28,7 +28,7 @@ std::string Util::Config::libver = PACKAGE_VERSION;
/// Creates a new configuration manager. /// Creates a new configuration manager.
Util::Config::Config(std::string cmd, std::string version){ Util::Config::Config(std::string cmd, std::string version){
vals.null(); vals.null();
long_count = 0; long_count = 2;
vals["cmd"]["value"].append(cmd); vals["cmd"]["value"].append(cmd);
vals["version"]["long"] = "version"; vals["version"]["long"] = "version";
vals["version"]["short"] = "v"; vals["version"]["short"] = "v";
@ -173,38 +173,40 @@ void Util::Config::parseArgs(int argc, char ** argv){
struct option * longOpts = (struct option*)calloc(long_count + 1, sizeof(struct option)); struct option * longOpts = (struct option*)calloc(long_count + 1, sizeof(struct option));
int long_i = 0; int long_i = 0;
int arg_count = 0; int arg_count = 0;
for (JSON::ObjIter it = vals.ObjBegin(); it != vals.ObjEnd(); it++){ if (vals.size()){
if (it->second.isMember("short")){ for (JSON::ObjIter it = vals.ObjBegin(); it != vals.ObjEnd(); it++){
shortopts += it->second["short"].asString(); if (it->second.isMember("short")){
if (it->second.isMember("arg")){ shortopts += it->second["short"].asString();
shortopts += ":"; if (it->second.isMember("arg")){
shortopts += ":";
}
} }
} if (it->second.isMember("short_off")){
if (it->second.isMember("short_off")){ shortopts += it->second["short_off"].asString();
shortopts += it->second["short_off"].asString(); if (it->second.isMember("arg")){
if (it->second.isMember("arg")){ shortopts += ":";
shortopts += ":"; }
} }
} if (it->second.isMember("long")){
if (it->second.isMember("long")){ longOpts[long_i].name = it->second["long"].asString().c_str();
longOpts[long_i].name = it->second["long"].asString().c_str(); longOpts[long_i].val = it->second["short"].asString()[0];
longOpts[long_i].val = it->second["short"].asString()[0]; if (it->second.isMember("arg")){
if (it->second.isMember("arg")){ longOpts[long_i].has_arg = 1;
longOpts[long_i].has_arg = 1; }
long_i++;
} }
long_i++; if (it->second.isMember("long_off")){
} longOpts[long_i].name = it->second["long_off"].asString().c_str();
if (it->second.isMember("long_off")){ longOpts[long_i].val = it->second["short_off"].asString()[0];
longOpts[long_i].name = it->second["long_off"].asString().c_str(); if (it->second.isMember("arg")){
longOpts[long_i].val = it->second["short_off"].asString()[0]; longOpts[long_i].has_arg = 1;
if (it->second.isMember("arg")){ }
longOpts[long_i].has_arg = 1; long_i++;
} }
long_i++; if (it->second.isMember("arg_num") && !(it->second.isMember("value") && it->second["value"].size())){
} if (it->second["arg_num"].asInt() > arg_count){
if (it->second.isMember("arg_num") && !(it->second.isMember("value") && it->second["value"].size())){ arg_count = it->second["arg_num"].asInt();
if (it->second["arg_num"].asInt() > arg_count){ }
arg_count = it->second["arg_num"].asInt();
} }
} }
} }