// Originally from Truilkan... the user versions were whipped up by Buddha
#include <config.h>
#include <uid.h>
string data_dir(object obj) {
return DATA_DIR + base_name(obj);
}
string data_file(object obj) {
return data_dir(obj) + "/" + (geteuid(obj) ? geteuid(obj) : getuid(obj));
}
varargs string user_data_dir(object obj, string name) {
if (!name) name = (geteuid(obj));
if (!name) return "" ;
// if (!name) error("user_data_dir: Can't determine user's name.\n");
return data_dir(obj) + "/" + extract(name, 0, 0);
}
varargs string user_data_file(object obj, string name) {
string dir;
dir = (name ? user_data_dir(obj, name) : user_data_dir(obj));
return dir + "/" + (name ? name : geteuid(obj));
}
void assure_user_save_dir(object user) {
string dir, path, *parts;
int j;
if (previous_object() != user) return;
path = user_data_dir(user);
if (file_size(path) == -1) {
seteuid(ROOT_UID);
parts = explode(path, "/");
dir = "";
for (j = 0; j < sizeof(parts); j++) {
dir += parts[j];
mkdir(dir);
dir += "/";
}
}
if (file_size(path) == -1)
write("assure_save_dir failed!\n");
}
void assure_save_dir(object user) {
string dir, path, *parts;
int j;
if (previous_object() != user) return;
path = data_dir(user);
if (file_size(path) == -1) {
seteuid(ROOT_UID);
parts = explode(path, "/");
dir = "";
for (j = 0; j < sizeof(parts); j++) {
dir += parts[j];
mkdir(dir);
dir += "/";
}
}
}