* Templatise getIntArg / string2Int.
This commit is contained in:
		
							parent
							
								
									8022015552
								
							
						
					
					
						commit
						9b8fda796b
					
				
					 5 changed files with 25 additions and 40 deletions
				
			
		|  | @ -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…
	
	Add table
		Add a link
		
	
		Reference in a new issue