* 64-bit compatibility fixes (for problems revealed by building on an Athlon
64 running 64-bit SUSE). A patched ATerm library is required to run Nix succesfully.
This commit is contained in:
		
							parent
							
								
									e3c07782d1
								
							
						
					
					
						commit
						9d72bf8835
					
				
					 10 changed files with 21 additions and 20 deletions
				
			
		|  | @ -488,9 +488,9 @@ static string relativise(Path pivot, Path p) | |||
|     /* Otherwise, `p' is in a parent of `pivot'.  Find up till which
 | ||||
|        path component `p' and `pivot' match, and add an appropriate | ||||
|        number of `..' components. */ | ||||
|     unsigned int i = 1; | ||||
|     string::size_type i = 1; | ||||
|     while (1) { | ||||
|         unsigned int j = pivot.find('/', i); | ||||
|         string::size_type j = pivot.find('/', i); | ||||
|         if (j == string::npos) break; | ||||
|         j++; | ||||
|         if (pivot.substr(0, j) != p.substr(0, j)) break; | ||||
|  |  | |||
|  | @ -212,7 +212,7 @@ static void readTempRoots(PathSet & tempRoots, FDs & fds) | |||
|         string contents = readFile(*fd); | ||||
| 
 | ||||
|         /* Extract the roots. */ | ||||
|         unsigned int pos = 0, end; | ||||
|         string::size_type pos = 0, end; | ||||
| 
 | ||||
|         while ((end = contents.find((char) 0, pos)) != string::npos) { | ||||
|             Path root(contents, pos, end - pos); | ||||
|  |  | |||
|  | @ -46,7 +46,7 @@ static void readSettings() | |||
|             line += contents[pos++]; | ||||
|         pos++; | ||||
| 
 | ||||
|         unsigned int hash = line.find('#'); | ||||
|         string::size_type hash = line.find('#'); | ||||
|         if (hash != string::npos) | ||||
|             line = string(line, 0, hash); | ||||
| 
 | ||||
|  |  | |||
|  | @ -99,7 +99,7 @@ PathSet scanForReferences(const string & path, const PathSet & paths) | |||
|        have the form `HASH-bla'). */ | ||||
|     for (PathSet::const_iterator i = paths.begin(); i != paths.end(); i++) { | ||||
|         string baseName = baseNameOf(*i); | ||||
|         unsigned int pos = baseName.find('-'); | ||||
|         string::size_type pos = baseName.find('-'); | ||||
|         if (pos == string::npos) | ||||
|             throw Error(format("bad reference `%1%'") % *i); | ||||
|         string s = string(baseName, 0, pos); | ||||
|  |  | |||
|  | @ -243,7 +243,7 @@ Path toStorePath(const Path & path) | |||
| { | ||||
|     if (!isInStore(path)) | ||||
|         throw Error(format("path `%1%' is not in the Nix store") % path); | ||||
|     unsigned int slash = path.find('/', nixStore.size() + 1); | ||||
|     Path::size_type slash = path.find('/', nixStore.size() + 1); | ||||
|     if (slash == Path::npos) | ||||
|         return path; | ||||
|     else | ||||
|  | @ -563,7 +563,7 @@ static Hash queryHash(const Transaction & txn, const Path & storePath) | |||
| { | ||||
|     string s; | ||||
|     nixDB.queryString(txn, dbValidPaths, storePath, s); | ||||
|     unsigned int colon = s.find(':'); | ||||
|     string::size_type colon = s.find(':'); | ||||
|     if (colon == string::npos) | ||||
|         throw Error(format("corrupt hash `%1%' in valid-path entry for `%2%'") | ||||
|             % s % storePath); | ||||
|  |  | |||
|  | @ -111,34 +111,35 @@ void ATermMap::copy(KeyValue * elements, unsigned int capacity) | |||
| } | ||||
| 
 | ||||
| 
 | ||||
| /* !!! use a bigger shift for 64-bit platforms? */ | ||||
| static const unsigned int shift = 16; | ||||
| static const unsigned int knuth = (unsigned int) (0.6180339887 * (1 << shift)); | ||||
| static const unsigned long knuth = (unsigned long) (0.6180339887 * (1 << shift)); | ||||
| 
 | ||||
| 
 | ||||
| unsigned int ATermMap::hash1(ATerm key) const | ||||
| unsigned long ATermMap::hash1(ATerm key) const | ||||
| { | ||||
|     /* Don't care about the least significant bits of the ATerm
 | ||||
|        pointer since they're always 0. */ | ||||
|     unsigned int key2 = ((unsigned int) key) >> 2; | ||||
|     unsigned long key2 = ((unsigned long) key) >> 2; | ||||
| 
 | ||||
|     /* Approximately equal to:
 | ||||
|     double d = key2 * 0.6180339887; | ||||
|     unsigned int h = (int) (capacity * (d - floor(d))); | ||||
|     */ | ||||
|   | ||||
|     unsigned int h = (capacity * ((key2 * knuth) & ((1 << shift) - 1))) >> shift; | ||||
|     unsigned long h = (capacity * ((key2 * knuth) & ((1 << shift) - 1))) >> shift; | ||||
| 
 | ||||
|     return h; | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| unsigned int ATermMap::hash2(ATerm key) const | ||||
| unsigned long ATermMap::hash2(ATerm key) const | ||||
| { | ||||
|     unsigned int key2 = ((unsigned int) key) >> 2; | ||||
|     unsigned long key2 = ((unsigned long) key) >> 2; | ||||
|     /* Note: the result must be relatively prime to `capacity' (which
 | ||||
|        is a power of 2), so we make sure that the result is always | ||||
|        odd. */ | ||||
|     unsigned int h = ((key2 * 134217689) & (capacity - 1)) | 1; | ||||
|     unsigned long h = ((key2 * 134217689) & (capacity - 1)) | 1; | ||||
|     return h; | ||||
| } | ||||
| 
 | ||||
|  |  | |||
|  | @ -113,8 +113,8 @@ private: | |||
| 
 | ||||
|     void copy(KeyValue * elements, unsigned int capacity); | ||||
|      | ||||
|     inline unsigned int hash1(ATerm key) const; | ||||
|     inline unsigned int hash2(ATerm key) const; | ||||
|     inline unsigned long hash1(ATerm key) const; | ||||
|     inline unsigned long hash2(ATerm key) const; | ||||
| }; | ||||
| 
 | ||||
| 
 | ||||
|  |  | |||
|  | @ -119,7 +119,7 @@ Path canonPath(const Path & path, bool resolveSymlinks) | |||
| 
 | ||||
| Path dirOf(const Path & path) | ||||
| { | ||||
|     unsigned int pos = path.rfind('/'); | ||||
|     Path::size_type pos = path.rfind('/'); | ||||
|     if (pos == string::npos) | ||||
|         throw Error(format("invalid file name: %1%") % path); | ||||
|     return pos == 0 ? "/" : Path(path, 0, pos); | ||||
|  | @ -128,7 +128,7 @@ Path dirOf(const Path & path) | |||
| 
 | ||||
| string baseNameOf(const Path & path) | ||||
| { | ||||
|     unsigned int pos = path.rfind('/'); | ||||
|     Path::size_type pos = path.rfind('/'); | ||||
|     if (pos == string::npos) | ||||
|         throw Error(format("invalid file name %1% ") % path); | ||||
|     return string(path, pos + 1); | ||||
|  |  | |||
|  | @ -350,7 +350,7 @@ static void queryInstSources(EvalState & state, | |||
|                 DrvInfo elem; | ||||
|                 elem.attrs = shared_ptr<ATermMap>(new ATermMap(0)); /* ugh... */ | ||||
|                 string name = baseNameOf(*i); | ||||
|                 unsigned int dash = name.find('-'); | ||||
|                 string::size_type dash = name.find('-'); | ||||
|                 if (dash != string::npos) | ||||
|                     name = string(name, dash + 1); | ||||
| 
 | ||||
|  |  | |||
|  | @ -19,7 +19,7 @@ static int parseName(const string & profileName, const string & name) | |||
| { | ||||
|     if (string(name, 0, profileName.size() + 1) != profileName + "-") return -1; | ||||
|     string s = string(name, profileName.size() + 1); | ||||
|     unsigned int p = s.find("-link"); | ||||
|     string::size_type p = s.find("-link"); | ||||
|     if (p == string::npos) return -1; | ||||
|     int n; | ||||
|     if (string2Int(string(s, 0, p), n) && n >= 0) | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue