#ifdef UNSAFE_BUFFERS_BUILD
# pragma allow_unsafe_buffers
#endif
#include "common/debug.h"
#include "system_utils.h"
#include <string.h>
#include <sys/stat.h>
#include <sys/time.h>
#include <sys/types.h>
#include <unistd.h>
#include <array>
namespace angle
{
std::string GetExecutablePath()
{
char path[4096];
ssize_t result = readlink("/proc/self/exe", path, sizeof(path) - 1);
if (result < 0 || static_cast<size_t>(result) >= sizeof(path) - 1)
{
return "";
}
path[result] = '\0';
return path;
}
std::string GetExecutableDirectory()
{
std::string executablePath = GetExecutablePath();
size_t lastPathSepLoc = executablePath.find_last_of("/");
return (lastPathSepLoc != std::string::npos) ? executablePath.substr(0, lastPathSepLoc) : "";
}
const char *GetSharedLibraryExtension()
{
return "so";
}
double GetCurrentSystemTime()
{
struct timespec currentTime;
clock_gettime(CLOCK_MONOTONIC, ¤tTime);
return currentTime.tv_sec + currentTime.tv_nsec * 1e-9;
}
void SetCurrentThreadName(const char *name)
{
ASSERT(strlen(name) < 16);
pthread_setname_np(pthread_self(), name);
}
}