mirror of
https://github.com/sunnypilot/sunnypilot.git
synced 2026-07-11 20:22:04 +08:00
9f0611507e
* probably broke a lot, need the commit though
* finally works
* make it work...
* ...
* kind of works
* better styling
* all should work
* tiny cleanup
* temp
* looks nicer
* create JWT in C++
* kilometers -> km
* use correct free methods
* dont put code in assert statement
* Build JWT payload dynamically
* get dongle id once
* include cleanup
* Remove qDebug
* Update drive_stats.cc
Github is a nice editor :)
* swap week and all and fix sconscript
* install openssl
* openssl include dirs on mac
* is this where openssl is?
* It's here
* small cleanup
Co-authored-by: Comma Device <device@comma.ai>
Co-authored-by: Willem Melching <willem.melching@gmail.com>
old-commit-hash: 5b26c97141
88 lines
2.1 KiB
C++
88 lines
2.1 KiB
C++
#pragma once
|
|
|
|
#include <cstdio>
|
|
#include <unistd.h>
|
|
|
|
#include <string>
|
|
#include <memory>
|
|
#include <sstream>
|
|
#include <fstream>
|
|
|
|
namespace util {
|
|
|
|
inline bool starts_with(std::string s, std::string prefix) {
|
|
return s.compare(0, prefix.size(), prefix) == 0;
|
|
}
|
|
|
|
template<typename ... Args>
|
|
inline std::string string_format( const std::string& format, Args ... args ) {
|
|
size_t size = snprintf( nullptr, 0, format.c_str(), args ... ) + 1;
|
|
std::unique_ptr<char[]> buf( new char[ size ] );
|
|
snprintf( buf.get(), size, format.c_str(), args ... );
|
|
return std::string( buf.get(), buf.get() + size - 1 );
|
|
}
|
|
|
|
inline std::string read_file(std::string fn) {
|
|
std::ifstream t(fn);
|
|
std::stringstream buffer;
|
|
buffer << t.rdbuf();
|
|
return buffer.str();
|
|
}
|
|
|
|
inline std::string tohex(const uint8_t* buf, size_t buf_size) {
|
|
std::unique_ptr<char[]> hexbuf(new char[buf_size*2+1]);
|
|
for (size_t i=0; i < buf_size; i++) {
|
|
sprintf(&hexbuf[i*2], "%02x", buf[i]);
|
|
}
|
|
hexbuf[buf_size*2] = 0;
|
|
return std::string(hexbuf.get(), hexbuf.get() + buf_size*2);
|
|
}
|
|
|
|
inline std::string base_name(std::string const & path) {
|
|
size_t pos = path.find_last_of("/");
|
|
if (pos == std::string::npos) return path;
|
|
return path.substr(pos + 1);
|
|
}
|
|
|
|
inline std::string dir_name(std::string const & path) {
|
|
size_t pos = path.find_last_of("/");
|
|
if (pos == std::string::npos) return "";
|
|
return path.substr(0, pos);
|
|
}
|
|
|
|
inline std::string readlink(std::string path) {
|
|
char buff[4096];
|
|
ssize_t len = ::readlink(path.c_str(), buff, sizeof(buff)-1);
|
|
if (len != -1) {
|
|
buff[len] = '\0';
|
|
return std::string(buff);
|
|
}
|
|
return "";
|
|
}
|
|
|
|
inline std::string getenv_default(const char* env_var, const char * suffix, const char* default_val) {
|
|
const char* env_val = getenv(env_var);
|
|
if (env_val != NULL){
|
|
return std::string(env_val) + std::string(suffix);
|
|
} else {
|
|
return std::string(default_val);
|
|
}
|
|
}
|
|
|
|
|
|
}
|
|
|
|
struct unique_fd {
|
|
unique_fd(int fd = -1) : fd_(fd) {}
|
|
unique_fd& operator=(unique_fd&& uf) {
|
|
fd_ = uf.fd_;
|
|
uf.fd_ = -1;
|
|
return *this;
|
|
}
|
|
~unique_fd() {
|
|
if (fd_ != -1) close(fd_);
|
|
}
|
|
operator int() const { return fd_; }
|
|
int fd_;
|
|
};
|