aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)AuthorFiles
2022-01-02Update copyright yearHEADmasterSergey Poznyakoff68
2021-12-30Fix typo in doc/webdoc.initSergey Poznyakoff1
2021-12-30Version 5.3release-5.3Sergey Poznyakoff2
2021-12-30Minor changesSergey Poznyakoff2
* doc/.gitignore: Update. * tests/shell.at: Force /bin/sh as the shell
2021-12-29BugfixSergey Poznyakoff1
2021-12-29Unify text of copyright headersSergey Poznyakoff66
2021-12-29Fix building online docsSergey Poznyakoff9
2021-12-29Update documentation. Version 5.2.90Sergey Poznyakoff8
2021-12-27Don't pollute the environment with macro variables.Sergey Poznyakoff2
* src/config.c (cb_global_environ): Remove unused local variable. Disallow legacy syntax. * src/progman.c (defenv): Change structure fields. (parse_legacy_env): Update accordingly. (runcmd): Define macro names as environment variables while processing the "environ" configure statements and undefine them afterwards. If "shell" option is set, expand only macro variables in command names, otherwise expand both environment and macro variables.
2021-12-26New configuration statement for manipulating the environment.unihandlerSergey Poznyakoff24
The "environ" statement is now a compound statement. It can contain five kinds of substatements: "clear" to clear the environment, "keep" to retain certain variables while clearing the environment, "set" to set a variable, "unset" to unset a variable or variables, and "eval" to evaluate a variable reference for side effects. Both "keep" and "unset" can take globbing pattern as their argument, in which case they affect all variables matching that pattern. The value part in the "set" statement is subject to variable expansion, e.g. set "MANPATH=$MANPATH${MANPATH:+:}/usr/local/man" The "environ" block can appear in global context as well. In this case it applies to all watchers. The support for the old one-line "environ" statement is retained for backward compatibility. * grecs: Upgrade. * src/Makefile.am: Add new files. * src/envop.c: New file (fromGNU pies). * src/envop.h: Likewise. * src/wildmatch.c: Likewise. * src/config.c: Add support for block "environ" statement, both global and watcher-scope. Turn off concatenation of adjacent string literals. * src/direvent.h: Include envop.h (prog_handler): Remove env. New field envop. (prog_handler_envrealloc): Remove. (direvent_envop): New global. * src/environ.c: Remove. * src/progman.c (parse_legacy_env): New function. (runcmd): Rewrite. (prog_handler_envrealloc): Remove. * tests/Makefile.am: Add new testcases. * tests/testsuite.at: Likewise. * tests/env00.at: New file. * tests/env01.at: New file. * tests/env02.at: New file. * tests/env03.at: New file. * tests/env04.at: New file. * tests/env05.at: New file. * tests/env06.at: New file. * tests/envdump.c: New options: -A and -D. * tests/envleg00.at: New file (renamed from env00.at). * tests/envleg01.at: New file (renamed from env01.at). * tests/envleg02.at: New file (renamed from env02.at). * tests/envleg03.at: New file (renamed from env03.at). * tests/shell.at: Use backslash continuation instead of relying on implicit concatenation of adjacent string literals.
2021-12-25Rewrite event formatting and logging functionsSergey Poznyakoff5
* src/direvent.c (trans_stat, flags_format, ev_format): New functions. (ev_log): Rewrite. * src/direvent.h (ev_format): New prototype. (ev_log): Change prototype. * src/ev_inotify.c (process_event): Use new logging functions. * src/ev_kqueue.c: Likewise. * src/progman.c (runcmd): Use ev_format to format values for genev_name and sysev_name.
2021-12-25Minor changes in progmanSergey Poznyakoff1
Mostly terminology issues: "redirector" process renamed to "logger".
2021-12-24Change interface for bulk closing of fdsSergey Poznyakoff5
* configure.ac: Select interface to use for bulk closing of the open file descriptors. * src/Makefile.am: Add closefds.c * src/closefds.c: New file. * src/direvent.h (close_fds): New proto. * src/progman.c: Use new close_fds.
2021-12-24Fix tracking of file changed status for inotify.Sergey Poznyakoff4
* src/direvent.h (watchpoint): Remove the written field. [IFACE_KQUEUE] New field file_changed. [IFACE_INOTIFY] New field files_changed. * src/ev_inotify.c (file_changed): New function. (process_event): Use file_changed to verify file status. * src/ev_kqueue.c (sysev_add_watch,process_event): written renamed to file_changed. * src/watcher.c (watchpoint_unref) [IFACE_INOTIFY]: Deallocate files_changed.
2021-12-24Various fixes.Sergey Poznyakoff6
* src/direvent.c (nomem_abend): New function. (emalloc,ecalloc,erealloc): Use nomem_abend on out of memory error. * src/direvent.h (nomem_abend): New proto. * src/ev_inotify.c (process_event): The "changed" generic event includes creation of the file. Add missing gettext markers. Don't process events generated for the watchpoint directory itself. * src/ev_kqueue.c: Add missing gettext markers. * src/progman.c: Revamp debug messages. * src/watcher.c (watchpoint_filemask): New function. (watchpoint_install): Call nomem_abend on out of memory error. (watchpoint_suspend): Stop the program if unable to install sentinel. (directory_sentinel_handler_run,watch_subdirs): Use watchpoint_filemask.
2021-12-23Remove debugging messagesSergey Poznyakoff1
2021-12-23Linux support for the new event handling. Follows up 048e7379d116Sergey Poznyakoff8
* src/direvent.h (watchpoint) <written>: Move out of preprocessor conditional. * src/ev_inotify.c (genev_xlat): GENEV_WRITE maps to GENEV_WRITE. (sysev_add_watch): If GENEV_CHANGE is requested, raise IN_MODIFY and IN_CLOSE_WRITE. (process_event): Translate system events to generic event mask prior to distributing the event to handlers. * src/progman.c (close_fds): One more fix. See also cba6578a56 * tests/change.at: New testcase. * tests/Makefile.am: Add change.at * tests/testsuite.at: Include change.at * tests/createrec2.at: Reorder options to genfile. * tests/genfile.c: Accept multiple -s and -t options.
2021-12-23Rewrite event handling. Introduce compound events ("change"). BSD-only.Sergey Poznyakoff7
* src/config.c (cb_watcher): Use evtfill. * src/direvent.c (trans_fullmask): New function. (genev_init): Remove. All references changed. * src/direvent.h (GENEV_CHANGE): New generic event. (handler_matches_event): Remove macro. (defevt,event_mask_init,evtsetall,genev_xlat): Remove declarations. (evtempty,evtfill) (evtrans_sys_to_gen,evtrans_gen_to_sys) (trans_fullmask): New protos. (watchpoint_run_handlers): Change signature. * src/ev_kqueue.c (genev_xlat): Change GENEV_WRITE translation. (sysev_add_watch): Change computation of sysmask. (process_event): Translate system event flags to generici event mask prior to distributing the event to handlers. Don't call user handlers for directories. * src/event.c (getevt): Rewrite. (defevt,event_mask_init): Remove. (evtempty,evtfill,evtand,evtrans_sys_to_gen) (evtrans_gen_to_sys): New functions. (genev_transtab): Declare the "change" event. * src/handler.c (watchpoint_run_handlers): Take event_mask as argument. Change logic accordingly. * src/watcher.c (deliver_ev_create): Use evtand and filpatlist_match explicitly, instead of the removed handler_matches_event.
2021-12-21Remove unnecessary field of struct watcher.Sergey Poznyakoff2
* src/direvent.h (watcher): Remove watch_written. * src/ev_kqueue.c (sysev_add_watch,process_event): Update accordingly.
2021-12-21Remove spurious commaSergey Poznyakoff1
2021-12-21Fix test sent.at on LinuxSergey Poznyakoff2
2021-12-21Minor fixSergey Poznyakoff1
* src/ev_kqueue.c (process_event): Protect the use of NOTE_CLOSE_WRITE with #ifdef.
2021-12-21Bugfixes (mostly BSD-related)Sergey Poznyakoff8
* src/direvent.h (watchpoint): Remove file_mode. * src/ev_kqueue.c (sysev_add_watch): Actually register new event to minimize the race condition window. (check_created): Check for error if readdir returns NULL. (process_event): Check for new files and directories after running event handlers. * src/progman.c (close_fds): Bugfix. Start from the highest possible fd. (open_redirector): Fix loop condition. * src/watcher.c (watch_subdirs): Check for error if readdir returns NULL. * tests/listname: New auxiliary script. * tests/Makefile.am: Distribute listname. * tests/createrec.at: Rewrite test. Use the listname script to monitor and govern it. * tests/createrec3.at: Likewise.
2021-12-20Update grecsSergey Poznyakoff1
2021-12-20Change handling of GENEV_CREATE on FreeBSDSergey Poznyakoff12
* src/direvent.h (event_handler_fn): Additional argument: notify. (watchpoint) [USE_IFACE == IFACE_KQUEUE]: New members: watch_written, written. * src/ev_kqueue.c (sysev_transtab): Define more system events (if defined). (genev_xlat): Depending on whether NOTE_CLOSE_WRITE is defined, change GENEV_WRITE translation. (sysev_add_watch) [NOTE_CLOSE_WRITE]: Initialize written and watch_written. Update sysmask. (process_event): Special handling for watch_written!=0 * src/handler.c (watchpoint_run_handlers): Pass notify (1) to hp->run. * src/progman.c (prog_handler_run): New argument: notify. Do nothing if it's 0. * src/watcher.c (sentinel_handler_run): New argument: notify. Pass it deliver_ev_create. (directory_sentinel_handler_run): New argument: notify. Pass it to watch_subdirs. Call watchpoint_attach_directory_sentinel if using IFACE_KQUEUE. (deliver_ev_create): Pass notify to hp->run. * tests/createrec3.at: New test. * tests/genfile.c: New program. * tests/Makefile.am: Add createrec3.at (noinst_PROGRAMS): Add genfile. * tests/createrec2.at: Use genfile with 1 second delay. * tests/sent.at: Update expected output. * tests/testsuite.at: Add genfile.
2021-12-20Upgrade grecs (fixes grecs_symtab_foreach)Sergey Poznyakoff1
2021-12-20Rewrite the recursive watching supportSergey Poznyakoff8
* src/config.c (eventconf_flush): Attach directory sentinel when recursive whatching is enabled or when using IFACE_KQUEUE * src/direvent.h (handler) <notify_always>: New member. (recent_head): New type. (watchpoint) <rhead>: New member. (check_new_watcher): Remove. (watchpoint_attach_directory_sentinel): New proto. (deliver_ev_create): Change signature. (watchpoint_recent_init) (watchpoint_recent_deinit) (watchpoint_recent_lookup) (watchpoint_recent_cleanup): New protos. (handler_list_append_cow) (handler_list_remove_cow): New protos. * src/ev_inotify.c (process_event): When a IN_CREATE is received, first check if the created file is in the recent file list (rhead). If so, don't deliver the event. This avoids spurious create events. * src/ev_kqueue.c (sysev_filemask): Always return S_IFMT. (check_created): Deliver the create event. Remove call to subwatcher_create. The create event will trigger creation of new watchpoints. * src/handler.c (handler_list_dup): New function. (handler_list_append_cow) (handler_list_remove_cow): New copy-on-write interfaces. * src/progman.c (process_timeouts): Initialize alarm_time with the return from watchpoint_recent_cleanup. Initialize the notify_always member of the struct handler. * src/watcher.c (watchpoint_unref): De-initialize the recent object list. (watchpoint_destroy): Likewise. (watchpoint_recent_init) (watchpoint_recent_deinit) (watchpoint_recent_lookup) (watchpoint_recent_cleanup): New functions. Maintain the list of recent objects. (watchpoint_install_sentinel): Set notify_always. (directory_sentinel_handler_run) (watchpoint_attach_directory_sentinel): New functions. (watchpoint_init): Don't enforce create event if recursive watching is enabled. (subwatcher_create,check_new_watcher): Remove. (deliver_ev_create): New argument: notify. (watch_subdirs): Rewrite. * tests/createrec2.at: Re-insert delays between directory and file creation.
2021-12-09Out of band events considered a failed experimentSergey Poznyakoff6
This also makes createrec2.sh pass on BSD systems * src/direvent.h: Remove GENEV_OOB * src/event.c (genev_transtab): Likewise. * src/ev_kqueue.c (check_created): Set a subwatcher only if parent watcher depth is not 0. * src/watcher.c (deliver_ev_create) Revert previous commit. (watch_subdirs): Clear S_IFDIR bit if parent depth is 0.
2021-12-08Mark generated CREATE events as out of band.Sergey Poznyakoff4
Deliver such events to each handler that receives CREATE and WRITE events. This makes sure all handler have a chance to notice creation of a file within the time that expires between creation of a directory and creation of a watchpoint for it. Introduce new marker (flag) for such out of band data. Make sure out of band CREATE notifications are sent to the deepest created watchpoint, in case the recursion depth is limited. * src/direvent.h (GENEV_OOB): New macro for out of band events. * src/event.c (genev_transtab): Add an entry for GENEV_OOB. * src/watcher.c (deliver_ev_create): Deliver out of band CREATE event. Receipients are all handlers that requested CREATE or WRITE events. (check_new_watcher): Fix misleading comment. (watch_subdirs): Make sure out of band CREATE notifications are sent if the watchpoint has zero depth (last directory in a depth-limited recusive watchpoint chain). * tests/createrec2.at: Remove sleeps between creation of a directory and creation of a file in it.
2021-12-08Format $genev_name in accordance with the documentation.Sergey Poznyakoff1
I.e., if several events are reported, $genev_name contains a whitespace-delimited list of event names. * src/progman.c (runcmd): use trans_tokfirst/trans_toknext to format genev_name.
2021-12-08Test recursion depth limit.Sergey Poznyakoff3
2021-12-08testsuite: don't use syslogSergey Poznyakoff23
2021-01-06Update copyright yearsSergey Poznyakoff54
2020-07-08Fix handler reference countSergey Poznyakoff1
* src/handler.c: Fix condition
2020-07-06Fix recursive watchers.Sergey Poznyakoff1
Recursive watchers silently assumed that the "create" generic event was configured for the watcher. If it wasn't the case, the watcher failed to catch mkdir events and install subwatchers. This patch fixes it. * src/watcher.c (watchpoint_init): Register the create event if recursive watching is requested.
2020-06-29Upgrade grecs to fix parallel buildsSergey Poznyakoff1
2020-06-28Use grecs eb98370ae0 to fix bison 3.6.4 warningsSergey Poznyakoff1
2020-06-14Use grecs with wordsplit v1.1Sergey Poznyakoff1
2019-07-13Version 5.2release-5.2Sergey Poznyakoff2
2019-07-10Switch to grecs b06fb7d3Sergey Poznyakoff3
2016-08-25Update the documentationSergey Poznyakoff3
2016-08-25Get rid of hashtab.c, use symtab from grecs instead.Sergey Poznyakoff8
* grecs: Pull new version. * src/hashtab.c: Remove. * po/POTFILES.in: Remove src/hashtab.c * src/Makefile.am (direvent_SOURCES): Remove hashtab.c * src/config.c (grecs_parser_options): Set GRECS_OPTION_QUOTED_STRING_CONCAT. * src/direvent.h: Remove hashtab prototypes. * src/event.c: Use grecs_symtab. * src/watcher.c: Likewise.
2016-08-25Rename a test caseSergey Poznyakoff3
* tests/Makefile.am: Update. * tests/testsuite.at: Update. * tests/conv.at: Rename to tests/file.at
2016-08-25Fix new functionality on BSD hosts. Some minor fixes.Sergey Poznyakoff9
* src/direvent.c (main): Call watchpoint_gc in the main loop. * src/direvent.h (watchpoint) <isdir>: New member. (deliver_ev_create,subwatcher_create): Change signature. * src/ev_kqueue.c (sysev_add_watch): Always monitor NOTE_DELETE. (process_event): Special handling for file deletion. * src/handler.c (handler_list_remove): Return the number of elements remaining in the list. * src/hashtab.c (hashtab_remove): Ignore unexisting entries * src/progman.c (close_fds): Determine the highest used fd by dup'ing standard input. * src/watcher.c (watchpoint_install): Always increase refcnt. (watchpoint_gc_list): New variable. (watchpoint_gc): Iterate over watchpoint_gc_list deleting elements from it. (watchpoint_suspend): Install sentinels only for top-level watchpoints that were removed. (sentinel_handler_run): Deliver the create event. (watchpoint_install_sentinel): Monitor generic create event. (convert_watcher): Remove. (subwatcher_create): Remove the isdir parameter. (watch_subdirs): Exit early if the watchpoint is not a directory. (deliver_ev_create): Change signature. Take both directory and file name as arguments. All uses changes. * tests/conv.at: Clear expected stderr. * tests/sent.at: Fix race condition.
2016-08-25Add new tests + minor fixes.Sergey Poznyakoff7
* src/direvent.h (filpatlist_is_empty): New proto. * src/fnpat.c (filpatlist_is_empty): New function. * src/watcher.c (convert_watcher): Fix error handling. (watchpoint_init): Remove spurious notice. * tests/conv.at: New test. * tests/sent.at: New test. * tests/Makefile.am: Add new tests. * tests/testsuite.at: Likewise.
2016-08-25Further modify struct handler.Sergey Poznyakoff8
Instead of accomodating two types of functionality, the new struct handler has a pointer to the function that is responsible for handling the event, and a pointer to data for that function (closure). Additionally, a pointer to deallocator function is also provided. Existing functionality is reimplemented using this new struct. New types of handlers can easily be added. * src/config.c (eventconf)<ev_mask,fpat,prog_handler>: New members <handler>: Remove. All uses changed. * src/direvent.h (filpatlist_t) (event_handler_fn, handler_free_fn): New data types. (handler): Remove union and type. Add two pointer to functions that are to implement the functionality (run and free) and a pointer to data for them. (prog_handler): New struct. (prog_handler_alloc,prog_handler_free) (prog_handler_envrealloc) (watchpoint_run_handlers): New protos. (run_handler,filename_pattern_free) (filename_pattern_match): Remove (filpatlist_add, filpatlist_add_exact) (filpatlist_destroy, filpatlist_match): New protos. * src/ev_inotify.c (process_event): Use watchpoint_run_handlers * src/ev_kqueue.c: Likewise. * src/fnpat.c: Major rewrite. * src/handler.c (handler_copy) (handler_envrealloc,handler_add_pattern) (handler_add_exact_filename): Remove (handler_alloc): Change arguments. (watchpoint_run_handlers): New function. * src/progman.c (prog_handler_alloc) (prog_handler_envrealloc): New functions. * src/watcher.c: Reimplement sentinel watchers.
2016-08-25Rename: struct dirwatcher -> struct watchpointSergey Poznyakoff8
2016-08-25Implement sentinel handlers.Sergey Poznyakoff9
Sentinel handlers wait for a creation of a directory. When the target directory is created, the sentinel handler installs the actual handler for that directory and destroys itself. Thus, basically sentinel handlers provide a way to defer setting a watchpoint on a directory until it is created. * src/handler.c: New source. * src/Makefile.am (direvent_SOURCES): Add handler.c * src/config.c: Move handler-specific stuff to handler.c * src/direvent.h: Rename direvent_handler_ to handler_ (handler_free, handler_copy) (handler_envrealloc) (dirwatcher_init,dirwatcher_gc): New protos. (dirwatcher_install_ptr) (dirwatcher_install_sentinel): New protos. * src/ev_inotify.c (process_event): Special handling for IN_IGNORED. (sysev_select): Ignore signo==0. * src/hashtab.c (hashtab_remove): Add missing return statement. (hashtab_foreach): Break out of look instead of returning from it. * src/progman.c (run_sentinel): Implement. * src/watcher.c (+dirwatcher_install_ptr): New function. (dirwatcher_gc): New function.
2016-08-25BugfixSergey Poznyakoff1
* src/hashtab.c (hashent_list_append): Fix allocated memory size.
2016-08-25Initial preparation for having distinct handler types.Sergey Poznyakoff6
* src/direvent.h (pattern_type): New enum, instead of PAT_* defines. (filename_pattern): use enum pattern_type. (handler_type): New enum. (handler): Can be of two types: HANDLER_EXTERN, which handles external programs and is equivalent to the prior content of the structure, and HANDLER_SENTINEL, which is planned to be a built-in handler for configuring watchpoints for newly created directories. All uses changed. (dirwatcher) <refcnt>: Change type to size_t. (handler_alloc,handler_add_pattern) (handler_add_exact_filename): New protos. * src/hashtab.c: Provisions for safe adding and removing from the hashtable when iterating over it. (hashtab) <flags>: Removed. <itr_level, list_new, list_del>: New members. (hashtab_remove): When iterating, place pointer to the removed entry in list_del instead of actually removing it. (hashtab_lookup_or_install): When iterating, add a pointer to the newly created entry to the list_new list, instead of adding it immediately. (hashtab_foreach): Flush list_del and list_new at the end of the topmost iteration. * src/config.c (handler_alloc): Rename to handler_copy (handler_alloc): New function. (handler_free): Two types of handlers. (handler_add_pattern) (handler_add_exact_filename): New functions. (file_name_pattern): Takes struct handler * as its first argument. (cb_file_pattern): Change accordingly. * src/fnpat.c (filename_pattern_free): Handle PAT_EXACT. (filename_pattern_match): Likewise. * src/progman.c (run_handler): Two types of handlers. * src/watcher.c (dirwatcher_install): Restore missing gettext marker. Allocate handler_list. (dirwatcher_init): Convert non-directory watchpoints to directory ones.

Return to:

Send suggestions and report system problems to the System administrator.