* --max-freed: support values >= 4 GB.

This commit is contained in:
Eelco Dolstra 2008-06-18 15:20:33 +00:00
parent d3aa183beb
commit 5af84139a8
4 changed files with 12 additions and 3 deletions

View file

@ -58,12 +58,12 @@ static void setLogType(string lt)
} }
unsigned int getIntArg(const string & opt, unsigned long long getIntArg(const string & opt,
Strings::iterator & i, const Strings::iterator & end) Strings::iterator & i, const Strings::iterator & end)
{ {
++i; ++i;
if (i == end) throw UsageError(format("`%1%' requires an argument") % opt); if (i == end) throw UsageError(format("`%1%' requires an argument") % opt);
int n; long long n;
if (!string2Int(*i, n) || n < 0) if (!string2Int(*i, n) || n < 0)
throw UsageError(format("`%1%' requires a non-negative integer") % opt); throw UsageError(format("`%1%' requires a non-negative integer") % opt);
return n; return n;

View file

@ -26,7 +26,7 @@ namespace nix {
Path makeRootName(const Path & gcRoot, int & counter); Path makeRootName(const Path & gcRoot, int & counter);
void printGCWarning(); void printGCWarning();
unsigned int getIntArg(const string & opt, unsigned long long getIntArg(const string & opt,
Strings::iterator & i, const Strings::iterator & end); Strings::iterator & i, const Strings::iterator & end);
/* Whether we're running setuid. */ /* Whether we're running setuid. */

View file

@ -1020,6 +1020,14 @@ bool string2Int(const string & s, int & n)
} }
bool string2Int(const string & s, long long & n)
{
std::istringstream str(s);
str >> n;
return str && str.get() == EOF;
}
void ignoreException() void ignoreException()
{ {
try { try {

View file

@ -287,6 +287,7 @@ bool statusOk(int status);
/* Parse a string into an integer. */ /* Parse a string into an integer. */
string int2String(int n); string int2String(int n);
bool string2Int(const string & s, int & n); bool string2Int(const string & s, int & n);
bool string2Int(const string & s, long long & n);
/* Exception handling in destructors: print an error message, then /* Exception handling in destructors: print an error message, then