diff options
Diffstat (limited to 'xmake')
| -rw-r--r-- | xmake/core/base/hash.lua | 58 | ||||
| -rw-r--r-- | xmake/core/base/os.lua | 3 | ||||
| -rw-r--r-- | xmake/core/sandbox/modules/hash.lua | 69 |
3 files changed, 111 insertions, 19 deletions
diff --git a/xmake/core/base/hash.lua b/xmake/core/base/hash.lua index 53f535631..5f162af65 100644 --- a/xmake/core/base/hash.lua +++ b/xmake/core/base/hash.lua @@ -71,6 +71,20 @@ function hash.sha256(file_or_data) return hashstr, errors end +-- generate uuid, e.g "91E8ECF1-417F-4EDF-A574-E22D7D8D204A" +function hash.uuid(str) + return hash.uuid4(str) +end + +-- generate xxhash32 from the given file or data +function hash.xxhash32(file_or_data) + local result, errors = hash.xxhash64(file_or_data) + if result then + result = result:sub(1, 8) + end + return result, errors +end + -- generate xxhash64 from the given file or data function hash.xxhash64(file_or_data) local hashstr, errors @@ -97,16 +111,22 @@ function hash.xxhash128(file_or_data) return hashstr, errors end --- generate uuid, e.g "91E8ECF1-417F-4EDF-A574-E22D7D8D204A" -function hash.uuid(str) - return hash.uuid4(str) -end - -- generate hash32 from string, e.g. "91e8ecf1" function hash.strhash32(str) local data = libc.ptraddr(libc.dataptr(str)) local size = #str - return hash._xxhash(64, data, size):sub(1, 8) + local result, errors = hash._xxhash(64, data, size) + if result then + result = result:sub(1, 8) + end + return result, errors +end + +-- generate hash64 from string, e.g. "91e8ecf191e8ecf1" +function hash.strhash64(str) + local data = libc.ptraddr(libc.dataptr(str)) + local size = #str + return hash._xxhash(64, data, size) end -- generate hash128 from string, e.g. "91e8ecf1417f4edfa574e22d7d8d204a" @@ -116,5 +136,31 @@ function hash.strhash128(str) return hash._xxhash(128, data, size) end +-- init random seed +function hash._init_random_seed() + if hash._INIT_RANDOM_SEED == nil then + math.randomseed(os.time()) + hash._INIT_RANDOM_SEED = true + end +end + +-- generate random32 hash +function hash.random32() + return hash.strhash32(tostring(math.random())) +end + +-- generate random64 hash +function hash.random64() + return hash.strhash64(tostring(math.random())) +end + +-- generate random128 hash +function hash.random128() + return hash.strhash128(tostring(math.random())) +end + +-- init random seed first +hash._init_random_seed() + -- return module: hash return hash diff --git a/xmake/core/base/os.lua b/xmake/core/base/os.lua index 41fe07d22..72d395d77 100644 --- a/xmake/core/base/os.lua +++ b/xmake/core/base/os.lua @@ -761,7 +761,8 @@ function os.tmpfile(opt_or_key) key = opt_or_key.key opt = opt_or_key end - return path.join(os.tmpdir(opt), "_" .. (hash.uuid4(key):gsub("-", ""))) + local filename = "_" .. (key and hash.strhash128(key) or (hash.random128())) + return path.join(os.tmpdir(opt), filename) end -- exit program diff --git a/xmake/core/sandbox/modules/hash.lua b/xmake/core/sandbox/modules/hash.lua index 11a85f3fb..178bb2a5f 100644 --- a/xmake/core/sandbox/modules/hash.lua +++ b/xmake/core/sandbox/modules/hash.lua @@ -70,40 +70,85 @@ function sandbox_hash.md5(file_or_data) return md5 end +-- generate xxhash32 from the given file or data +function sandbox_hash.xxhash32(file_or_data) + local result, errors = hash.xxhash32(file_or_data) + if not result then + raise("cannot generate xxhash32, %s", errors or "unknown errors") + end + return result +end + -- generate xxhash64 from the given file or data function sandbox_hash.xxhash64(file_or_data) - local xxhash64, errors = hash.xxhash64(file_or_data) - if not xxhash64 then + local result, errors = hash.xxhash64(file_or_data) + if not result then raise("cannot generate xxhash64, %s", errors or "unknown errors") end - return xxhash64 + return result end -- generate xxhash128 from the given file or data function sandbox_hash.xxhash128(file_or_data) - local xxhash128, errors = hash.xxhash128(file_or_data) - if not xxhash128 then + local result, errors = hash.xxhash128(file_or_data) + if not result then raise("cannot generate xxhash128, %s", errors or "unknown errors") end - return xxhash128 + return result end -- generate hash32 from string function sandbox_hash.strhash32(str) - local hash32, errors = hash.strhash32(str) - if not hash32 then + local result, errors = hash.strhash32(str) + if not result then + raise("cannot generate hash32 for %s, %s", str, errors or "unknown errors") + end + return result +end + +-- generate hash64 from string +function sandbox_hash.strhash64(str) + local result, errors = hash.strhash64(str) + if not result then raise("cannot generate hash32 for %s, %s", str, errors or "unknown errors") end - return hash32 + return result end -- generate hash128 from string function sandbox_hash.strhash128(str) - local hash128, errors = hash.strhash128(str) - if not hash128 then + local result, errors = hash.strhash128(str) + if not result then raise("cannot generate hash128 for %s, %s", str, errors or "unknown errors") end - return hash128 + return result +end + +-- generate random32 +function sandbox_hash.random32() + local result, errors = hash.random32() + if not result then + raise("cannot generate random32, %s", errors or "unknown errors") + end + return result +end + +-- generate random64 +function sandbox_hash.random64() + local result, errors = hash.random64() + if not result then + raise("cannot generate random64, %s", errors or "unknown errors") + end + return result +end + +-- generate random128 +function sandbox_hash.random128() + local result, errors = hash.random128() + if not result then + raise("cannot generate random128, %s", errors or "unknown errors") + end + return result end -- return module |
