/* -*- LPC -*- */ /* * $Id: exe_c.c,v 1.9 2000/07/01 01:18:28 pinkfish Exp $ * */ #include <cmds/options.h> inherit "/cmds/base"; #define LOG_FILE "/d/admin/log/EXEC.log" mixed do_exec(string str, string ref suc) { mixed ret; string file; string wiz_dir; string file_header; object ob; if (!this_player()) { suc = "fail"; return 0; } wiz_dir = "/w/" + this_player()->query_name(); if (file_size(wiz_dir) != -2) { suc = "fail"; return notify_fail("Directory: " + wiz_dir + " does not exist.\n"); } file = wiz_dir + "/exec_tmp"; if (ob = find_object(file)) { file->dest_me(); if(ob) destruct(ob); } if (file_size(file + ".c") > 0) { rm(file+".c"); } unguarded((: write_file(LOG_FILE, ctime(time()) + " - " + this_player()->query_name() + ": " + $(str) + "\n") :)); file_header = this_player()->query_property(OPTION_EXEC_INCLUDE); if (file_header) { write_file(file + ".c", "#include \"" + file_header + "\"\n\n"); } write_file(file + ".c", "void dest_me() { destruct(this_object()); }\n" "mixed do_call() {\n" + str + ";\n}\n"); suc = catch(ret = file->do_call()); if ((ob = find_object(file))) { ob->dest_me(); } rm(file + ".c"); return ret; } /* do_exec() */ int cmd(string str) { string err; mixed ret = do_exec(str, ref err); if (err == "fail") return 0; if (err == 0) { this_player()->more_string(sprintf("\nReturns: %O\n", ret), "Exec results"); } else { printf("Exec failed: %s", err); } return 1; }