forked from lix-project/lix
* Templatise getIntArg / string2Int.
This commit is contained in:
parent
8022015552
commit
9b8fda796b
|
@ -87,18 +87,6 @@ static void setLogType(string lt)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
unsigned long long getIntArg(const string & opt,
|
|
||||||
Strings::iterator & i, const Strings::iterator & end)
|
|
||||||
{
|
|
||||||
++i;
|
|
||||||
if (i == end) throw UsageError(format("`%1%' requires an argument") % opt);
|
|
||||||
long long n;
|
|
||||||
if (!string2Int(*i, n) || n < 0)
|
|
||||||
throw UsageError(format("`%1%' requires a non-negative integer") % opt);
|
|
||||||
return n;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void initDerivationsHelpers();
|
void initDerivationsHelpers();
|
||||||
|
|
||||||
|
|
||||||
|
@ -195,7 +183,7 @@ static void initAndRun(int argc, char * * argv)
|
||||||
for (Strings::iterator i = args.begin(); i != args.end(); ++i) {
|
for (Strings::iterator i = args.begin(); i != args.end(); ++i) {
|
||||||
string arg = *i;
|
string arg = *i;
|
||||||
if (string(arg, 0, 4) == "-at-") ;
|
if (string(arg, 0, 4) == "-at-") ;
|
||||||
else if (arg.length() > 2 && arg[0] == '-' && arg[1] != '-') {
|
else if (arg.length() > 2 && arg[0] == '-' && arg[1] != '-' && !isdigit(arg[1])) {
|
||||||
for (unsigned int j = 1; j < arg.length(); j++)
|
for (unsigned int j = 1; j < arg.length(); j++)
|
||||||
if (isalpha(arg[j]))
|
if (isalpha(arg[j]))
|
||||||
remaining.push_back((string) "-" + arg[j]);
|
remaining.push_back((string) "-" + arg[j]);
|
||||||
|
@ -239,11 +227,11 @@ static void initAndRun(int argc, char * * argv)
|
||||||
else if (arg == "--fallback")
|
else if (arg == "--fallback")
|
||||||
tryFallback = true;
|
tryFallback = true;
|
||||||
else if (arg == "--max-jobs" || arg == "-j")
|
else if (arg == "--max-jobs" || arg == "-j")
|
||||||
maxBuildJobs = getIntArg(arg, i, args.end());
|
maxBuildJobs = getIntArg<unsigned int>(arg, i, args.end());
|
||||||
else if (arg == "--readonly-mode")
|
else if (arg == "--readonly-mode")
|
||||||
readOnlyMode = true;
|
readOnlyMode = true;
|
||||||
else if (arg == "--max-silent-time")
|
else if (arg == "--max-silent-time")
|
||||||
maxSilentTime = getIntArg(arg, i, args.end());
|
maxSilentTime = getIntArg<unsigned int>(arg, i, args.end());
|
||||||
else if (arg == "--no-build-hook")
|
else if (arg == "--no-build-hook")
|
||||||
useBuildHook = false;
|
useBuildHook = false;
|
||||||
else if (arg == "--show-trace")
|
else if (arg == "--show-trace")
|
||||||
|
|
|
@ -22,22 +22,30 @@ extern std::string programId;
|
||||||
|
|
||||||
namespace nix {
|
namespace nix {
|
||||||
|
|
||||||
|
MakeError(UsageError, nix::Error);
|
||||||
|
|
||||||
/* Ugh. No better place to put this. */
|
/* Ugh. No better place to put this. */
|
||||||
Path makeRootName(const Path & gcRoot, int & counter);
|
Path makeRootName(const Path & gcRoot, int & counter);
|
||||||
void printGCWarning();
|
void printGCWarning();
|
||||||
|
|
||||||
void printMissing(const PathSet & paths);
|
void printMissing(const PathSet & paths);
|
||||||
|
|
||||||
unsigned long long getIntArg(const string & opt,
|
template<class N> N getIntArg(const string & opt,
|
||||||
Strings::iterator & i, const Strings::iterator & end);
|
Strings::iterator & i, const Strings::iterator & end)
|
||||||
|
{
|
||||||
|
++i;
|
||||||
|
if (i == end) throw UsageError(format("`%1%' requires an argument") % opt);
|
||||||
|
N n;
|
||||||
|
if (!string2Int(*i, n))
|
||||||
|
throw UsageError(format("`%1%' requires an integer argument") % opt);
|
||||||
|
return n;
|
||||||
|
}
|
||||||
|
|
||||||
/* Whether we're running setuid. */
|
/* Whether we're running setuid. */
|
||||||
extern bool setuidMode;
|
extern bool setuidMode;
|
||||||
|
|
||||||
extern volatile ::sig_atomic_t blockInt;
|
extern volatile ::sig_atomic_t blockInt;
|
||||||
|
|
||||||
MakeError(UsageError, nix::Error);
|
|
||||||
|
|
||||||
struct RemoveTempRoots
|
struct RemoveTempRoots
|
||||||
{
|
{
|
||||||
~RemoveTempRoots();
|
~RemoveTempRoots();
|
||||||
|
|
|
@ -1055,22 +1055,6 @@ string int2String(int n)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool string2Int(const string & s, int & n)
|
|
||||||
{
|
|
||||||
std::istringstream str(s);
|
|
||||||
str >> n;
|
|
||||||
return str && str.get() == EOF;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
bool string2Int(const string & s, long long & n)
|
|
||||||
{
|
|
||||||
std::istringstream str(s);
|
|
||||||
str >> n;
|
|
||||||
return str && str.get() == EOF;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
bool hasSuffix(const string & s, const string & suffix)
|
bool hasSuffix(const string & s, const string & suffix)
|
||||||
{
|
{
|
||||||
return s.size() >= suffix.size() && string(s, s.size() - suffix.size()) == suffix;
|
return s.size() >= suffix.size() && string(s, s.size() - suffix.size()) == suffix;
|
||||||
|
|
|
@ -295,9 +295,14 @@ bool statusOk(int status);
|
||||||
|
|
||||||
|
|
||||||
/* Parse a string into an integer. */
|
/* Parse a string into an integer. */
|
||||||
|
template<class N> bool string2Int(const string & s, N & n)
|
||||||
|
{
|
||||||
|
std::istringstream str(s);
|
||||||
|
str >> n;
|
||||||
|
return str && str.get() == EOF;
|
||||||
|
}
|
||||||
|
|
||||||
string int2String(int n);
|
string int2String(int n);
|
||||||
bool string2Int(const string & s, int & n);
|
|
||||||
bool string2Int(const string & s, long long & n);
|
|
||||||
|
|
||||||
|
|
||||||
/* Return true iff `s' ends in `suffix'. */
|
/* Return true iff `s' ends in `suffix'. */
|
||||||
|
|
|
@ -532,10 +532,10 @@ static void opGC(Strings opFlags, Strings opArgs)
|
||||||
else if (*i == "--print-dead") options.action = GCOptions::gcReturnDead;
|
else if (*i == "--print-dead") options.action = GCOptions::gcReturnDead;
|
||||||
else if (*i == "--delete") options.action = GCOptions::gcDeleteDead;
|
else if (*i == "--delete") options.action = GCOptions::gcDeleteDead;
|
||||||
else if (*i == "--max-freed") {
|
else if (*i == "--max-freed") {
|
||||||
options.maxFreed = getIntArg(*i, i, opFlags.end());
|
long long maxFreed = getIntArg<long long>(*i, i, opFlags.end());
|
||||||
if (options.maxFreed == 0) options.maxFreed = 1;
|
options.maxFreed = maxFreed >= 1 ? maxFreed : 1;
|
||||||
}
|
}
|
||||||
else if (*i == "--max-links") options.maxLinks = getIntArg(*i, i, opFlags.end());
|
else if (*i == "--max-links") options.maxLinks = getIntArg<unsigned int>(*i, i, opFlags.end());
|
||||||
else throw UsageError(format("bad sub-operation `%1%' in GC") % *i);
|
else throw UsageError(format("bad sub-operation `%1%' in GC") % *i);
|
||||||
|
|
||||||
if (!opArgs.empty()) throw UsageError("no arguments expected");
|
if (!opArgs.empty()) throw UsageError("no arguments expected");
|
||||||
|
|
Loading…
Reference in a new issue