[PATCH 14/15] uuidd: introduce uuidd_cxt to pass arguments to server loop

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Signed-off-by: Petr Uzel <petr.uzel@xxxxxxx>
---
 misc-utils/uuidd.c |   56 +++++++++++++++++++++++++++++++++------------------
 1 files changed, 36 insertions(+), 20 deletions(-)

diff --git a/misc-utils/uuidd.c b/misc-utils/uuidd.c
index 684e494..d20526e 100644
--- a/misc-utils/uuidd.c
+++ b/misc-utils/uuidd.c
@@ -55,6 +55,15 @@ extern int optind;
 /* length of binary representation of UUID */
 #define UUID_LEN	(sizeof(uuid_t))
 
+/* server loop control structure */
+struct uuidd_cxt_t {
+	int	timeout;
+	unsigned int	debug: 1,
+			quiet: 1,
+			no_fork: 1,
+			no_sock: 1;
+};
+
 static void __attribute__ ((__noreturn__)) usage(FILE * out)
 {
 	fputs(_("\nUsage:\n"), out);
@@ -307,8 +316,7 @@ static int create_socket(const char *socket_path, int will_fork, int quiet)
 }
 
 static void server_loop(const char *socket_path, const char *pidfile_path,
-			int debug, int timeout, int quiet, int no_fork,
-			int no_sock)
+			const struct uuidd_cxt_t *uuidd_cxt)
 {
 	struct sockaddr_un	from_addr;
 	socklen_t		fromlen;
@@ -322,19 +330,19 @@ static void server_loop(const char *socket_path, const char *pidfile_path,
 	int			ret;
 
 #ifdef USE_SOCKET_ACTIVATION
-	if (!no_sock)	/* no_sock implies no_fork and no_pid */
+	if (!uuidd_cxt->no_sock)	/* no_sock implies no_fork and no_pid */
 #endif
 	{
 
 		signal(SIGALRM, terminate_intr);
 		alarm(30);
 		if (pidfile_path)
-			fd_pidfile = create_pidfile(pidfile_path, quiet);
+			fd_pidfile = create_pidfile(pidfile_path, uuidd_cxt->quiet);
 
 		ret = call_daemon(socket_path, UUIDD_OP_GETPID, reply_buf,
 				  sizeof(reply_buf), 0, NULL);
 		if (ret > 0) {
-			if (!quiet)
+			if (!uuidd_cxt->quiet)
 				fprintf(stderr,
 					_("uuidd daemon already running at pid %s\n"),
 				       reply_buf);
@@ -342,15 +350,17 @@ static void server_loop(const char *socket_path, const char *pidfile_path,
 		}
 		alarm(0);
 
-		s = create_socket(socket_path, (!debug || !no_fork), quiet);
+		s = create_socket(socket_path,
+				  (!uuidd_cxt->debug || !uuidd_cxt->no_fork),
+				  uuidd_cxt->quiet);
 		if (listen(s, SOMAXCONN) < 0) {
-			if (!quiet)
+			if (!uuidd_cxt->quiet)
 				fprintf(stderr, _("Couldn't listen on unix "
 						  "socket %s: %m\n"), socket_path);
 			exit(EXIT_FAILURE);
 		}
 
-		if (!debug && !no_fork)
+		if (!uuidd_cxt->debug && !uuidd_cxt->no_fork)
 			create_daemon();
 
 		if (pidfile_path) {
@@ -370,7 +380,7 @@ static void server_loop(const char *socket_path, const char *pidfile_path,
 	signal(SIGPIPE, SIG_IGN);
 
 #ifdef USE_SOCKET_ACTIVATION
-	if (no_sock) {
+	if (uuidd_cxt->no_sock) {
 		if (sd_listen_fds(0) != 1) {
 			fprintf(stderr, _("No or too many file descriptors received.\n"));
 			exit(EXIT_FAILURE);
@@ -382,8 +392,8 @@ static void server_loop(const char *socket_path, const char *pidfile_path,
 
 	while (1) {
 		fromlen = sizeof(from_addr);
-		if (timeout > 0)
-			alarm(timeout);
+		if (uuidd_cxt->timeout > 0)
+			alarm(uuidd_cxt->timeout);
 		ns = accept(s, (struct sockaddr *) &from_addr, &fromlen);
 		alarm(0);
 		if (ns < 0) {
@@ -405,10 +415,10 @@ static void server_loop(const char *socket_path, const char *pidfile_path,
 		    (op == UUIDD_OP_BULK_RANDOM_UUID)) {
 			if (read_all(ns, (char *) &num, sizeof(num)) != 4)
 				goto shutdown_socket;
-			if (debug)
+			if (uuidd_cxt->debug)
 				fprintf(stderr, _("operation %d, incoming num = %d\n"),
 				       op, num);
-		} else if (debug)
+		} else if (uuidd_cxt->debug)
 			fprintf(stderr, _("operation %d\n"), op);
 
 		switch (op) {
@@ -423,7 +433,7 @@ static void server_loop(const char *socket_path, const char *pidfile_path,
 		case UUIDD_OP_TIME_UUID:
 			num = 1;
 			__uuid_generate_time(uu, &num);
-			if (debug) {
+			if (uuidd_cxt->debug) {
 				uuid_unparse(uu, str);
 				fprintf(stderr, _("Generated time UUID: %s\n"), str);
 			}
@@ -433,7 +443,7 @@ static void server_loop(const char *socket_path, const char *pidfile_path,
 		case UUIDD_OP_RANDOM_UUID:
 			num = 1;
 			__uuid_generate_random(uu, &num);
-			if (debug) {
+			if (uuidd_cxt->debug) {
 				uuid_unparse(uu, str);
 				fprintf(stderr, _("Generated random UUID: %s\n"), str);
 			}
@@ -442,7 +452,7 @@ static void server_loop(const char *socket_path, const char *pidfile_path,
 			break;
 		case UUIDD_OP_BULK_TIME_UUID:
 			__uuid_generate_time(uu, &num);
-			if (debug) {
+			if (uuidd_cxt->debug) {
 				uuid_unparse(uu, str);
 				fprintf(stderr, P_("Generated time UUID %s "
 						   "and %d following\n",
@@ -464,7 +474,7 @@ static void server_loop(const char *socket_path, const char *pidfile_path,
 				num = (sizeof(reply_buf) - sizeof(num)) / UUID_LEN;
 			__uuid_generate_random((unsigned char *) reply_buf +
 					      sizeof(num), &num);
-			if (debug) {
+			if (uuidd_cxt->debug) {
 				fprintf(stderr, P_("Generated %d UUID:\n",
 						   "Generated %d UUIDs:\n", num), num);
 				for (i = 0, cp = reply_buf + sizeof(num);
@@ -478,7 +488,7 @@ static void server_loop(const char *socket_path, const char *pidfile_path,
 			memcpy(reply_buf, &num, sizeof(num));
 			break;
 		default:
-			if (debug)
+			if (uuidd_cxt->debug)
 				fprintf(stderr, _("Invalid operation %d\n"), op);
 			goto shutdown_socket;
 		}
@@ -508,6 +518,7 @@ int main(int argc, char **argv)
 	int		timeout = 0, quiet = 0;
 	int		no_pid = 0, no_fork = 0;
 	int		no_sock = 0, s_flag = 0;
+	struct uuidd_cxt_t uuidd_cxt;
 
 	static const struct option longopts[] = {
 		{"pid", required_argument, NULL, 'p'},
@@ -677,7 +688,12 @@ int main(int argc, char **argv)
 		return EXIT_SUCCESS;
 	}
 
-	server_loop(socket_path, pidfile_path, debug, timeout, quiet, no_fork,
-		    no_sock);
+	uuidd_cxt.timeout = timeout;
+	uuidd_cxt.debug = debug;
+	uuidd_cxt.quiet = quiet;
+	uuidd_cxt.no_fork = no_fork;
+	uuidd_cxt.no_sock = no_sock;
+
+	server_loop(socket_path, pidfile_path, &uuidd_cxt);
 	return EXIT_SUCCESS;
 }
-- 
1.7.7

--
To unsubscribe from this list: send the line "unsubscribe util-linux" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Netdev]     [Ethernet Bridging]     [Linux Wireless]     [Kernel Newbies]     [Security]     [Linux for Hams]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux Admin]     [Samba]

  Powered by Linux