X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=dirwatcher.ml;h=53c4c1cddfac4b57d6e00801cf84221738c3cd25;hb=c83cc6c663566b82531b670f8b492c6ff1e1f18f;hp=667eba7f2f740417ac97cd55e1c07522a64ba57d;hpb=542f2c4d52a5a1113ba9017cb0ee70304393fac4;p=vsys.git diff --git a/dirwatcher.ml b/dirwatcher.ml index 667eba7..53c4c1c 100644 --- a/dirwatcher.ml +++ b/dirwatcher.ml @@ -9,7 +9,6 @@ open Globals * leaks - fix implementation of rmdir accordingly *) let wdmap = Hashtbl.create 1024 -let masks = Hashtbl.create 1024 let fd = Inotify.init () @@ -18,35 +17,23 @@ let rec list_check lst elt = | [] -> false | car::cdr -> if (car==elt) then true else list_check cdr elt +let pevlist evlist = + List.iter + (fun e -> + logprint "Event: %s\n" (string_of_event e)) + evlist + let handle_dir_event dirname evlist str = let fname = String.concat "/" [dirname;str] in - fprintf logfd "File: %s. " fname;List.iter - (fun e -> - fprintf logfd "Event: %s\n" (string_of_event e)) - evlist; - flush logfd + logprint "File: %s. " fname; + pevlist evlist let add_watch dir events handler = - let evcheck = list_check events in let wd = Inotify.add_watch fd dir events in Hashtbl.add wdmap wd (dir,Some(handler)) (* Ignore the possibility that the whole directory can disappear and come * back while it is masked *) -let mask_watch fqp = - try - Hashtbl.replace masks fqp true - with _ -> - () - -let unmask_watch fqp = - if (Hashtbl.mem masks fqp) then - begin - Hashtbl.remove masks fqp - end - else - fprintf logfd "WARNING: %s -- Unpaired unmask\n" fqp;flush logfd - let asciiz s = let rec findfirstnul str idx len = if ((idx==len) || @@ -68,15 +55,15 @@ let receive_event (eventdescriptor:fname_and_fd) (bla:fname_and_fd) = let (dirname,handler) = try Hashtbl.find wdmap wd with Not_found->("",None) in - match handler with - | None->fprintf logfd "Unhandled watch descriptor\n";flush logfd - | Some(handler)-> - let fqp = String.concat "/" [dirname;purestr] in - let mask_filter = Hashtbl.mem masks fqp in - if (not mask_filter) then - begin - handler wd dirname evlist purestr - end + match handler with + | None-> + logprint "Unhandled watch descriptor\n" + | Some(handler)-> + let fqp = String.concat "/" [dirname;purestr] in + begin + handler wd dirname evlist + purestr + end end | _ -> ()) evs