From: Volker Lendecke Date: Wed, 21 Oct 2020 15:26:30 +0000 (+0200) Subject: notifyd: Factor out notifyd_parse_entry() into its own file X-Git-Tag: talloc-2.3.2~116 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=3e648e9d616ab7943adcb3b5f0fcf9b03f420313;p=thirdparty%2Fsamba.git notifyd: Factor out notifyd_parse_entry() into its own file The next step will be to factor out notifyd_parse_db() and and notify_walk() for consumption outside of smbd. notifyd_parse_db() needs access to the internal representation of notifyd's database, so move it into a commonly usable file. Signed-off-by: Volker Lendecke Reviewed-by: Jeremy Allison --- diff --git a/source3/smbd/notifyd/notifyd.c b/source3/smbd/notifyd/notifyd.c index 530e844015d..9029e88dc57 100644 --- a/source3/smbd/notifyd/notifyd.c +++ b/source3/smbd/notifyd/notifyd.c @@ -19,6 +19,7 @@ #include "replace.h" #include +#include "notifyd_private.h" #include "lib/util/server_id.h" #include "lib/util/data_blob.h" #include "librpc/gen_ndr/notify.h" @@ -99,22 +100,6 @@ struct notifyd_state { struct sys_notify_context *sys_notify_ctx; }; -/* - * notifyd's representation of a notify instance - */ -struct notifyd_instance { - struct server_id client; - struct notify_instance instance; - - void *sys_watch; /* inotify/fam/etc handle */ - - /* - * Filters after sys_watch took responsibility of some bits - */ - uint32_t internal_filter; - uint32_t internal_subdir_filter; -}; - struct notifyd_peer { struct notifyd_state *state; struct server_id pid; @@ -342,28 +327,6 @@ int notifyd_recv(struct tevent_req *req) return tevent_req_simple_recv_unix(req); } -/* - * Parse an entry in the notifyd_context->entries database - */ - -static bool notifyd_parse_entry(uint8_t *buf, size_t buflen, - struct notifyd_instance **instances, - size_t *num_instances) -{ - if ((buflen % sizeof(struct notifyd_instance)) != 0) { - DBG_WARNING("invalid buffer size: %zu\n", buflen); - return false; - } - - if (instances != NULL) { - *instances = (struct notifyd_instance *)buf; - } - if (num_instances != NULL) { - *num_instances = buflen / sizeof(struct notifyd_instance); - } - return true; -} - static bool notifyd_apply_rec_change( const struct server_id *client, const char *path, size_t pathlen, diff --git a/source3/smbd/notifyd/notifyd_entry.c b/source3/smbd/notifyd/notifyd_entry.c new file mode 100644 index 00000000000..539010de03a --- /dev/null +++ b/source3/smbd/notifyd/notifyd_entry.c @@ -0,0 +1,42 @@ +/* + * 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 . + */ + +#include "replace.h" +#include "lib/util/debug.h" +#include "notifyd_private.h" + +/* + * Parse an entry in the notifyd_context->entries database + */ + +bool notifyd_parse_entry( + uint8_t *buf, + size_t buflen, + struct notifyd_instance **instances, + size_t *num_instances) +{ + if ((buflen % sizeof(struct notifyd_instance)) != 0) { + DBG_WARNING("invalid buffer size: %zu\n", buflen); + return false; + } + + if (instances != NULL) { + *instances = (struct notifyd_instance *)buf; + } + if (num_instances != NULL) { + *num_instances = buflen / sizeof(struct notifyd_instance); + } + return true; +} diff --git a/source3/smbd/notifyd/notifyd_private.h b/source3/smbd/notifyd/notifyd_private.h new file mode 100644 index 00000000000..36c08f47c54 --- /dev/null +++ b/source3/smbd/notifyd/notifyd_private.h @@ -0,0 +1,49 @@ +/* + * 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 . + */ + +#ifndef __NOTIFYD_PRIVATE_H__ +#define __NOTIFYD_PRIVATE_H__ + +#include "replace.h" +#include "lib/util/server_id.h" +#include "notifyd.h" + +/* + * notifyd's representation of a notify instance + */ +struct notifyd_instance { + struct server_id client; + struct notify_instance instance; + + void *sys_watch; /* inotify/fam/etc handle */ + + /* + * Filters after sys_watch took responsibility of some bits + */ + uint32_t internal_filter; + uint32_t internal_subdir_filter; +}; + +/* + * Parse an entry in the notifyd_context->entries database + */ + +bool notifyd_parse_entry( + uint8_t *buf, + size_t buflen, + struct notifyd_instance **instances, + size_t *num_instances); + +#endif diff --git a/source3/smbd/notifyd/wscript_build b/source3/smbd/notifyd/wscript_build index 55cfd8837c4..e87421d4202 100644 --- a/source3/smbd/notifyd/wscript_build +++ b/source3/smbd/notifyd/wscript_build @@ -1,8 +1,17 @@ #!/usr/bin/env python +bld.SAMBA3_SUBSYSTEM('notifyd_db', + source='notifyd_entry.c', + deps='samba-debug') + bld.SAMBA3_SUBSYSTEM('notifyd', source='notifyd.c', - deps='util_tdb TDB_LIB messages_util') + deps=''' + util_tdb + TDB_LIB + messages_util + notifyd_db + ''') bld.SAMBA3_BINARY('notifyd-tests', source='tests.c',