mud/lib/secure/sefun/files.c
2020-09-06 05:43:07 -07:00

118 lines
2.6 KiB
C

/* /secure/sefun/files.c
* from Dead Souls 3.3
* functions which handle file operations
* created by Descartes of Borg 940926
*/
string Port, gtempname, gfilename;
int file_exists(string str) {
if(!str || !stringp(str)) return 0;
return (file_size(str) > -1);
}
mixed lpc_file(string str){
if(!file_exists(str)){
if(file_exists(str+".c")) return str+".c";
else return 0;
}
else return str;
}
mixed object_file(string str){
if(!file_exists(str)){
if(file_exists(str+".o")) return str+".o";
else return 0;
}
else return str;
}
int directory_exists(string str){
if(!str || (sizeof(str) < 2 && str != "/")) return 0;
return (file_size(str) == -2);
}
string player_save_file(string who){
if( !stringp(who) ) error("Bad argument 1 to save_file().");
who = convert_name(who);
return master()->player_save_file(who);
}
string save_file(string what){
string ret;
#if ENABLE_INSTANCES
ret = new_savename(what);
#else
ret = old_savename(what);
#endif
return ret;
}
int indent_file(string filename){
string tempname;
tempname = "/tmp/indent."+time()+".tmp";
write_file(tempname,"I\n");
gtempname = tempname;
gfilename = filename;
if(!cp(filename,tempname+".dat")){
write("You don't have read access to "+filename);
return 0;
}
load_object("/secure/cmds/creators/lsed")->cmd(tempname+" "+tempname+".dat");
if(!unguarded((: cp(gtempname+".dat", gfilename) :)) ){
write("You don't have write access to "+filename);
rm(tempname+".dat");
rm(tempname);
return 0;
}
rm(tempname+".dat");
rm(tempname);
return 1;
}
int mkdir_recurse(string path){
string *path_arr = explode(path,"/");
string agglutinate = "";
if(directory_exists(path)) return 0;
foreach(string element in path_arr){
agglutinate += "/"+element;
if(!directory_exists(agglutinate)){
if(!mkdir(agglutinate)) return 0;
}
}
return 1;
}
string new_savename(string name){
string unoed, ported, bare;
int ret;
if(grepp(name, "."+__PORT__)) return name;
if(last(name,2) == ".o") unoed = truncate(name, 2);
else unoed = (name || "");
bare = replace_string(unoed, ""+__PORT__, "");
while(last(bare, 1) == "."){
bare = truncate(bare, 1);
}
ported = bare + "." + __PORT__ + ".o";
return ported;
}
string old_savename(string name){
string pre;
if(name){
sscanf(name, "%s.%*s", pre);
if(pre) return pre+".o";
return name+".o";
}
return 0;
}