diff options
author | Luke Shumaker <lukeshu@sbcglobal.net> | 2014-11-28 16:33:57 -0500 |
---|---|---|
committer | Luke Shumaker <lukeshu@sbcglobal.net> | 2014-11-28 16:33:57 -0500 |
commit | bc25cc045d6d4fdb6b20707cdec4da14890ee9d1 (patch) | |
tree | 76914ec4cd7af6444892b51016853b8a480f8a2e /nslcd | |
parent | d8c48a5aae8f3561cec14f7f08c35fc3619ef00a (diff) |
cleanup inotify helpers
Diffstat (limited to 'nslcd')
-rw-r--r-- | nslcd/hackers_watch.c | 2 | ||||
-rw-r--r-- | nslcd/inotify_helper.c | 51 | ||||
-rw-r--r-- | nslcd/inotify_iterator.h | 78 |
3 files changed, 1 insertions, 130 deletions
diff --git a/nslcd/hackers_watch.c b/nslcd/hackers_watch.c index 5217163..6687675 100644 --- a/nslcd/hackers_watch.c +++ b/nslcd/hackers_watch.c @@ -21,7 +21,7 @@ #include <stdio.h> /* for asprintf(3) */ #include <unistd.h> /* for chdir(3) */ -#include "inotify_iterator.h" +#include "inotify_helpers.h" #include "hackers_parse.h" #include "hackers_watch.h" diff --git a/nslcd/inotify_helper.c b/nslcd/inotify_helper.c deleted file mode 100644 index dc1ae63..0000000 --- a/nslcd/inotify_helper.c +++ /dev/null @@ -1,51 +0,0 @@ -/* helper.h */ -#include <sys/inotify.h> /* for 'struct inotify_event' */ -#include <limits.h> /* for 'NAME_MAX' */ - -struct inotify_buffer { - ssize_t len; - ssize_t pos; - char dat[sizeof(struct inotify_event)+NAME_MAX+1]; -}; - -struct inotify_event *inotify_next_event_r(int fd, struct inotify_buffer *buf); -struct inotify_event *inotify_next_event(int fd); - -#define INOTIFY_ITERATOR(FD, EVENT) \ - struct inotify_event *EVENT = inotify_next_event(FD); \ - EVENT != NULL; \ - EVENT = inotify_next_event(FD) - -#define INOTIFY_ITERATOR_R(FD, EVENT, BUF) \ - struct inotify_event *EVENT = inotify_next_event_r(FD, BUF); \ - EVENT != NULL; \ - EVENT = inotify_next_event_r(FD, BUF) - -/* helper.c */ -#include <unistd.h> /* for read(3) */ - -#define EVENT_PTR(BUF) ((struct inotify_event *)&((BUF)->dat[(BUF)->pos])) -#define EVENT_SIZE(BUF) (sizeof(struct inotify_event) + EVENT_PTR(BUF)->len) - -struct inotify_event * -inotify_next_event_r(int fd, struct inotify_buffer *buf) { - if ((buf->len - buf->pos > sizeof(struct inotify_event)) - && (buf->len - buf->pos > EVENT_SIZE(buf))) { - buf->pos += EVENT_SIZE(buf); - } else { - do { - buf->len = read(FD, buf->dat, sizeof(buf->dat)); - } while (buf->len == 0); - BUF.pos = 0; - if (buf->len < 0) { - return NULL; - } - } - return EVENT_PTR(buf); -} - -struct inotify_event * -inotify_next_event(int fd) { - static struct inotify_buffer buf = { 0 }; - return inotify_next_event_r(fd, &buf); -} diff --git a/nslcd/inotify_iterator.h b/nslcd/inotify_iterator.h deleted file mode 100644 index 0fa5829..0000000 --- a/nslcd/inotify_iterator.h +++ /dev/null @@ -1,78 +0,0 @@ -/* inotify_helper.h - Simple iteration for inotify events - * - * Copyright (C) 2014 Luke Shumaker - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - */ - -/* The usage is pretty simple: - * - * int my_filedesc = inotify_init(); - * ... - * struct inotify_event *my_event; - * for (INOTIFY_ITERATOR(my_filedesc, my_event)) { - * ... - * } - * - * Easy, right? - */ - -#ifndef _INOTIFY_ITERATOR_H -#define _INOTIFY_ITERATOR_H - -#include <sys/inotify.h> -#include <limits.h> /* for NAME_MAX */ -#include <string.h> /* for memset(3) */ -#include <unistd.h> /* for read(3) */ - -struct _inotify_buffer { - ssize_t len; - ssize_t pos; - char dat[sizeof(struct inotify_event)+NAME_MAX+1]; -}; - -#define _INOTIFY_ITERATOR_EVENT(BUF) \ - ((struct inotify_event *)&((BUF).dat[(BUF).pos])) -#define _INOTIFY_ITERATOR_EVENT_SIZE(BUF) \ - (sizeof(struct inotify_event) + _INOTIFY_ITERATOR_EVENT(BUF)->len) -#define _INOTIFY_ITERATOR_CHECK(FD, BUF, EVENT) \ - BUF.len > -1 -#define _INOTIFY_ITERATOR_UPDATE(FD, BUF, EVENT) \ - EVENT = ({ \ - if (BUF.len-(BUF.pos+_INOTIFY_ITERATOR_EVENT_SIZE(BUF)) < 1) { \ - do { \ - BUF.len = read(FD, BUF.dat, sizeof(BUF.dat)); \ - } while (BUF.len == 0); \ - BUF.pos = 0; \ - } else { \ - BUF.pos += _INOTIFY_ITERATOR_EVENT_SIZE(BUF); \ - } \ - _INOTIFY_ITERATOR_EVENT(BUF); \ - }) -#define _INOTIFY_ITERATOR_INIT(FD, BUF, EVENT) \ - struct _inotify_buffer BUF = ({ \ - struct _inotify_buffer tmp; \ - memset(&tmp, 0, sizeof(tmp)); \ - do { \ - tmp.len = read(FD, tmp.dat, sizeof(tmp.dat)); \ - } while (tmp.len == 0); \ - EVENT = (struct inotify_event *)&BUF; \ - tmp; \ - }) -#define INOTIFY_ITERATOR(FD, EVENT) \ - _INOTIFY_ITERATOR_INIT(FD, _buf, EVENT); \ - _INOTIFY_ITERATOR_CHECK(FD, _buf, EVENT); \ - _INOTIFY_ITERATOR_UPDATE(FD, _buf, EVENT) - -#endif |