libpurple/plugins/filectl.c

Sat, 27 Aug 2016 18:16:01 -0500

author
Mike Ruprecht <cmaiku@gmail.com>
date
Sat, 27 Aug 2016 18:16:01 -0500
changeset 37959
e76677ed819c
parent 37101
8ba9a23354ff
child 38433
361c801c4536
permissions
-rw-r--r--

connection: Add purple_connection_take_error()

This patch adds a purple_connection_take_error() function, which
is functionally equivalent to purple_connection_g_error(), except
that it takes ownership of the passed GError.

This is useful to simplify error handling so that the GError doesn't
have to be freed, or, in the future potentially copied, if it's no
longer needed where it's generated. It can also allow for GErrors
being generated without storing them in a variable. This would be
reasonably common if/when all PurpleConnection errors are passed
in via GError.

10256
b03475373f0d [gaim-migrate @ 11397]
Mark Doliner <markdoliner@pidgin.im>
parents: 10246
diff changeset
1 /**
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15444
diff changeset
2 * Send commands to Purple via ~/.purple/control
10256
b03475373f0d [gaim-migrate @ 11397]
Mark Doliner <markdoliner@pidgin.im>
parents: 10246
diff changeset
3 *
b03475373f0d [gaim-migrate @ 11397]
Mark Doliner <markdoliner@pidgin.im>
parents: 10246
diff changeset
4 * Originally by Eric Warmenhoven <eric@warmenhoven.org>
b03475373f0d [gaim-migrate @ 11397]
Mark Doliner <markdoliner@pidgin.im>
parents: 10246
diff changeset
5 * Compile fixes/mini hacks Alex Bennee <alex@bennee.com>
b03475373f0d [gaim-migrate @ 11397]
Mark Doliner <markdoliner@pidgin.im>
parents: 10246
diff changeset
6 * and Brian Tarricone <bjt23@users.sourceforge.net>
b03475373f0d [gaim-migrate @ 11397]
Mark Doliner <markdoliner@pidgin.im>
parents: 10246
diff changeset
7 */
106
420c81f47ca3 [gaim-migrate @ 116]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
8
7658
4c49bd83c793 [gaim-migrate @ 8302]
Alex Bennee
parents: 6982
diff changeset
9 /* system includes */
106
420c81f47ca3 [gaim-migrate @ 116]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
10 #include <stdlib.h>
7658
4c49bd83c793 [gaim-migrate @ 8302]
Alex Bennee
parents: 6982
diff changeset
11 #include <stdio.h>
106
420c81f47ca3 [gaim-migrate @ 116]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
12 #include <unistd.h>
420c81f47ca3 [gaim-migrate @ 116]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
13 #include <sys/types.h>
420c81f47ca3 [gaim-migrate @ 116]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
14 #include <sys/stat.h>
420c81f47ca3 [gaim-migrate @ 116]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
15 #include <string.h>
420c81f47ca3 [gaim-migrate @ 116]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
16 #include <ctype.h>
420c81f47ca3 [gaim-migrate @ 116]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
17
36792
764b45883fba Moved internal.h inclusion over others in libpurple plugins
Ankit Vani <a@nevitus.org>
parents: 36759
diff changeset
18 #include "internal.h"
10256
b03475373f0d [gaim-migrate @ 11397]
Mark Doliner <markdoliner@pidgin.im>
parents: 10246
diff changeset
19 #include "account.h"
7658
4c49bd83c793 [gaim-migrate @ 8302]
Alex Bennee
parents: 6982
diff changeset
20 #include "config.h"
10256
b03475373f0d [gaim-migrate @ 11397]
Mark Doliner <markdoliner@pidgin.im>
parents: 10246
diff changeset
21 #include "core.h"
b03475373f0d [gaim-migrate @ 11397]
Mark Doliner <markdoliner@pidgin.im>
parents: 10246
diff changeset
22 #include "conversation.h"
b03475373f0d [gaim-migrate @ 11397]
Mark Doliner <markdoliner@pidgin.im>
parents: 10246
diff changeset
23 #include "debug.h"
b03475373f0d [gaim-migrate @ 11397]
Mark Doliner <markdoliner@pidgin.im>
parents: 10246
diff changeset
24 #include "eventloop.h"
b03475373f0d [gaim-migrate @ 11397]
Mark Doliner <markdoliner@pidgin.im>
parents: 10246
diff changeset
25 #include "util.h"
9954
52a14a58a33e [gaim-migrate @ 10851]
Nathan Walp <nwalp@pidgin.im>
parents: 9863
diff changeset
26 #include "version.h"
7658
4c49bd83c793 [gaim-migrate @ 8302]
Alex Bennee
parents: 6982
diff changeset
27
5255
8aa84137a01f [gaim-migrate @ 5627]
Paul Aurich <darkrain42@pidgin.im>
parents: 5227
diff changeset
28 #define FILECTL_PLUGIN_ID "core-filectl"
179
3d1884b2ad14 [gaim-migrate @ 189]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 106
diff changeset
29 static int check;
3d1884b2ad14 [gaim-migrate @ 189]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 106
diff changeset
30 static time_t mtime;
106
420c81f47ca3 [gaim-migrate @ 116]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
31
12397
aa64ec827fdf [gaim-migrate @ 14704]
Richard Laager <rlaager@pidgin.im>
parents: 11338
diff changeset
32 static void init_file(void);
aa64ec827fdf [gaim-migrate @ 14704]
Richard Laager <rlaager@pidgin.im>
parents: 11338
diff changeset
33 static gboolean check_file(void);
106
420c81f47ca3 [gaim-migrate @ 116]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
34
420c81f47ca3 [gaim-migrate @ 116]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
35 /* parse char * as if were word array */
420c81f47ca3 [gaim-migrate @ 116]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
36 char *getarg(char *, int, int);
420c81f47ca3 [gaim-migrate @ 116]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
37
420c81f47ca3 [gaim-migrate @ 116]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
38 /* go through file and run any commands */
10256
b03475373f0d [gaim-migrate @ 11397]
Mark Doliner <markdoliner@pidgin.im>
parents: 10246
diff changeset
39 void
b03475373f0d [gaim-migrate @ 11397]
Mark Doliner <markdoliner@pidgin.im>
parents: 10246
diff changeset
40 run_commands()
b03475373f0d [gaim-migrate @ 11397]
Mark Doliner <markdoliner@pidgin.im>
parents: 10246
diff changeset
41 {
33940
b44d15793c83 Use GStatBuf instead of struct stat
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 32000
diff changeset
42 GStatBuf finfo;
32000
ddff235eb612 Use MAXPATHLEN instead of 256 for some path buffer sizes
Ethan Blanton <elb@pidgin.im>
parents: 25716
diff changeset
43 char filename[MAXPATHLEN];
106
420c81f47ca3 [gaim-migrate @ 116]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
44 char buffer[1024];
420c81f47ca3 [gaim-migrate @ 116]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
45 char *command, *arg1, *arg2;
420c81f47ca3 [gaim-migrate @ 116]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
46 FILE *file;
420c81f47ca3 [gaim-migrate @ 116]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
47
32000
ddff235eb612 Use MAXPATHLEN instead of 256 for some path buffer sizes
Ethan Blanton <elb@pidgin.im>
parents: 25716
diff changeset
48 snprintf(filename, MAXPATHLEN, "%s" G_DIR_SEPARATOR_S "control", purple_user_dir());
106
420c81f47ca3 [gaim-migrate @ 116]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
49
10589
4e10236e06d4 [gaim-migrate @ 11994]
Daniel Atallah <datallah@pidgin.im>
parents: 10416
diff changeset
50 file = g_fopen(filename, "r+");
10256
b03475373f0d [gaim-migrate @ 11397]
Mark Doliner <markdoliner@pidgin.im>
parents: 10246
diff changeset
51 while (fgets(buffer, sizeof(buffer), file)) {
b03475373f0d [gaim-migrate @ 11397]
Mark Doliner <markdoliner@pidgin.im>
parents: 10246
diff changeset
52
b03475373f0d [gaim-migrate @ 11397]
Mark Doliner <markdoliner@pidgin.im>
parents: 10246
diff changeset
53 /* Read the next command */
106
420c81f47ca3 [gaim-migrate @ 116]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
54 if (buffer[strlen(buffer) - 1] == '\n')
420c81f47ca3 [gaim-migrate @ 116]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
55 buffer[strlen(buffer) - 1] = 0;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15444
diff changeset
56 purple_debug_misc("filectl", "read: %s\n", buffer);
106
420c81f47ca3 [gaim-migrate @ 116]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
57 command = getarg(buffer, 0, 0);
10256
b03475373f0d [gaim-migrate @ 11397]
Mark Doliner <markdoliner@pidgin.im>
parents: 10246
diff changeset
58
18552
810a338ef085 Use the glib strcasecmp functions everywhere, as we've had reports of
Richard Laager <rlaager@pidgin.im>
parents: 15884
diff changeset
59 if (!g_ascii_strncasecmp(command, "login", 6)) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15444
diff changeset
60 PurpleAccount *account;
10256
b03475373f0d [gaim-migrate @ 11397]
Mark Doliner <markdoliner@pidgin.im>
parents: 10246
diff changeset
61
106
420c81f47ca3 [gaim-migrate @ 116]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
62 arg1 = getarg(buffer, 1, 0);
420c81f47ca3 [gaim-migrate @ 116]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
63 arg2 = getarg(buffer, 2, 1);
10256
b03475373f0d [gaim-migrate @ 11397]
Mark Doliner <markdoliner@pidgin.im>
parents: 10246
diff changeset
64
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15444
diff changeset
65 account = purple_accounts_find(arg1, arg2);
10256
b03475373f0d [gaim-migrate @ 11397]
Mark Doliner <markdoliner@pidgin.im>
parents: 10246
diff changeset
66 if (account != NULL) /* username found */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15444
diff changeset
67 purple_account_connect(account);
10256
b03475373f0d [gaim-migrate @ 11397]
Mark Doliner <markdoliner@pidgin.im>
parents: 10246
diff changeset
68
b03475373f0d [gaim-migrate @ 11397]
Mark Doliner <markdoliner@pidgin.im>
parents: 10246
diff changeset
69 free(arg1);
b03475373f0d [gaim-migrate @ 11397]
Mark Doliner <markdoliner@pidgin.im>
parents: 10246
diff changeset
70 free(arg2);
b03475373f0d [gaim-migrate @ 11397]
Mark Doliner <markdoliner@pidgin.im>
parents: 10246
diff changeset
71
18552
810a338ef085 Use the glib strcasecmp functions everywhere, as we've had reports of
Richard Laager <rlaager@pidgin.im>
parents: 15884
diff changeset
72 } else if (!g_ascii_strncasecmp(command, "logout", 7)) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15444
diff changeset
73 PurpleAccount *account;
10256
b03475373f0d [gaim-migrate @ 11397]
Mark Doliner <markdoliner@pidgin.im>
parents: 10246
diff changeset
74
b03475373f0d [gaim-migrate @ 11397]
Mark Doliner <markdoliner@pidgin.im>
parents: 10246
diff changeset
75 arg1 = getarg(buffer, 1, 1);
b03475373f0d [gaim-migrate @ 11397]
Mark Doliner <markdoliner@pidgin.im>
parents: 10246
diff changeset
76 arg2 = getarg(buffer, 2, 1);
b03475373f0d [gaim-migrate @ 11397]
Mark Doliner <markdoliner@pidgin.im>
parents: 10246
diff changeset
77
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15444
diff changeset
78 account = purple_accounts_find(arg1, arg2);
10256
b03475373f0d [gaim-migrate @ 11397]
Mark Doliner <markdoliner@pidgin.im>
parents: 10246
diff changeset
79 if (account != NULL)
7658
4c49bd83c793 [gaim-migrate @ 8302]
Alex Bennee
parents: 6982
diff changeset
80 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15444
diff changeset
81 purple_account_disconnect(account);
10256
b03475373f0d [gaim-migrate @ 11397]
Mark Doliner <markdoliner@pidgin.im>
parents: 10246
diff changeset
82 }
b03475373f0d [gaim-migrate @ 11397]
Mark Doliner <markdoliner@pidgin.im>
parents: 10246
diff changeset
83 else if (arg1 == NULL)
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15444
diff changeset
84 purple_connections_disconnect_all();
10256
b03475373f0d [gaim-migrate @ 11397]
Mark Doliner <markdoliner@pidgin.im>
parents: 10246
diff changeset
85
b03475373f0d [gaim-migrate @ 11397]
Mark Doliner <markdoliner@pidgin.im>
parents: 10246
diff changeset
86 free(arg1);
b03475373f0d [gaim-migrate @ 11397]
Mark Doliner <markdoliner@pidgin.im>
parents: 10246
diff changeset
87 free(arg2);
b03475373f0d [gaim-migrate @ 11397]
Mark Doliner <markdoliner@pidgin.im>
parents: 10246
diff changeset
88
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15444
diff changeset
89 /* purple_find_conversation() is gone in 2.0.0. */
13471
e01689a020dd [gaim-migrate @ 15846]
Richard Laager <rlaager@pidgin.im>
parents: 12397
diff changeset
90 #if 0
18552
810a338ef085 Use the glib strcasecmp functions everywhere, as we've had reports of
Richard Laager <rlaager@pidgin.im>
parents: 15884
diff changeset
91 } else if (!g_ascii_strncasecmp(command, "send", 4)) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15444
diff changeset
92 PurpleConversation *conv;
10256
b03475373f0d [gaim-migrate @ 11397]
Mark Doliner <markdoliner@pidgin.im>
parents: 10246
diff changeset
93
b03475373f0d [gaim-migrate @ 11397]
Mark Doliner <markdoliner@pidgin.im>
parents: 10246
diff changeset
94 arg1 = getarg(buffer, 1, 0);
b03475373f0d [gaim-migrate @ 11397]
Mark Doliner <markdoliner@pidgin.im>
parents: 10246
diff changeset
95 arg2 = getarg(buffer, 2, 1);
b03475373f0d [gaim-migrate @ 11397]
Mark Doliner <markdoliner@pidgin.im>
parents: 10246
diff changeset
96
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15444
diff changeset
97 conv = purple_find_conversation(PURPLE_CONV_TYPE_ANY, arg1);
10256
b03475373f0d [gaim-migrate @ 11397]
Mark Doliner <markdoliner@pidgin.im>
parents: 10246
diff changeset
98 if (conv != NULL)
b03475373f0d [gaim-migrate @ 11397]
Mark Doliner <markdoliner@pidgin.im>
parents: 10246
diff changeset
99 {
b03475373f0d [gaim-migrate @ 11397]
Mark Doliner <markdoliner@pidgin.im>
parents: 10246
diff changeset
100 /*
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15444
diff changeset
101 purple_conversation_write(conv, arg2, WFLAG_SEND, NULL, time(NULL), -1);
35499
c4c5e0a670b1 Fix namespaces issues in libpurple.
Ankit Vani <a@nevitus.org>
parents: 33940
diff changeset
102 purple_serv_send_im(conv->gc, arg1, arg2, 0);
9863
323e4fe28791 [gaim-migrate @ 10742]
Mark Doliner <markdoliner@pidgin.im>
parents: 8749
diff changeset
103 */
7658
4c49bd83c793 [gaim-migrate @ 8302]
Alex Bennee
parents: 6982
diff changeset
104 }
10256
b03475373f0d [gaim-migrate @ 11397]
Mark Doliner <markdoliner@pidgin.im>
parents: 10246
diff changeset
105
106
420c81f47ca3 [gaim-migrate @ 116]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
106 free(arg1);
420c81f47ca3 [gaim-migrate @ 116]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
107 free(arg2);
13471
e01689a020dd [gaim-migrate @ 15846]
Richard Laager <rlaager@pidgin.im>
parents: 12397
diff changeset
108 #endif
10256
b03475373f0d [gaim-migrate @ 11397]
Mark Doliner <markdoliner@pidgin.im>
parents: 10246
diff changeset
109
18552
810a338ef085 Use the glib strcasecmp functions everywhere, as we've had reports of
Richard Laager <rlaager@pidgin.im>
parents: 15884
diff changeset
110 } else if (!g_ascii_strncasecmp(command, "away", 4)) {
106
420c81f47ca3 [gaim-migrate @ 116]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
111 arg1 = getarg(buffer, 1, 1);
10256
b03475373f0d [gaim-migrate @ 11397]
Mark Doliner <markdoliner@pidgin.im>
parents: 10246
diff changeset
112 /* serv_set_away_all(arg1); */
106
420c81f47ca3 [gaim-migrate @ 116]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
113 free(arg1);
10256
b03475373f0d [gaim-migrate @ 11397]
Mark Doliner <markdoliner@pidgin.im>
parents: 10246
diff changeset
114
18552
810a338ef085 Use the glib strcasecmp functions everywhere, as we've had reports of
Richard Laager <rlaager@pidgin.im>
parents: 15884
diff changeset
115 } else if (!g_ascii_strncasecmp(command, "hide", 4)) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15444
diff changeset
116 purple_blist_set_visible(FALSE);
10256
b03475373f0d [gaim-migrate @ 11397]
Mark Doliner <markdoliner@pidgin.im>
parents: 10246
diff changeset
117
18552
810a338ef085 Use the glib strcasecmp functions everywhere, as we've had reports of
Richard Laager <rlaager@pidgin.im>
parents: 15884
diff changeset
118 } else if (!g_ascii_strncasecmp(command, "unhide", 6)) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15444
diff changeset
119 purple_blist_set_visible(TRUE);
10256
b03475373f0d [gaim-migrate @ 11397]
Mark Doliner <markdoliner@pidgin.im>
parents: 10246
diff changeset
120
18552
810a338ef085 Use the glib strcasecmp functions everywhere, as we've had reports of
Richard Laager <rlaager@pidgin.im>
parents: 15884
diff changeset
121 } else if (!g_ascii_strncasecmp(command, "back", 4)) {
9863
323e4fe28791 [gaim-migrate @ 10742]
Mark Doliner <markdoliner@pidgin.im>
parents: 8749
diff changeset
122 /* do_im_back(); */
10256
b03475373f0d [gaim-migrate @ 11397]
Mark Doliner <markdoliner@pidgin.im>
parents: 10246
diff changeset
123
18552
810a338ef085 Use the glib strcasecmp functions everywhere, as we've had reports of
Richard Laager <rlaager@pidgin.im>
parents: 15884
diff changeset
124 } else if (!g_ascii_strncasecmp(command, "quit", 4)) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15444
diff changeset
125 purple_core_quit();
10256
b03475373f0d [gaim-migrate @ 11397]
Mark Doliner <markdoliner@pidgin.im>
parents: 10246
diff changeset
126
106
420c81f47ca3 [gaim-migrate @ 116]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
127 }
10256
b03475373f0d [gaim-migrate @ 11397]
Mark Doliner <markdoliner@pidgin.im>
parents: 10246
diff changeset
128
106
420c81f47ca3 [gaim-migrate @ 116]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
129 free(command);
420c81f47ca3 [gaim-migrate @ 116]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
130 }
420c81f47ca3 [gaim-migrate @ 116]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
131
420c81f47ca3 [gaim-migrate @ 116]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
132 fclose(file);
420c81f47ca3 [gaim-migrate @ 116]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
133
10589
4e10236e06d4 [gaim-migrate @ 11994]
Daniel Atallah <datallah@pidgin.im>
parents: 10416
diff changeset
134 if (g_stat(filename, &finfo) != 0)
106
420c81f47ca3 [gaim-migrate @ 116]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
135 return;
420c81f47ca3 [gaim-migrate @ 116]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
136 mtime = finfo.st_mtime;
420c81f47ca3 [gaim-migrate @ 116]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
137 }
420c81f47ca3 [gaim-migrate @ 116]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
138
10256
b03475373f0d [gaim-migrate @ 11397]
Mark Doliner <markdoliner@pidgin.im>
parents: 10246
diff changeset
139 /**
b03475373f0d [gaim-migrate @ 11397]
Mark Doliner <markdoliner@pidgin.im>
parents: 10246
diff changeset
140 * Check to see if the size of the file is > 0. if so, run commands.
b03475373f0d [gaim-migrate @ 11397]
Mark Doliner <markdoliner@pidgin.im>
parents: 10246
diff changeset
141 */
b03475373f0d [gaim-migrate @ 11397]
Mark Doliner <markdoliner@pidgin.im>
parents: 10246
diff changeset
142 void
b03475373f0d [gaim-migrate @ 11397]
Mark Doliner <markdoliner@pidgin.im>
parents: 10246
diff changeset
143 init_file()
b03475373f0d [gaim-migrate @ 11397]
Mark Doliner <markdoliner@pidgin.im>
parents: 10246
diff changeset
144 {
106
420c81f47ca3 [gaim-migrate @ 116]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
145 /* most of this was taken from Bash v2.04 by the FSF */
33940
b44d15793c83 Use GStatBuf instead of struct stat
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 32000
diff changeset
146 GStatBuf finfo;
32000
ddff235eb612 Use MAXPATHLEN instead of 256 for some path buffer sizes
Ethan Blanton <elb@pidgin.im>
parents: 25716
diff changeset
147 char filename[MAXPATHLEN];
106
420c81f47ca3 [gaim-migrate @ 116]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
148
32000
ddff235eb612 Use MAXPATHLEN instead of 256 for some path buffer sizes
Ethan Blanton <elb@pidgin.im>
parents: 25716
diff changeset
149 snprintf(filename, MAXPATHLEN, "%s" G_DIR_SEPARATOR_S "control", purple_user_dir());
106
420c81f47ca3 [gaim-migrate @ 116]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
150
10589
4e10236e06d4 [gaim-migrate @ 11994]
Daniel Atallah <datallah@pidgin.im>
parents: 10416
diff changeset
151 if ((g_stat(filename, &finfo) == 0) && (finfo.st_size > 0))
106
420c81f47ca3 [gaim-migrate @ 116]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
152 run_commands();
420c81f47ca3 [gaim-migrate @ 116]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
153 }
420c81f47ca3 [gaim-migrate @ 116]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
154
10256
b03475373f0d [gaim-migrate @ 11397]
Mark Doliner <markdoliner@pidgin.im>
parents: 10246
diff changeset
155 /**
b03475373f0d [gaim-migrate @ 11397]
Mark Doliner <markdoliner@pidgin.im>
parents: 10246
diff changeset
156 * Check to see if we need to run commands from the file.
b03475373f0d [gaim-migrate @ 11397]
Mark Doliner <markdoliner@pidgin.im>
parents: 10246
diff changeset
157 */
b03475373f0d [gaim-migrate @ 11397]
Mark Doliner <markdoliner@pidgin.im>
parents: 10246
diff changeset
158 gboolean
b03475373f0d [gaim-migrate @ 11397]
Mark Doliner <markdoliner@pidgin.im>
parents: 10246
diff changeset
159 check_file()
b03475373f0d [gaim-migrate @ 11397]
Mark Doliner <markdoliner@pidgin.im>
parents: 10246
diff changeset
160 {
106
420c81f47ca3 [gaim-migrate @ 116]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
161 /* most of this was taken from Bash v2.04 by the FSF */
33940
b44d15793c83 Use GStatBuf instead of struct stat
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 32000
diff changeset
162 GStatBuf finfo;
32000
ddff235eb612 Use MAXPATHLEN instead of 256 for some path buffer sizes
Ethan Blanton <elb@pidgin.im>
parents: 25716
diff changeset
163 char filename[MAXPATHLEN];
106
420c81f47ca3 [gaim-migrate @ 116]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
164
32000
ddff235eb612 Use MAXPATHLEN instead of 256 for some path buffer sizes
Ethan Blanton <elb@pidgin.im>
parents: 25716
diff changeset
165 snprintf(filename, MAXPATHLEN, "%s" G_DIR_SEPARATOR_S "control", purple_user_dir());
106
420c81f47ca3 [gaim-migrate @ 116]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
166
10589
4e10236e06d4 [gaim-migrate @ 11994]
Daniel Atallah <datallah@pidgin.im>
parents: 10416
diff changeset
167 if ((g_stat(filename, &finfo) == 0) && (finfo.st_size > 0))
7658
4c49bd83c793 [gaim-migrate @ 8302]
Alex Bennee
parents: 6982
diff changeset
168 {
179
3d1884b2ad14 [gaim-migrate @ 189]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 106
diff changeset
169 if (mtime != finfo.st_mtime) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15444
diff changeset
170 purple_debug_info("filectl", "control changed, checking\n");
106
420c81f47ca3 [gaim-migrate @ 116]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
171 run_commands();
179
3d1884b2ad14 [gaim-migrate @ 189]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 106
diff changeset
172 }
7658
4c49bd83c793 [gaim-migrate @ 8302]
Alex Bennee
parents: 6982
diff changeset
173 }
4c49bd83c793 [gaim-migrate @ 8302]
Alex Bennee
parents: 6982
diff changeset
174
4c49bd83c793 [gaim-migrate @ 8302]
Alex Bennee
parents: 6982
diff changeset
175 return TRUE;
106
420c81f47ca3 [gaim-migrate @ 116]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
176 }
420c81f47ca3 [gaim-migrate @ 116]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
177
10256
b03475373f0d [gaim-migrate @ 11397]
Mark Doliner <markdoliner@pidgin.im>
parents: 10246
diff changeset
178 char *
b03475373f0d [gaim-migrate @ 11397]
Mark Doliner <markdoliner@pidgin.im>
parents: 10246
diff changeset
179 getarg(char *line, int which, int remain)
b03475373f0d [gaim-migrate @ 11397]
Mark Doliner <markdoliner@pidgin.im>
parents: 10246
diff changeset
180 {
106
420c81f47ca3 [gaim-migrate @ 116]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
181 char *arr;
420c81f47ca3 [gaim-migrate @ 116]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
182 char *val;
420c81f47ca3 [gaim-migrate @ 116]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
183 int count = -1;
420c81f47ca3 [gaim-migrate @ 116]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
184 int i;
420c81f47ca3 [gaim-migrate @ 116]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
185 int state = 0;
420c81f47ca3 [gaim-migrate @ 116]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
186
420c81f47ca3 [gaim-migrate @ 116]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
187 for (i = 0; i < strlen(line) && count < which; i++) {
420c81f47ca3 [gaim-migrate @ 116]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
188 switch (state) {
420c81f47ca3 [gaim-migrate @ 116]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
189 case 0: /* in whitespace, expecting word */
420c81f47ca3 [gaim-migrate @ 116]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
190 if (isalnum(line[i])) {
420c81f47ca3 [gaim-migrate @ 116]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
191 count++;
420c81f47ca3 [gaim-migrate @ 116]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
192 state = 1;
420c81f47ca3 [gaim-migrate @ 116]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
193 }
420c81f47ca3 [gaim-migrate @ 116]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
194 break;
420c81f47ca3 [gaim-migrate @ 116]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
195 case 1: /* inside word, waiting for whitespace */
420c81f47ca3 [gaim-migrate @ 116]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
196 if (isspace(line[i])) {
420c81f47ca3 [gaim-migrate @ 116]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
197 state = 0;
420c81f47ca3 [gaim-migrate @ 116]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
198 }
420c81f47ca3 [gaim-migrate @ 116]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
199 break;
420c81f47ca3 [gaim-migrate @ 116]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
200 }
420c81f47ca3 [gaim-migrate @ 116]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
201 }
420c81f47ca3 [gaim-migrate @ 116]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
202
420c81f47ca3 [gaim-migrate @ 116]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
203 arr = strdup(&line[i - 1]);
420c81f47ca3 [gaim-migrate @ 116]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
204 if (remain)
420c81f47ca3 [gaim-migrate @ 116]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
205 return arr;
420c81f47ca3 [gaim-migrate @ 116]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
206
420c81f47ca3 [gaim-migrate @ 116]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
207 for (i = 0; i < strlen(arr) && isalnum(arr[i]); i++);
420c81f47ca3 [gaim-migrate @ 116]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
208 arr[i] = 0;
420c81f47ca3 [gaim-migrate @ 116]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
209 val = strdup(arr);
420c81f47ca3 [gaim-migrate @ 116]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
210 arr[i] = ' ';
420c81f47ca3 [gaim-migrate @ 116]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
211 free(arr);
420c81f47ca3 [gaim-migrate @ 116]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
212 return val;
420c81f47ca3 [gaim-migrate @ 116]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
213 }
10256
b03475373f0d [gaim-migrate @ 11397]
Mark Doliner <markdoliner@pidgin.im>
parents: 10246
diff changeset
214
5255
8aa84137a01f [gaim-migrate @ 5627]
Paul Aurich <darkrain42@pidgin.im>
parents: 5227
diff changeset
215 /*
8aa84137a01f [gaim-migrate @ 5627]
Paul Aurich <darkrain42@pidgin.im>
parents: 5227
diff changeset
216 * EXPORTED FUNCTIONS
8aa84137a01f [gaim-migrate @ 5627]
Paul Aurich <darkrain42@pidgin.im>
parents: 5227
diff changeset
217 */
8aa84137a01f [gaim-migrate @ 5627]
Paul Aurich <darkrain42@pidgin.im>
parents: 5227
diff changeset
218
36759
28078f07a32c Refactored filectl to use the new plugin API
Ankit Vani <a@nevitus.org>
parents: 33940
diff changeset
219 static PurplePluginInfo *
28078f07a32c Refactored filectl to use the new plugin API
Ankit Vani <a@nevitus.org>
parents: 33940
diff changeset
220 plugin_query(GError **error)
28078f07a32c Refactored filectl to use the new plugin API
Ankit Vani <a@nevitus.org>
parents: 33940
diff changeset
221 {
28078f07a32c Refactored filectl to use the new plugin API
Ankit Vani <a@nevitus.org>
parents: 33940
diff changeset
222 const gchar * const authors[] = {
28078f07a32c Refactored filectl to use the new plugin API
Ankit Vani <a@nevitus.org>
parents: 33940
diff changeset
223 "Eric Warmenhoven <eric@warmenhoven.org>",
28078f07a32c Refactored filectl to use the new plugin API
Ankit Vani <a@nevitus.org>
parents: 33940
diff changeset
224 NULL
28078f07a32c Refactored filectl to use the new plugin API
Ankit Vani <a@nevitus.org>
parents: 33940
diff changeset
225 };
28078f07a32c Refactored filectl to use the new plugin API
Ankit Vani <a@nevitus.org>
parents: 33940
diff changeset
226
28078f07a32c Refactored filectl to use the new plugin API
Ankit Vani <a@nevitus.org>
parents: 33940
diff changeset
227 return purple_plugin_info_new(
28078f07a32c Refactored filectl to use the new plugin API
Ankit Vani <a@nevitus.org>
parents: 33940
diff changeset
228 "id", FILECTL_PLUGIN_ID,
28078f07a32c Refactored filectl to use the new plugin API
Ankit Vani <a@nevitus.org>
parents: 33940
diff changeset
229 "name", N_("File Control"),
28078f07a32c Refactored filectl to use the new plugin API
Ankit Vani <a@nevitus.org>
parents: 33940
diff changeset
230 "version", DISPLAY_VERSION,
28078f07a32c Refactored filectl to use the new plugin API
Ankit Vani <a@nevitus.org>
parents: 33940
diff changeset
231 "category", N_("Utility"),
28078f07a32c Refactored filectl to use the new plugin API
Ankit Vani <a@nevitus.org>
parents: 33940
diff changeset
232 "summary", N_("Allows control by entering commands in a file."),
28078f07a32c Refactored filectl to use the new plugin API
Ankit Vani <a@nevitus.org>
parents: 33940
diff changeset
233 "description", N_("Allows control by entering commands in a file."),
28078f07a32c Refactored filectl to use the new plugin API
Ankit Vani <a@nevitus.org>
parents: 33940
diff changeset
234 "authors", authors,
28078f07a32c Refactored filectl to use the new plugin API
Ankit Vani <a@nevitus.org>
parents: 33940
diff changeset
235 "website", PURPLE_WEBSITE,
28078f07a32c Refactored filectl to use the new plugin API
Ankit Vani <a@nevitus.org>
parents: 33940
diff changeset
236 "abi-version", PURPLE_ABI_VERSION,
28078f07a32c Refactored filectl to use the new plugin API
Ankit Vani <a@nevitus.org>
parents: 33940
diff changeset
237 NULL
28078f07a32c Refactored filectl to use the new plugin API
Ankit Vani <a@nevitus.org>
parents: 33940
diff changeset
238 );
28078f07a32c Refactored filectl to use the new plugin API
Ankit Vani <a@nevitus.org>
parents: 33940
diff changeset
239 }
28078f07a32c Refactored filectl to use the new plugin API
Ankit Vani <a@nevitus.org>
parents: 33940
diff changeset
240
5255
8aa84137a01f [gaim-migrate @ 5627]
Paul Aurich <darkrain42@pidgin.im>
parents: 5227
diff changeset
241 static gboolean
36759
28078f07a32c Refactored filectl to use the new plugin API
Ankit Vani <a@nevitus.org>
parents: 33940
diff changeset
242 plugin_load(PurplePlugin *plugin, GError **error)
5255
8aa84137a01f [gaim-migrate @ 5627]
Paul Aurich <darkrain42@pidgin.im>
parents: 5227
diff changeset
243 {
8aa84137a01f [gaim-migrate @ 5627]
Paul Aurich <darkrain42@pidgin.im>
parents: 5227
diff changeset
244 init_file();
25716
1b5be208d5ba applied changes from a336cc1fd3a1ce815f97303b8d5ae8988f8cbd5b
Ethan Blanton <elb@pidgin.im>
parents: 20288
diff changeset
245 check = purple_timeout_add_seconds(5, (GSourceFunc)check_file, NULL);
5255
8aa84137a01f [gaim-migrate @ 5627]
Paul Aurich <darkrain42@pidgin.im>
parents: 5227
diff changeset
246
8aa84137a01f [gaim-migrate @ 5627]
Paul Aurich <darkrain42@pidgin.im>
parents: 5227
diff changeset
247 return TRUE;
8aa84137a01f [gaim-migrate @ 5627]
Paul Aurich <darkrain42@pidgin.im>
parents: 5227
diff changeset
248 }
8aa84137a01f [gaim-migrate @ 5627]
Paul Aurich <darkrain42@pidgin.im>
parents: 5227
diff changeset
249
8aa84137a01f [gaim-migrate @ 5627]
Paul Aurich <darkrain42@pidgin.im>
parents: 5227
diff changeset
250 static gboolean
36759
28078f07a32c Refactored filectl to use the new plugin API
Ankit Vani <a@nevitus.org>
parents: 33940
diff changeset
251 plugin_unload(PurplePlugin *plugin, GError **error)
5255
8aa84137a01f [gaim-migrate @ 5627]
Paul Aurich <darkrain42@pidgin.im>
parents: 5227
diff changeset
252 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15444
diff changeset
253 purple_timeout_remove(check);
5255
8aa84137a01f [gaim-migrate @ 5627]
Paul Aurich <darkrain42@pidgin.im>
parents: 5227
diff changeset
254
8aa84137a01f [gaim-migrate @ 5627]
Paul Aurich <darkrain42@pidgin.im>
parents: 5227
diff changeset
255 return TRUE;
8aa84137a01f [gaim-migrate @ 5627]
Paul Aurich <darkrain42@pidgin.im>
parents: 5227
diff changeset
256 }
8aa84137a01f [gaim-migrate @ 5627]
Paul Aurich <darkrain42@pidgin.im>
parents: 5227
diff changeset
257
36759
28078f07a32c Refactored filectl to use the new plugin API
Ankit Vani <a@nevitus.org>
parents: 33940
diff changeset
258 PURPLE_PLUGIN_INIT(filectl, plugin_query, plugin_load, plugin_unload);

mercurial