X-Git-Url: http://git.onelab.eu/?p=vsys.git;a=blobdiff_plain;f=dirwatcher.ml;h=53c4c1cddfac4b57d6e00801cf84221738c3cd25;hp=e96c4e9ee6fc2bbeb9559f15727fdb14bbb7526a;hb=2b608078f42cc629a62b64149bc620a227c8831f;hpb=46e48c60e9d524bf71631561e193c443613a2bb5 diff --git a/dirwatcher.ml b/dirwatcher.ml index e96c4e9..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,38 +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 masks dir (wd,handler); 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 dir = - try - let wd,_ = Hashtbl.find masks dir in - Inotify.rm_watch fd wd; - Hashtbl.remove wdmap wd - with _ -> - () - -let unmask_watch dir events = - let _,handler = try Hashtbl.find masks dir with Not_found->fprintf logfd "unmask called without mask: %s\n" dir;flush logfd;raise Not_found in - try - Hashtbl.remove masks dir; - add_watch dir events handler - with Not_found -> () - let asciiz s = let rec findfirstnul str idx len = if ((idx==len) || @@ -71,9 +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)->handler wd dirname evlist purestr + 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