summaryrefslogtreecommitdiff
path: root/nslcd
diff options
context:
space:
mode:
authorLuke Shumaker <lukeshu@sbcglobal.net>2014-11-28 16:33:57 -0500
committerLuke Shumaker <lukeshu@sbcglobal.net>2014-11-28 16:33:57 -0500
commitbc25cc045d6d4fdb6b20707cdec4da14890ee9d1 (patch)
tree76914ec4cd7af6444892b51016853b8a480f8a2e /nslcd
parentd8c48a5aae8f3561cec14f7f08c35fc3619ef00a (diff)
cleanup inotify helpers
Diffstat (limited to 'nslcd')
-rw-r--r--nslcd/hackers_watch.c2
-rw-r--r--nslcd/inotify_helper.c51
-rw-r--r--nslcd/inotify_iterator.h78
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