*/
#include <arpa/inet.h>
+#include <sys/utsname.h>
#include <uv.h>
{ 0 }
};
+static void ident_add_stat(const char *path) {
+ struct stat stab;
+ int r = stat(path, &stab);
+ if (r) diee("failed to stat %s", path);
+
+ IDENT_ADD_OBJ(stab.st_dev);
+ IDENT_ADD_OBJ(stab.st_ino);
+}
+
void ident_addinit(void) {
- char ident_magic[1] = { 0 };
- sha256_update(&identsc, sizeof(ident_magic), ident_magic);
+ char magic = 1;
+
+ IDENT_ADD_OBJ(magic);
+
+ struct utsname uts = { };
+ size_t utslen = sizeof(uts);
+ int r = uname(&uts);
+ if (r) diee("uname failed!");
+ IDENT_ADD_OBJ(utslen);
+ IDENT_ADD_OBJ(uts);
+
+ ident_add_stat(".");
+ ident_add_stat("/");
}
static void propagate_exit_status(int status, const char *what) {
void ident_addinit(void);
bool stabs_same_inode(struct stat *a, struct stat *b);
+#define IDENT_ADD_OBJ(obj) \
+ sha256_update(&identsc, sizeof((obj)), (void*)&obj);
+
#endif /*PREFORK_H*/