summary refs log tree commit diff stats
path: root/src/common/plugin.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/common/plugin.c')
-rw-r--r--src/common/plugin.c89
1 files changed, 89 insertions, 0 deletions
diff --git a/src/common/plugin.c b/src/common/plugin.c
index b40660a1..ffdc013e 100644
--- a/src/common/plugin.c
+++ b/src/common/plugin.c
@@ -20,6 +20,8 @@
 #include <string.h>
 #include <stdarg.h>
 #include <stdio.h>
+#include <fcntl.h>
+#include <sys/stat.h>
 
 #include "xchat.h"
 #include "fe.h"
@@ -262,6 +264,8 @@ plugin_add (session *sess, char *filename, void *handle, void *init_func,
 		pl->xchat_send_modes = xchat_send_modes;
 		pl->xchat_strip = xchat_strip;
 		pl->xchat_free = xchat_free;
+		pl->xchat_set_plugin_pref = xchat_set_plugin_pref;
+		pl->xchat_get_plugin_pref = xchat_get_plugin_pref;
 
 		/* incase new plugins are loaded on older xchat */
 		pl->xchat_dummy4 = xchat_dummy;
@@ -1570,3 +1574,88 @@ xchat_free (xchat_plugin *ph, void *ptr)
 {
 	g_free (ptr);
 }
+
+int
+xchat_set_plugin_pref (xchat_plugin *pl, char *var, char *value)
+{
+	int fh;
+	char confname[32];
+	char *canon;
+
+	canon = g_strdup (pl->name);
+	canonalize_key (canon);
+	sprintf (confname, "plugin_%s.conf", canon);
+	g_free (canon);
+
+	/* partly borrowed from palette.c */
+	fh = xchat_open_file (confname, O_TRUNC | O_WRONLY | O_CREAT, 0600, XOF_DOMODE);
+	if (fh != -1)
+	{
+		cfg_put_str (fh, var, value);
+		close (fh);
+
+		return 1;
+	}
+	else
+	{
+		return 0;
+	}
+}
+
+int
+xchat_get_plugin_pref (xchat_plugin *pl, char *var, char *dest, int dest_len)
+{
+	//cfg_get_str (char *cfg, char *var, char *dest, int dest_len)
+	int fh;
+	int l;
+	char confname[32];
+	//char *buffer;
+	char *canon;
+	char *cfg;
+	struct stat st;
+
+	canon = g_strdup (pl->name);
+	canonalize_key (canon);
+	sprintf (confname, "plugin_%s.conf", canon);
+	g_free (canon);
+
+	//buffer = (char*) malloc (dest_len);
+
+	/* partly borrowed from palette.c */
+	fh = xchat_open_file (confname, O_RDONLY, 0, 0);
+
+	if (fh != -1)
+	{
+		fstat (fh, &st);
+		cfg = malloc (st.st_size + 1);
+
+		if (cfg)
+		{
+			cfg[0] = '\0';
+			l = read (fh, cfg, st.st_size);
+
+			if (l >= 0)
+			{
+				cfg[l] = '\0';
+			}
+
+			if (!cfg_get_str (cfg, var, dest, dest_len))
+			{
+				return 0;
+			}
+
+			free (cfg);
+		}
+		else
+		{
+			return 0;
+		}
+
+		close (fh);
+		return 1;
+	}
+	else
+	{
+		return 0;
+	}
+}