forked from lix-project/lix
* 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
|
@ -488,9 +488,9 @@ static string relativise(Path pivot, Path p)
|
||||||
/* Otherwise, `p' is in a parent of `pivot'. Find up till which
|
/* Otherwise, `p' is in a parent of `pivot'. Find up till which
|
||||||
path component `p' and `pivot' match, and add an appropriate
|
path component `p' and `pivot' match, and add an appropriate
|
||||||
number of `..' components. */
|
number of `..' components. */
|
||||||
unsigned int i = 1;
|
string::size_type i = 1;
|
||||||
while (1) {
|
while (1) {
|
||||||
unsigned int j = pivot.find('/', i);
|
string::size_type j = pivot.find('/', i);
|
||||||
if (j == string::npos) break;
|
if (j == string::npos) break;
|
||||||
j++;
|
j++;
|
||||||
if (pivot.substr(0, j) != p.substr(0, j)) break;
|
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);
|
string contents = readFile(*fd);
|
||||||
|
|
||||||
/* Extract the roots. */
|
/* Extract the roots. */
|
||||||
unsigned int pos = 0, end;
|
string::size_type pos = 0, end;
|
||||||
|
|
||||||
while ((end = contents.find((char) 0, pos)) != string::npos) {
|
while ((end = contents.find((char) 0, pos)) != string::npos) {
|
||||||
Path root(contents, pos, end - pos);
|
Path root(contents, pos, end - pos);
|
||||||
|
|
|
@ -46,7 +46,7 @@ static void readSettings()
|
||||||
line += contents[pos++];
|
line += contents[pos++];
|
||||||
pos++;
|
pos++;
|
||||||
|
|
||||||
unsigned int hash = line.find('#');
|
string::size_type hash = line.find('#');
|
||||||
if (hash != string::npos)
|
if (hash != string::npos)
|
||||||
line = string(line, 0, hash);
|
line = string(line, 0, hash);
|
||||||
|
|
||||||
|
|
|
@ -99,7 +99,7 @@ PathSet scanForReferences(const string & path, const PathSet & paths)
|
||||||
have the form `HASH-bla'). */
|
have the form `HASH-bla'). */
|
||||||
for (PathSet::const_iterator i = paths.begin(); i != paths.end(); i++) {
|
for (PathSet::const_iterator i = paths.begin(); i != paths.end(); i++) {
|
||||||
string baseName = baseNameOf(*i);
|
string baseName = baseNameOf(*i);
|
||||||
unsigned int pos = baseName.find('-');
|
string::size_type pos = baseName.find('-');
|
||||||
if (pos == string::npos)
|
if (pos == string::npos)
|
||||||
throw Error(format("bad reference `%1%'") % *i);
|
throw Error(format("bad reference `%1%'") % *i);
|
||||||
string s = string(baseName, 0, pos);
|
string s = string(baseName, 0, pos);
|
||||||
|
|
|
@ -243,7 +243,7 @@ Path toStorePath(const Path & path)
|
||||||
{
|
{
|
||||||
if (!isInStore(path))
|
if (!isInStore(path))
|
||||||
throw Error(format("path `%1%' is not in the Nix store") % 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)
|
if (slash == Path::npos)
|
||||||
return path;
|
return path;
|
||||||
else
|
else
|
||||||
|
@ -563,7 +563,7 @@ static Hash queryHash(const Transaction & txn, const Path & storePath)
|
||||||
{
|
{
|
||||||
string s;
|
string s;
|
||||||
nixDB.queryString(txn, dbValidPaths, storePath, s);
|
nixDB.queryString(txn, dbValidPaths, storePath, s);
|
||||||
unsigned int colon = s.find(':');
|
string::size_type colon = s.find(':');
|
||||||
if (colon == string::npos)
|
if (colon == string::npos)
|
||||||
throw Error(format("corrupt hash `%1%' in valid-path entry for `%2%'")
|
throw Error(format("corrupt hash `%1%' in valid-path entry for `%2%'")
|
||||||
% s % storePath);
|
% 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 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
|
/* Don't care about the least significant bits of the ATerm
|
||||||
pointer since they're always 0. */
|
pointer since they're always 0. */
|
||||||
unsigned int key2 = ((unsigned int) key) >> 2;
|
unsigned long key2 = ((unsigned long) key) >> 2;
|
||||||
|
|
||||||
/* Approximately equal to:
|
/* Approximately equal to:
|
||||||
double d = key2 * 0.6180339887;
|
double d = key2 * 0.6180339887;
|
||||||
unsigned int h = (int) (capacity * (d - floor(d)));
|
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;
|
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
|
/* Note: the result must be relatively prime to `capacity' (which
|
||||||
is a power of 2), so we make sure that the result is always
|
is a power of 2), so we make sure that the result is always
|
||||||
odd. */
|
odd. */
|
||||||
unsigned int h = ((key2 * 134217689) & (capacity - 1)) | 1;
|
unsigned long h = ((key2 * 134217689) & (capacity - 1)) | 1;
|
||||||
return h;
|
return h;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -113,8 +113,8 @@ private:
|
||||||
|
|
||||||
void copy(KeyValue * elements, unsigned int capacity);
|
void copy(KeyValue * elements, unsigned int capacity);
|
||||||
|
|
||||||
inline unsigned int hash1(ATerm key) const;
|
inline unsigned long hash1(ATerm key) const;
|
||||||
inline unsigned int hash2(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)
|
Path dirOf(const Path & path)
|
||||||
{
|
{
|
||||||
unsigned int pos = path.rfind('/');
|
Path::size_type pos = path.rfind('/');
|
||||||
if (pos == string::npos)
|
if (pos == string::npos)
|
||||||
throw Error(format("invalid file name: %1%") % path);
|
throw Error(format("invalid file name: %1%") % path);
|
||||||
return pos == 0 ? "/" : Path(path, 0, pos);
|
return pos == 0 ? "/" : Path(path, 0, pos);
|
||||||
|
@ -128,7 +128,7 @@ Path dirOf(const Path & path)
|
||||||
|
|
||||||
string baseNameOf(const Path & path)
|
string baseNameOf(const Path & path)
|
||||||
{
|
{
|
||||||
unsigned int pos = path.rfind('/');
|
Path::size_type pos = path.rfind('/');
|
||||||
if (pos == string::npos)
|
if (pos == string::npos)
|
||||||
throw Error(format("invalid file name %1% ") % path);
|
throw Error(format("invalid file name %1% ") % path);
|
||||||
return string(path, pos + 1);
|
return string(path, pos + 1);
|
||||||
|
|
|
@ -350,7 +350,7 @@ static void queryInstSources(EvalState & state,
|
||||||
DrvInfo elem;
|
DrvInfo elem;
|
||||||
elem.attrs = shared_ptr<ATermMap>(new ATermMap(0)); /* ugh... */
|
elem.attrs = shared_ptr<ATermMap>(new ATermMap(0)); /* ugh... */
|
||||||
string name = baseNameOf(*i);
|
string name = baseNameOf(*i);
|
||||||
unsigned int dash = name.find('-');
|
string::size_type dash = name.find('-');
|
||||||
if (dash != string::npos)
|
if (dash != string::npos)
|
||||||
name = string(name, dash + 1);
|
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;
|
if (string(name, 0, profileName.size() + 1) != profileName + "-") return -1;
|
||||||
string s = string(name, profileName.size() + 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;
|
if (p == string::npos) return -1;
|
||||||
int n;
|
int n;
|
||||||
if (string2Int(string(s, 0, p), n) && n >= 0)
|
if (string2Int(string(s, 0, p), n) && n >= 0)
|
||||||
|
|
Loading…
Reference in a new issue