tstellar / rpms / acpid

Forked from rpms/acpid 3 years ago
Clone
72d5fa1
diff --git a/kacpimon/connection_list.c b/kacpimon/connection_list.c
72d5fa1
index 9b0b0a8..f228186 100644
72d5fa1
--- a/kacpimon/connection_list.c
72d5fa1
+++ b/kacpimon/connection_list.c
72d5fa1
@@ -22,6 +22,7 @@
72d5fa1
 
72d5fa1
 #include <unistd.h>
72d5fa1
 #include <stdio.h>
72d5fa1
+#include <stdlib.h>
72d5fa1
 
72d5fa1
 #include "connection_list.h"
72d5fa1
 
72d5fa1
@@ -30,9 +31,9 @@
72d5fa1
 /*---------------------------------------------------------------*/
72d5fa1
 /* private objects */
72d5fa1
 
efb293c
-#define MAX_CONNECTIONS 100
72d5fa1
+static int capacity = 0;
72d5fa1
 
72d5fa1
-static struct connection connection_list[MAX_CONNECTIONS];
72d5fa1
+static struct connection *connection_list = NULL;
72d5fa1
 
72d5fa1
 static int nconnections = 0;
72d5fa1
 
72d5fa1
@@ -51,9 +52,19 @@ add_connection(struct connection *p)
72d5fa1
 {
72d5fa1
 	if (nconnections < 0)
72d5fa1
 		return;
72d5fa1
-	if (nconnections >= MAX_CONNECTIONS) {
72d5fa1
-		printf("add_connection(): Too many connections.\n");
72d5fa1
-		return;
72d5fa1
+
72d5fa1
+	/* if the list is full, allocate more space */
72d5fa1
+	if (nconnections >= capacity) {
72d5fa1
+		/* no more than 1024 */
72d5fa1
+		if (capacity > 1024) {
72d5fa1
+			printf("add_connection(): Too many connections.\n");
72d5fa1
+			return;
72d5fa1
+		}
72d5fa1
+
72d5fa1
+		/* another 20 */
72d5fa1
+		capacity += 20;
72d5fa1
+		connection_list =
72d5fa1
+			realloc(connection_list, sizeof(struct connection) * capacity);
72d5fa1
 	}
72d5fa1
 
72d5fa1
 	if (nconnections == 0)
72d5fa1
@@ -70,6 +81,30 @@ add_connection(struct connection *p)
72d5fa1
 
72d5fa1
 /*---------------------------------------------------------------*/
72d5fa1
 
72d5fa1
+void
72d5fa1
+delete_all_connections(void)
72d5fa1
+{
72d5fa1
+	int i = 0;
72d5fa1
+
72d5fa1
+	/* For each connection */
72d5fa1
+	for (i = 0; i <= get_number_of_connections(); ++i)
72d5fa1
+	{
72d5fa1
+		struct connection *p;
72d5fa1
+
72d5fa1
+		p = get_connection(i);
72d5fa1
+
72d5fa1
+		/* If this connection is invalid, try the next. */
72d5fa1
+		if (p == 0)
72d5fa1
+			continue;
72d5fa1
+
72d5fa1
+		close(p -> fd);
72d5fa1
+	}
72d5fa1
+	free(connection_list);
72d5fa1
+	connection_list = NULL;
72d5fa1
+}
72d5fa1
+
72d5fa1
+/*---------------------------------------------------------------*/
72d5fa1
+
72d5fa1
 struct connection *
72d5fa1
 find_connection(int fd)
72d5fa1
 {
72d5fa1
diff --git a/kacpimon/connection_list.h b/kacpimon/connection_list.h
72d5fa1
index 1d037cf..a787637 100644
72d5fa1
--- a/kacpimon/connection_list.h
72d5fa1
+++ b/kacpimon/connection_list.h
72d5fa1
@@ -56,4 +56,7 @@ extern const fd_set *get_fdset(void);
72d5fa1
 /* get the highest fd that was added to the list */
72d5fa1
 extern int get_highestfd(void);
72d5fa1
 
72d5fa1
+/* delete all connections, closing the fds */
72d5fa1
+extern void delete_all_connections(void);
72d5fa1
+
72d5fa1
 #endif /* CONNECTION_LIST_H__ */
72d5fa1
diff --git a/kacpimon/kacpimon.c b/kacpimon/kacpimon.c
72d5fa1
index 1ddb9aa..253d270 100644
72d5fa1
--- a/kacpimon/kacpimon.c
72d5fa1
+++ b/kacpimon/kacpimon.c
72d5fa1
@@ -164,27 +164,6 @@ static void monitor(void)
72d5fa1
 
72d5fa1
 // ---------------------------------------------------------------
72d5fa1
 
72d5fa1
-static void close_all(void)
72d5fa1
-{
72d5fa1
-	int i = 0;
72d5fa1
-
72d5fa1
-	/* For each connection */
72d5fa1
-	for (i = 0; i <= get_number_of_connections(); ++i)
72d5fa1
-	{
72d5fa1
-		struct connection *p;
72d5fa1
-
72d5fa1
-		p = get_connection(i);
72d5fa1
-
72d5fa1
-		/* If this connection is invalid, try the next. */
72d5fa1
-		if (p == 0)
72d5fa1
-			continue;
72d5fa1
-
72d5fa1
-		close(p -> fd);
72d5fa1
-	}
72d5fa1
-}
72d5fa1
-
72d5fa1
-// ---------------------------------------------------------------
72d5fa1
-
72d5fa1
 int main(void)
72d5fa1
 {
72d5fa1
 	printf("Kernel ACPI Event Monitor...\n");
72d5fa1
@@ -199,7 +178,7 @@ int main(void)
72d5fa1
 
72d5fa1
 	printf("Closing files...\n");
72d5fa1
 
72d5fa1
-	close_all();
72d5fa1
+	delete_all_connections();
72d5fa1
 
72d5fa1
 	printf("Goodbye\n");
72d5fa1