]> code.citadel.org Git - citadel.git/blobdiff - citadel/dynloader.c
removed all references to sprintf from several files (not all files yet)
[citadel.git] / citadel / dynloader.c
index 6647fee2c479fd3c84191688e3ae26edd4dfa2b1..c1e3c64b3d60e42395f9f11c3301eff2372a6756 100644 (file)
@@ -47,6 +47,7 @@ struct UserFunctionHook *UserHookTable = NULL;
 struct XmsgFunctionHook *XmsgHookTable = NULL;
 struct MessageFunctionHook *MessageHookTable = NULL;
 struct NetprocFunctionHook *NetprocHookTable = NULL;
+struct DeleteFunctionHook *DeleteHookTable = NULL;
 struct ServiceFunctionHook *ServiceHookTable = NULL;
 
 struct ProtoFunctionHook {
@@ -398,6 +399,40 @@ void CtdlUnregisterNetprocHook(int (*handler)(struct CtdlMessage *, char *) )
 }
 
 
+void CtdlRegisterDeleteHook(void (*handler)(char *, long) )
+{
+       struct DeleteFunctionHook *newfcn;
+
+       newfcn = (struct DeleteFunctionHook *)
+           mallok(sizeof(struct DeleteFunctionHook));
+       newfcn->next = DeleteHookTable;
+       newfcn->h_function_pointer = handler;
+       DeleteHookTable = newfcn;
+
+       lprintf(5, "Registered a new netproc function\n");
+}
+
+
+void CtdlUnregisterDeleteHook(void (*handler)(char *, long) )
+{
+       struct DeleteFunctionHook *cur, *p;
+
+       for (cur = DeleteHookTable; cur != NULL; cur = cur->next) {
+               /* This will also remove duplicates if any */
+               while (cur != NULL &&
+                               handler == cur->h_function_pointer ) {
+                       lprintf(5, "Unregistered netproc function\n");
+                       p = cur->next;
+                       if (cur == DeleteHookTable) {
+                               DeleteHookTable = p;
+                       }
+                       phree(cur);
+                       cur = p;
+               }
+       }
+}
+
+
 void CtdlRegisterXmsgHook(int (*fcn_ptr) (char *, char *, char *), int order)
 {
 
@@ -453,7 +488,7 @@ void CtdlRegisterServiceHook(int tcp_port,
 
        if (sockpath != NULL) {
                newfcn->msock = ig_uds_server(sockpath, config.c_maxsessions);
-               sprintf(message, "Unix domain socket '%s': ", sockpath);
+               snprintf(message, sizeof message, "Unix domain socket '%s': ", sockpath);
        }
        else if (tcp_port <= 0) {       /* port -1 to disable */
                lprintf(7, "Service has been manually disabled, skipping\n");
@@ -462,7 +497,7 @@ void CtdlRegisterServiceHook(int tcp_port,
        }
        else {
                newfcn->msock = ig_tcp_server(tcp_port, config.c_maxsessions);
-               sprintf(message, "TCP port %d: ", tcp_port);
+               snprintf(message, sizeof message, "TCP port %d: ", tcp_port);
        }
 
        if (newfcn->msock > 0) {
@@ -595,6 +630,16 @@ int PerformNetprocHooks(struct CtdlMessage *msg, char *target_room)
 }
 
 
+void PerformDeleteHooks(char *room, long msgnum)
+{
+       struct DeleteFunctionHook *fcn;
+
+       for (fcn = DeleteHookTable; fcn != NULL; fcn = fcn->next) {
+               (*fcn->h_function_pointer) (room, msgnum);
+       }
+}
+
+
 
 int PerformXmsgHooks(char *sender, char *recp, char *msg)
 {