Sat, 27 Aug 2016 18:16:01 -0500
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 | 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 | 8 | |
| 7658 | 9 | /* system includes */ |
| 106 | 10 | #include <stdlib.h> |
| 7658 | 11 | #include <stdio.h> |
| 106 | 12 | #include <unistd.h> |
| 13 | #include <sys/types.h> | |
| 14 | #include <sys/stat.h> | |
| 15 | #include <string.h> | |
| 16 | #include <ctype.h> | |
| 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 | 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 | 26 | #include "version.h" |
| 7658 | 27 | |
| 5255 | 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 | 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 | 34 | |
| 35 | /* parse char * as if were word array */ | |
| 36 | char *getarg(char *, int, int); | |
| 37 | ||
| 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 | 44 | char buffer[1024]; |
| 45 | char *command, *arg1, *arg2; | |
| 46 | FILE *file; | |
| 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 | 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 | 54 | if (buffer[strlen(buffer) - 1] == '\n') |
| 55 | buffer[strlen(buffer) - 1] = 0; | |
| 15884 | 56 | purple_debug_misc("filectl", "read: %s\n", buffer); |
| 106 | 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 | 60 | PurpleAccount *account; |
|
10256
b03475373f0d
[gaim-migrate @ 11397]
Mark Doliner <markdoliner@pidgin.im>
parents:
10246
diff
changeset
|
61 | |
| 106 | 62 | arg1 = getarg(buffer, 1, 0); |
| 63 | arg2 = getarg(buffer, 2, 1); | |
|
10256
b03475373f0d
[gaim-migrate @ 11397]
Mark Doliner <markdoliner@pidgin.im>
parents:
10246
diff
changeset
|
64 | |
| 15884 | 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 | 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 | 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 | 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 | 80 | { |
| 15884 | 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 | 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 | 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 | 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 | 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 | 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 | 104 | } |
|
10256
b03475373f0d
[gaim-migrate @ 11397]
Mark Doliner <markdoliner@pidgin.im>
parents:
10246
diff
changeset
|
105 | |
| 106 | 106 | free(arg1); |
| 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 | 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 | 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 | 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 | 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 | 125 | purple_core_quit(); |
|
10256
b03475373f0d
[gaim-migrate @ 11397]
Mark Doliner <markdoliner@pidgin.im>
parents:
10246
diff
changeset
|
126 | |
| 106 | 127 | } |
|
10256
b03475373f0d
[gaim-migrate @ 11397]
Mark Doliner <markdoliner@pidgin.im>
parents:
10246
diff
changeset
|
128 | |
| 106 | 129 | free(command); |
| 130 | } | |
| 131 | ||
| 132 | fclose(file); | |
| 133 | ||
|
10589
4e10236e06d4
[gaim-migrate @ 11994]
Daniel Atallah <datallah@pidgin.im>
parents:
10416
diff
changeset
|
134 | if (g_stat(filename, &finfo) != 0) |
| 106 | 135 | return; |
| 136 | mtime = finfo.st_mtime; | |
| 137 | } | |
| 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 | 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 | 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 | 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 | 152 | run_commands(); |
| 153 | } | |
| 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 | 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 | 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 | 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 | 168 | { |
|
179
3d1884b2ad14
[gaim-migrate @ 189]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
106
diff
changeset
|
169 | if (mtime != finfo.st_mtime) { |
| 15884 | 170 | purple_debug_info("filectl", "control changed, checking\n"); |
| 106 | 171 | run_commands(); |
|
179
3d1884b2ad14
[gaim-migrate @ 189]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
106
diff
changeset
|
172 | } |
| 7658 | 173 | } |
| 174 | ||
| 175 | return TRUE; | |
| 106 | 176 | } |
| 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 | 181 | char *arr; |
| 182 | char *val; | |
| 183 | int count = -1; | |
| 184 | int i; | |
| 185 | int state = 0; | |
| 186 | ||
| 187 | for (i = 0; i < strlen(line) && count < which; i++) { | |
| 188 | switch (state) { | |
| 189 | case 0: /* in whitespace, expecting word */ | |
| 190 | if (isalnum(line[i])) { | |
| 191 | count++; | |
| 192 | state = 1; | |
| 193 | } | |
| 194 | break; | |
| 195 | case 1: /* inside word, waiting for whitespace */ | |
| 196 | if (isspace(line[i])) { | |
| 197 | state = 0; | |
| 198 | } | |
| 199 | break; | |
| 200 | } | |
| 201 | } | |
| 202 | ||
| 203 | arr = strdup(&line[i - 1]); | |
| 204 | if (remain) | |
| 205 | return arr; | |
| 206 | ||
| 207 | for (i = 0; i < strlen(arr) && isalnum(arr[i]); i++); | |
| 208 | arr[i] = 0; | |
| 209 | val = strdup(arr); | |
| 210 | arr[i] = ' '; | |
| 211 | free(arr); | |
| 212 | return val; | |
| 213 | } | |
|
10256
b03475373f0d
[gaim-migrate @ 11397]
Mark Doliner <markdoliner@pidgin.im>
parents:
10246
diff
changeset
|
214 | |
| 5255 | 215 | /* |
| 216 | * EXPORTED FUNCTIONS | |
| 217 | */ | |
| 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 | 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 | 243 | { |
| 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 | 246 | |
| 247 | return TRUE; | |
| 248 | } | |
| 249 | ||
| 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 | 252 | { |
| 15884 | 253 | purple_timeout_remove(check); |
| 5255 | 254 | |
| 255 | return TRUE; | |
| 256 | } | |
| 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); |