#define SAVE_FILE "/secure/rcs_handler.o"
mapping _locks = ([]);
void create() {
unguarded((: restore_object, SAVE_FILE :));
}
void add_lock(mixed cre, string file) {
string name;
if( file[0] != '/' )
file = "/" + file;
if (stringp(cre)) name = lower_case(cre);
else name = cre->query_name();
if (undefinedp(_locks[name]))
_locks[name] = ({ file });
else if ( member_array( file, _locks[name] ) < 0 )
_locks[name] += ({ file });
unguarded((: save_object, SAVE_FILE :));
return;
}
void remove_lock(mixed cre, string file) {
string name;
if( file[0] != '/' )
file = "/" + file;
if (stringp(cre)) name = lower_case(cre);
else name = cre->query_name();
if (!undefinedp(_locks[name])) {
_locks[name] -= ({ file });
unguarded((: save_object, SAVE_FILE :));
}
return;
}
/**
* Return a mapping of non-creators who have files locked and which files
* those people have locked.
*/
mapping query_non_creators() {
mapping res;
string person;
res = ([ ]);
foreach(person in keys(_locks)) {
if( !creatorp(person) )
res[person] = _locks[person];
}
return res;
}
string *query_locks(mixed cre) {
string name;
if (stringp(cre)) name = lower_case(cre);
else name = cre->query_name();
return _locks[name];
}