diff --git a/apps/dsm/mods/mod_sys/ModSys.cpp b/apps/dsm/mods/mod_sys/ModSys.cpp index c7583068..c6e8f462 100644 --- a/apps/dsm/mods/mod_sys/ModSys.cpp +++ b/apps/dsm/mods/mod_sys/ModSys.cpp @@ -61,6 +61,7 @@ DSMAction* SCSysModule::getAction(const string& from_str) { DEF_CMD("sys.mkdirRecursive", SCMkDirRecursiveAction); DEF_CMD("sys.rename", SCRenameAction); DEF_CMD("sys.unlink", SCUnlinkAction); + DEF_CMD("sys.unlinkArray", SCUnlinkArrayAction); return NULL; } @@ -190,3 +191,30 @@ EXEC_ACTION_START(SCUnlinkAction) { sc_sess->SET_ERRNO(DSM_ERRNO_FILE); } } EXEC_ACTION_END; + +CONST_ACTION_2P(SCUnlinkArrayAction, ',', true); +EXEC_ACTION_START(SCUnlinkArrayAction) { + string fname = resolveVars(par1, sess, sc_sess, event_params); + if (fname.empty()) + return false; + string prefix = resolveVars(par2, sess, sc_sess, event_params); + + unsigned int arr_size = 0; + if (str2i(sc_sess->var[fname + "_size"], arr_size)) { + ERROR("_size not present/parseable '$%s'\n", sc_sess->var[fname + "_size"].c_str()); + sc_sess->SET_ERRNO(DSM_ERRNO_UNKNOWN_ARG); + return false; + } + + sc_sess->SET_ERRNO(DSM_ERRNO_OK); + for (unsigned int i=0;ivar[fname + "_"+int2str(i)]; + DBG("unlinking '%s'\n", file_fullname.c_str()); + if (unlink(file_fullname.c_str())) { + DBG("unlink '%s' failed: '%s'\n", + file_fullname.c_str(), strerror(errno)); + sc_sess->SET_ERRNO(DSM_ERRNO_FILE); + } + } +} EXEC_ACTION_END; diff --git a/apps/dsm/mods/mod_sys/ModSys.h b/apps/dsm/mods/mod_sys/ModSys.h index 951e5b84..900e8445 100644 --- a/apps/dsm/mods/mod_sys/ModSys.h +++ b/apps/dsm/mods/mod_sys/ModSys.h @@ -44,4 +44,5 @@ DEF_ACTION_1P(SCMkDirAction); DEF_ACTION_1P(SCMkDirRecursiveAction); DEF_ACTION_2P(SCRenameAction); DEF_ACTION_1P(SCUnlinkAction); +DEF_ACTION_2P(SCUnlinkArrayAction); #endif