mirror of
git://git.gnupg.org/gnupg.git
synced 2025-04-17 15:44:34 +02:00
common: Fix gnupg_inotify_has_name, differently.
* common/sysutils.c (gnupg_inotify_has_name): Use void * to stop the warning. -- According to the man page of inotify(7), it is aligned by null bytes. So, bc28f320fa6f5b9fcdb73dba5e6c582daf7992c5 is reverted. Signed-off-by: NIIBE Yutaka <gniibe@fsij.org>
This commit is contained in:
parent
6f1d8123d6
commit
8b3d0d1a36
@ -1041,47 +1041,41 @@ gnupg_inotify_has_name (int fd, const char *name)
|
|||||||
{
|
{
|
||||||
#if USE_NPTH && HAVE_INOTIFY_INIT
|
#if USE_NPTH && HAVE_INOTIFY_INIT
|
||||||
#define BUFSIZE_FOR_INOTIFY (sizeof (struct inotify_event) + 255 + 1)
|
#define BUFSIZE_FOR_INOTIFY (sizeof (struct inotify_event) + 255 + 1)
|
||||||
char buf[BUFSIZE_FOR_INOTIFY];
|
union {
|
||||||
char *p;
|
struct inotify_event ev;
|
||||||
|
char _buf[sizeof (struct inotify_event) + 255 + 1];
|
||||||
|
} buf;
|
||||||
|
struct inotify_event *evp;
|
||||||
int n;
|
int n;
|
||||||
|
|
||||||
n = npth_read (fd, buf, sizeof buf);
|
n = npth_read (fd, &buf, sizeof buf);
|
||||||
p = buf;
|
|
||||||
/* log_debug ("notify read: n=%d\n", n); */
|
/* log_debug ("notify read: n=%d\n", n); */
|
||||||
|
evp = &buf.ev;
|
||||||
while (n >= sizeof (struct inotify_event))
|
while (n >= sizeof (struct inotify_event))
|
||||||
{
|
{
|
||||||
struct inotify_event ev;
|
|
||||||
const char *ev_name;
|
|
||||||
|
|
||||||
memcpy (&ev, p, sizeof (struct inotify_event));
|
|
||||||
|
|
||||||
if (ev.len > 255 + 1) /* Something goes wrong, skip this data. */
|
|
||||||
break;
|
|
||||||
|
|
||||||
ev_name = p + sizeof (struct inotify_event);
|
|
||||||
p += sizeof (struct inotify_event) + ev.len;
|
|
||||||
n -= sizeof (struct inotify_event) + ev.len;
|
|
||||||
|
|
||||||
/* log_debug (" mask=%x len=%u name=(%s)\n", */
|
/* log_debug (" mask=%x len=%u name=(%s)\n", */
|
||||||
/* ev.mask, (unsigned int)ev.len, ev.len? ev.name:""); */
|
/* evp->mask, (unsigned int)evp->len, evp->len? evp->name:""); */
|
||||||
if ((ev.mask & IN_UNMOUNT))
|
if ((evp->mask & IN_UNMOUNT))
|
||||||
{
|
{
|
||||||
/* log_debug (" found (dir unmounted)\n"); */
|
/* log_debug (" found (dir unmounted)\n"); */
|
||||||
return 3; /* Directory was unmounted. */
|
return 3; /* Directory was unmounted. */
|
||||||
}
|
}
|
||||||
if ((ev.mask & IN_DELETE_SELF))
|
if ((evp->mask & IN_DELETE_SELF))
|
||||||
{
|
{
|
||||||
/* log_debug (" found (dir removed)\n"); */
|
/* log_debug (" found (dir removed)\n"); */
|
||||||
return 2; /* Directory was removed. */
|
return 2; /* Directory was removed. */
|
||||||
}
|
}
|
||||||
if ((ev.mask & IN_DELETE))
|
if ((evp->mask & IN_DELETE))
|
||||||
{
|
{
|
||||||
if (ev.len >= strlen (name) && !strcmp (ev_name, name))
|
if (evp->len >= strlen (name) && !strcmp (evp->name, name))
|
||||||
{
|
{
|
||||||
/* log_debug (" found (file removed)\n"); */
|
/* log_debug (" found (file removed)\n"); */
|
||||||
return 1; /* File was removed. */
|
return 1; /* File was removed. */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
n -= sizeof (*evp) + evp->len;
|
||||||
|
evp = (struct inotify_event *)(void *)
|
||||||
|
((char *)evp + sizeof (*evp) + evp->len);
|
||||||
}
|
}
|
||||||
|
|
||||||
#else /*!(USE_NPTH && HAVE_INOTIFY_INIT)*/
|
#else /*!(USE_NPTH && HAVE_INOTIFY_INIT)*/
|
||||||
|
Loading…
x
Reference in New Issue
Block a user