From gambas at ...1... Thu Jan 23 03:34:51 2014 From: gambas at ...1... (=?ISO-8859-1?Q?Beno=EEt_Minisini?=) Date: Thu, 23 Jan 2014 03:34:51 +0100 Subject: [Gambas-devel] About gb.inotify Message-ID: <52E07FCB.3080509@...1...> Hi, Here is a few remarks about gb.inotify, wrote as I read your code. So I may say rubbish. :-) 1) inotify is a Linux kernel specific thing. So I strongly suggest finding a generic name for the class and the component. "PathWatch", or just "Watch". If you find better, you're welcome! 2) Don't do: path = GB.NewZeroString(GB.ToZeroString(ARG(path))); Do instead: path = GB.NewString(STRING(path), LENGTH(path)); One useless string copy avoided. 3) You can use GB.CanRaise() to know which event is handled by a new object. Consequently, you will be able to define the inotify_add_watch() mask automatically if the user does not specify it. No need to watch everything by default! 4) I don't think the ".InotifyEvents" class with one property for each event flag is really useful. As soon as you defined constants in the Inotify class for each event, you can define a Inotify.Events property as a pseudo-array of booleans: Inotify.Events[Inotify.Access] = True Or you can use methods : Inotify.Add(INotify.Access + INotify.Attribute) Inotify.Remove(...) 5) The harder : portability! The inotify equivalent of other systems are usually not as powerful. You should look at something like http://pnotify.googlecode.com/svn/trunk/README to get an idea of what not to implement in the hope of being portable. Maybe you can include that library in your component if it is good. I didn't really look at it : it is not maintained anymore. For a better alternative, you have to look at http://www.heily.com/~mheily/proj/libkqueue/ instead, and http://people.freebsd.org/~jlemon/papers/kqueue.pdf I just noted that kqueue watch file by file descriptor, which may be annoying. But it can associate a user pointer to any event, so no need to scan a linked list of Gambas objects! If it is too difficult for you, just keep gb.inotify and fix the previous points. Enough for now, let's go to bed! Regards, -- Beno?t Minisini