93 struct timeval timeout_abs, tv_abs;
97 if ( timeout_p->tv_sec == 0 && timeout_p->tv_usec == 0 )
101 gettimeofday ( &tv_abs, NULL );
102 timeradd ( &tv_abs, timeout_p, &timeout_abs );
111 if ( *event_p->path ) {
112 debug ( 2,
"we have an event. return 1." );
118 debug ( 3,
"select() with timeout %li.%06li secs (dontwait == %u).", timeout_p->tv_sec, timeout_p->tv_usec, dontwait );
121 FD_SET ( pipe_fd, &rfds );
122 int rc = select ( pipe_fd + 1, &rfds, NULL, NULL, timeout_p );
124 if ( rc == 0 || rc == -1 )
129 if ( line_len == -1 ) {
135 debug ( 5,
"old timeout_p->: tv_sec == %lu; tv_usec == %lu", timeout_p->tv_sec, timeout_p->tv_usec );
136 gettimeofday ( &tv_abs, NULL );
138 if ( timercmp ( &timeout_abs, &tv_abs, < ) )
139 timersub ( &timeout_abs, &tv_abs, timeout_p );
141 memset ( timeout_p, 0,
sizeof ( *timeout_p ) );
143 debug ( 5,
"new timeout_p->: tv_sec == %lu; tv_usec == %lu", timeout_p->tv_sec, timeout_p->tv_usec );
148 debug ( 3,
"parsing the event" );
150 while ( au_parsed < au_len ) {
151 if ( au_fetch_tok ( &tok, &au_buf[au_parsed], au_len - au_parsed ) == -1 )
154 au_parsed += tok.len;
158 case AUT_HEADER32_EX:
160 case AUT_HEADER64_EX: {
161 event_p->type = tok.tt.hdr32.e_type;
168 int dir_wd, dir_iswatched;
169 ptr = memrchr ( tok.tt.path.path,
'/', tok.tt.path.len );
173 critical (
"relative path received from au_fetch_tok(): \"%s\" (len: %u)", tok.tt.path.path, tok.tt.path.len );
176 debug ( 6,
"Event on \"%s\".", tok.tt.path.path );
178 dir_wd = indexes_fpath2wd ( indexes_p, tok.tt.path.path );
179 dir_iswatched = ( dir_wd != -1 );
180 debug ( 7,
"Directory is \"%s\". dir_wd == %i; dir_iswatched == %u", tok.tt.path.path, dir_wd, dir_iswatched );
183 if ( dir_iswatched ) {
184 debug ( 5,
"Event on \"%s\" is watched. Pushing. path_count == %u", tok.tt.path.path, path_count );
186 switch ( path_count ) {
188 memcpy ( event_p->path, tok.tt.path.path, tok.tt.path.len + 1 );
192 memcpy ( event_p->path_to, tok.tt.path.path, tok.tt.path.len + 1 );
197 warning (
"To many paths on BSM event: \"%s\" (already count: %u)", tok.tt.path.path, path_count );
213 debug ( 4,
"clean up" );