annotate src/imap/commands.c @ 9490:fd84592e817b HEAD

dovecot-example.conf: Updated dict comments.
author Timo Sirainen <tss@iki.fi>
date Mon, 23 Nov 2009 13:08:47 -0500
parents ef7c0c3b1976
children 3efdbaab2960
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
8590
b9faf4db2a9f Updated copyright notices to include year 2009.
Timo Sirainen <tss@iki.fi>
parents: 8027
diff changeset
1 /* Copyright (c) 2002-2009 Dovecot authors, see the included COPYING file */
0
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
2
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
3 #include "common.h"
4629
0d24ee6b4ccd Use array_t in commands buffer.
Timo Sirainen <tss@iki.fi>
parents: 4451
diff changeset
4 #include "array.h"
1464
bd489d13479e Added command_register() and related functions so we can dynamically
Timo Sirainen <tss@iki.fi>
parents: 1172
diff changeset
5 #include "buffer.h"
0
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
6 #include "commands.h"
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
7
1464
bd489d13479e Added command_register() and related functions so we can dynamically
Timo Sirainen <tss@iki.fi>
parents: 1172
diff changeset
8 #include <stdlib.h>
bd489d13479e Added command_register() and related functions so we can dynamically
Timo Sirainen <tss@iki.fi>
parents: 1172
diff changeset
9
8027
62cf70991cf2 extern/static fixes (from a sparse check by Diego Liziero)
Timo Sirainen <tss@iki.fi>
parents: 7917
diff changeset
10 static const struct command imap4rev1_commands[] = {
4941
f612d2086448 If running commands in parallel would cause ambiguity, run them
Timo Sirainen <tss@iki.fi>
parents: 4939
diff changeset
11 { "CAPABILITY", cmd_capability, 0 },
7288
0917df31efec LOGOUT command also closes mailbox, so mark it as such to fix command
Timo Sirainen <tss@iki.fi>
parents: 7086
diff changeset
12 { "LOGOUT", cmd_logout, COMMAND_FLAG_BREAKS_MAILBOX },
4941
f612d2086448 If running commands in parallel would cause ambiguity, run them
Timo Sirainen <tss@iki.fi>
parents: 4939
diff changeset
13 { "NOOP", cmd_noop, COMMAND_FLAG_BREAKS_SEQS },
1464
bd489d13479e Added command_register() and related functions so we can dynamically
Timo Sirainen <tss@iki.fi>
parents: 1172
diff changeset
14
4941
f612d2086448 If running commands in parallel would cause ambiguity, run them
Timo Sirainen <tss@iki.fi>
parents: 4939
diff changeset
15 { "APPEND", cmd_append, COMMAND_FLAG_BREAKS_SEQS },
f612d2086448 If running commands in parallel would cause ambiguity, run them
Timo Sirainen <tss@iki.fi>
parents: 4939
diff changeset
16 { "EXAMINE", cmd_examine, COMMAND_FLAG_BREAKS_MAILBOX },
f612d2086448 If running commands in parallel would cause ambiguity, run them
Timo Sirainen <tss@iki.fi>
parents: 4939
diff changeset
17 { "CREATE", cmd_create, 0 },
f612d2086448 If running commands in parallel would cause ambiguity, run them
Timo Sirainen <tss@iki.fi>
parents: 4939
diff changeset
18 { "DELETE", cmd_delete, 0 },
f612d2086448 If running commands in parallel would cause ambiguity, run them
Timo Sirainen <tss@iki.fi>
parents: 4939
diff changeset
19 { "RENAME", cmd_rename, 0 },
f612d2086448 If running commands in parallel would cause ambiguity, run them
Timo Sirainen <tss@iki.fi>
parents: 4939
diff changeset
20 { "LIST", cmd_list, 0 },
f612d2086448 If running commands in parallel would cause ambiguity, run them
Timo Sirainen <tss@iki.fi>
parents: 4939
diff changeset
21 { "LSUB", cmd_lsub, 0 },
f612d2086448 If running commands in parallel would cause ambiguity, run them
Timo Sirainen <tss@iki.fi>
parents: 4939
diff changeset
22 { "SELECT", cmd_select, COMMAND_FLAG_BREAKS_MAILBOX },
f612d2086448 If running commands in parallel would cause ambiguity, run them
Timo Sirainen <tss@iki.fi>
parents: 4939
diff changeset
23 { "STATUS", cmd_status, 0 },
f612d2086448 If running commands in parallel would cause ambiguity, run them
Timo Sirainen <tss@iki.fi>
parents: 4939
diff changeset
24 { "SUBSCRIBE", cmd_subscribe, 0 },
f612d2086448 If running commands in parallel would cause ambiguity, run them
Timo Sirainen <tss@iki.fi>
parents: 4939
diff changeset
25 { "UNSUBSCRIBE", cmd_unsubscribe, 0 },
1464
bd489d13479e Added command_register() and related functions so we can dynamically
Timo Sirainen <tss@iki.fi>
parents: 1172
diff changeset
26
4941
f612d2086448 If running commands in parallel would cause ambiguity, run them
Timo Sirainen <tss@iki.fi>
parents: 4939
diff changeset
27 { "CHECK", cmd_check, COMMAND_FLAG_BREAKS_SEQS },
f612d2086448 If running commands in parallel would cause ambiguity, run them
Timo Sirainen <tss@iki.fi>
parents: 4939
diff changeset
28 { "CLOSE", cmd_close, COMMAND_FLAG_BREAKS_MAILBOX },
f612d2086448 If running commands in parallel would cause ambiguity, run them
Timo Sirainen <tss@iki.fi>
parents: 4939
diff changeset
29 { "COPY", cmd_copy, COMMAND_FLAG_USES_SEQS |
f612d2086448 If running commands in parallel would cause ambiguity, run them
Timo Sirainen <tss@iki.fi>
parents: 4939
diff changeset
30 COMMAND_FLAG_BREAKS_SEQS },
f612d2086448 If running commands in parallel would cause ambiguity, run them
Timo Sirainen <tss@iki.fi>
parents: 4939
diff changeset
31 { "EXPUNGE", cmd_expunge, COMMAND_FLAG_BREAKS_SEQS },
f612d2086448 If running commands in parallel would cause ambiguity, run them
Timo Sirainen <tss@iki.fi>
parents: 4939
diff changeset
32 { "FETCH", cmd_fetch, COMMAND_FLAG_USES_SEQS },
f612d2086448 If running commands in parallel would cause ambiguity, run them
Timo Sirainen <tss@iki.fi>
parents: 4939
diff changeset
33 { "SEARCH", cmd_search, COMMAND_FLAG_USES_SEQS },
f612d2086448 If running commands in parallel would cause ambiguity, run them
Timo Sirainen <tss@iki.fi>
parents: 4939
diff changeset
34 { "STORE", cmd_store, COMMAND_FLAG_USES_SEQS },
f612d2086448 If running commands in parallel would cause ambiguity, run them
Timo Sirainen <tss@iki.fi>
parents: 4939
diff changeset
35 { "UID", cmd_uid, 0 },
f612d2086448 If running commands in parallel would cause ambiguity, run them
Timo Sirainen <tss@iki.fi>
parents: 4939
diff changeset
36 { "UID COPY", cmd_copy, COMMAND_FLAG_BREAKS_SEQS },
f612d2086448 If running commands in parallel would cause ambiguity, run them
Timo Sirainen <tss@iki.fi>
parents: 4939
diff changeset
37 { "UID FETCH", cmd_fetch, COMMAND_FLAG_BREAKS_SEQS },
f612d2086448 If running commands in parallel would cause ambiguity, run them
Timo Sirainen <tss@iki.fi>
parents: 4939
diff changeset
38 { "UID SEARCH", cmd_search, COMMAND_FLAG_BREAKS_SEQS },
f612d2086448 If running commands in parallel would cause ambiguity, run them
Timo Sirainen <tss@iki.fi>
parents: 4939
diff changeset
39 { "UID STORE", cmd_store, COMMAND_FLAG_BREAKS_SEQS }
1464
bd489d13479e Added command_register() and related functions so we can dynamically
Timo Sirainen <tss@iki.fi>
parents: 1172
diff changeset
40 };
6494
59490181469e Use N_ELEMENTS() macro instead of doing sizeof()/sizeof([0]) ourself.
Timo Sirainen <tss@iki.fi>
parents: 6429
diff changeset
41 #define IMAP4REV1_COMMANDS_COUNT N_ELEMENTS(imap4rev1_commands)
0
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
42
8027
62cf70991cf2 extern/static fixes (from a sparse check by Diego Liziero)
Timo Sirainen <tss@iki.fi>
parents: 7917
diff changeset
43 static const struct command imap_ext_commands[] = {
7647
879208fdc7e3 Implemented CONTEXT=SEARCH extension.
Timo Sirainen <tss@iki.fi>
parents: 7621
diff changeset
44 { "CANCELUPDATE", cmd_cancelupdate,0 },
7621
bec7141872eb Added support for ENABLE extension.
Timo Sirainen <tss@iki.fi>
parents: 7288
diff changeset
45 { "ENABLE", cmd_enable, 0 },
7917
ca2ff54ee9b4 Added support for IMAP ID extension.
Timo Sirainen <tss@iki.fi>
parents: 7647
diff changeset
46 { "ID", cmd_id, 0 },
9136
ef7c0c3b1976 IMAP: Don't crash if IDLE command is pipelined after a long-running UID FETCH or UID SEARCH.
Timo Sirainen <tss@iki.fi>
parents: 8728
diff changeset
47 { "IDLE", cmd_idle, COMMAND_FLAG_BREAKS_SEQS |
ef7c0c3b1976 IMAP: Don't crash if IDLE command is pipelined after a long-running UID FETCH or UID SEARCH.
Timo Sirainen <tss@iki.fi>
parents: 8728
diff changeset
48 COMMAND_FLAG_REQUIRES_SYNC },
4941
f612d2086448 If running commands in parallel would cause ambiguity, run them
Timo Sirainen <tss@iki.fi>
parents: 4939
diff changeset
49 { "NAMESPACE", cmd_namespace, 0 },
f612d2086448 If running commands in parallel would cause ambiguity, run them
Timo Sirainen <tss@iki.fi>
parents: 4939
diff changeset
50 { "SORT", cmd_sort, COMMAND_FLAG_USES_SEQS },
f612d2086448 If running commands in parallel would cause ambiguity, run them
Timo Sirainen <tss@iki.fi>
parents: 4939
diff changeset
51 { "THREAD", cmd_thread, COMMAND_FLAG_USES_SEQS },
f612d2086448 If running commands in parallel would cause ambiguity, run them
Timo Sirainen <tss@iki.fi>
parents: 4939
diff changeset
52 { "UID EXPUNGE", cmd_uid_expunge, COMMAND_FLAG_BREAKS_SEQS },
f612d2086448 If running commands in parallel would cause ambiguity, run them
Timo Sirainen <tss@iki.fi>
parents: 4939
diff changeset
53 { "UID SORT", cmd_sort, COMMAND_FLAG_BREAKS_SEQS },
f612d2086448 If running commands in parallel would cause ambiguity, run them
Timo Sirainen <tss@iki.fi>
parents: 4939
diff changeset
54 { "UID THREAD", cmd_thread, COMMAND_FLAG_BREAKS_SEQS },
f612d2086448 If running commands in parallel would cause ambiguity, run them
Timo Sirainen <tss@iki.fi>
parents: 4939
diff changeset
55 { "UNSELECT", cmd_unselect, COMMAND_FLAG_BREAKS_MAILBOX },
f612d2086448 If running commands in parallel would cause ambiguity, run them
Timo Sirainen <tss@iki.fi>
parents: 4939
diff changeset
56 { "X-CANCEL", cmd_x_cancel, 0 }
1464
bd489d13479e Added command_register() and related functions so we can dynamically
Timo Sirainen <tss@iki.fi>
parents: 1172
diff changeset
57 };
6494
59490181469e Use N_ELEMENTS() macro instead of doing sizeof()/sizeof([0]) ourself.
Timo Sirainen <tss@iki.fi>
parents: 6429
diff changeset
58 #define IMAP_EXT_COMMANDS_COUNT N_ELEMENTS(imap_ext_commands)
1464
bd489d13479e Added command_register() and related functions so we can dynamically
Timo Sirainen <tss@iki.fi>
parents: 1172
diff changeset
59
8728
da19acbae79e imap: export imap_commands array containing all registered commands.
Timo Sirainen <tss@iki.fi>
parents: 8590
diff changeset
60 ARRAY_TYPE(command) imap_commands;
4629
0d24ee6b4ccd Use array_t in commands buffer.
Timo Sirainen <tss@iki.fi>
parents: 4451
diff changeset
61 static bool commands_unsorted;
1464
bd489d13479e Added command_register() and related functions so we can dynamically
Timo Sirainen <tss@iki.fi>
parents: 1172
diff changeset
62
5568
cce4074b7876 Added command flags parameter to command_register()
Timo Sirainen <tss@iki.fi>
parents: 4941
diff changeset
63 void command_register(const char *name, command_func_t *func,
cce4074b7876 Added command flags parameter to command_register()
Timo Sirainen <tss@iki.fi>
parents: 4941
diff changeset
64 enum command_flags flags)
1464
bd489d13479e Added command_register() and related functions so we can dynamically
Timo Sirainen <tss@iki.fi>
parents: 1172
diff changeset
65 {
1471
8f56379c3917 Renamed buffer_*_space() to buffer_*_space_unsafe() and added several
Timo Sirainen <tss@iki.fi>
parents: 1464
diff changeset
66 struct command cmd;
1021
81cbc1467097 Added support for UNSELECT extension with some cleanups for SELECT and CLOSE.
Timo Sirainen <tss@iki.fi>
parents: 953
diff changeset
67
5568
cce4074b7876 Added command flags parameter to command_register()
Timo Sirainen <tss@iki.fi>
parents: 4941
diff changeset
68 memset(&cmd, 0, sizeof(cmd));
1471
8f56379c3917 Renamed buffer_*_space() to buffer_*_space_unsafe() and added several
Timo Sirainen <tss@iki.fi>
parents: 1464
diff changeset
69 cmd.name = name;
8f56379c3917 Renamed buffer_*_space() to buffer_*_space_unsafe() and added several
Timo Sirainen <tss@iki.fi>
parents: 1464
diff changeset
70 cmd.func = func;
5568
cce4074b7876 Added command flags parameter to command_register()
Timo Sirainen <tss@iki.fi>
parents: 4941
diff changeset
71 cmd.flags = flags;
8728
da19acbae79e imap: export imap_commands array containing all registered commands.
Timo Sirainen <tss@iki.fi>
parents: 8590
diff changeset
72 array_append(&imap_commands, &cmd, 1);
1464
bd489d13479e Added command_register() and related functions so we can dynamically
Timo Sirainen <tss@iki.fi>
parents: 1172
diff changeset
73
4629
0d24ee6b4ccd Use array_t in commands buffer.
Timo Sirainen <tss@iki.fi>
parents: 4451
diff changeset
74 commands_unsorted = TRUE;
1464
bd489d13479e Added command_register() and related functions so we can dynamically
Timo Sirainen <tss@iki.fi>
parents: 1172
diff changeset
75 }
bd489d13479e Added command_register() and related functions so we can dynamically
Timo Sirainen <tss@iki.fi>
parents: 1172
diff changeset
76
bd489d13479e Added command_register() and related functions so we can dynamically
Timo Sirainen <tss@iki.fi>
parents: 1172
diff changeset
77 void command_unregister(const char *name)
bd489d13479e Added command_register() and related functions so we can dynamically
Timo Sirainen <tss@iki.fi>
parents: 1172
diff changeset
78 {
bd489d13479e Added command_register() and related functions so we can dynamically
Timo Sirainen <tss@iki.fi>
parents: 1172
diff changeset
79 const struct command *cmd;
4629
0d24ee6b4ccd Use array_t in commands buffer.
Timo Sirainen <tss@iki.fi>
parents: 4451
diff changeset
80 unsigned int i, count;
1464
bd489d13479e Added command_register() and related functions so we can dynamically
Timo Sirainen <tss@iki.fi>
parents: 1172
diff changeset
81
8728
da19acbae79e imap: export imap_commands array containing all registered commands.
Timo Sirainen <tss@iki.fi>
parents: 8590
diff changeset
82 cmd = array_get(&imap_commands, &count);
1464
bd489d13479e Added command_register() and related functions so we can dynamically
Timo Sirainen <tss@iki.fi>
parents: 1172
diff changeset
83 for (i = 0; i < count; i++) {
bd489d13479e Added command_register() and related functions so we can dynamically
Timo Sirainen <tss@iki.fi>
parents: 1172
diff changeset
84 if (strcasecmp(cmd[i].name, name) == 0) {
8728
da19acbae79e imap: export imap_commands array containing all registered commands.
Timo Sirainen <tss@iki.fi>
parents: 8590
diff changeset
85 array_delete(&imap_commands, i, 1);
1464
bd489d13479e Added command_register() and related functions so we can dynamically
Timo Sirainen <tss@iki.fi>
parents: 1172
diff changeset
86 return;
bd489d13479e Added command_register() and related functions so we can dynamically
Timo Sirainen <tss@iki.fi>
parents: 1172
diff changeset
87 }
0
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
88 }
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
89
1464
bd489d13479e Added command_register() and related functions so we can dynamically
Timo Sirainen <tss@iki.fi>
parents: 1172
diff changeset
90 i_error("Trying to unregister unknown command '%s'", name);
bd489d13479e Added command_register() and related functions so we can dynamically
Timo Sirainen <tss@iki.fi>
parents: 1172
diff changeset
91 }
bd489d13479e Added command_register() and related functions so we can dynamically
Timo Sirainen <tss@iki.fi>
parents: 1172
diff changeset
92
4629
0d24ee6b4ccd Use array_t in commands buffer.
Timo Sirainen <tss@iki.fi>
parents: 4451
diff changeset
93 void command_register_array(const struct command *cmdarr, unsigned int count)
1464
bd489d13479e Added command_register() and related functions so we can dynamically
Timo Sirainen <tss@iki.fi>
parents: 1172
diff changeset
94 {
4629
0d24ee6b4ccd Use array_t in commands buffer.
Timo Sirainen <tss@iki.fi>
parents: 4451
diff changeset
95 commands_unsorted = TRUE;
8728
da19acbae79e imap: export imap_commands array containing all registered commands.
Timo Sirainen <tss@iki.fi>
parents: 8590
diff changeset
96 array_append(&imap_commands, cmdarr, count);
1464
bd489d13479e Added command_register() and related functions so we can dynamically
Timo Sirainen <tss@iki.fi>
parents: 1172
diff changeset
97 }
bd489d13479e Added command_register() and related functions so we can dynamically
Timo Sirainen <tss@iki.fi>
parents: 1172
diff changeset
98
4629
0d24ee6b4ccd Use array_t in commands buffer.
Timo Sirainen <tss@iki.fi>
parents: 4451
diff changeset
99 void command_unregister_array(const struct command *cmdarr, unsigned int count)
1464
bd489d13479e Added command_register() and related functions so we can dynamically
Timo Sirainen <tss@iki.fi>
parents: 1172
diff changeset
100 {
bd489d13479e Added command_register() and related functions so we can dynamically
Timo Sirainen <tss@iki.fi>
parents: 1172
diff changeset
101 while (count > 0) {
4629
0d24ee6b4ccd Use array_t in commands buffer.
Timo Sirainen <tss@iki.fi>
parents: 4451
diff changeset
102 command_unregister(cmdarr->name);
0d24ee6b4ccd Use array_t in commands buffer.
Timo Sirainen <tss@iki.fi>
parents: 4451
diff changeset
103 count--; cmdarr++;
1464
bd489d13479e Added command_register() and related functions so we can dynamically
Timo Sirainen <tss@iki.fi>
parents: 1172
diff changeset
104 }
bd489d13479e Added command_register() and related functions so we can dynamically
Timo Sirainen <tss@iki.fi>
parents: 1172
diff changeset
105 }
bd489d13479e Added command_register() and related functions so we can dynamically
Timo Sirainen <tss@iki.fi>
parents: 1172
diff changeset
106
bd489d13479e Added command_register() and related functions so we can dynamically
Timo Sirainen <tss@iki.fi>
parents: 1172
diff changeset
107 static int command_cmp(const void *p1, const void *p2)
bd489d13479e Added command_register() and related functions so we can dynamically
Timo Sirainen <tss@iki.fi>
parents: 1172
diff changeset
108 {
bd489d13479e Added command_register() and related functions so we can dynamically
Timo Sirainen <tss@iki.fi>
parents: 1172
diff changeset
109 const struct command *c1 = p1, *c2 = p2;
bd489d13479e Added command_register() and related functions so we can dynamically
Timo Sirainen <tss@iki.fi>
parents: 1172
diff changeset
110
bd489d13479e Added command_register() and related functions so we can dynamically
Timo Sirainen <tss@iki.fi>
parents: 1172
diff changeset
111 return strcasecmp(c1->name, c2->name);
bd489d13479e Added command_register() and related functions so we can dynamically
Timo Sirainen <tss@iki.fi>
parents: 1172
diff changeset
112 }
bd489d13479e Added command_register() and related functions so we can dynamically
Timo Sirainen <tss@iki.fi>
parents: 1172
diff changeset
113
bd489d13479e Added command_register() and related functions so we can dynamically
Timo Sirainen <tss@iki.fi>
parents: 1172
diff changeset
114 static int command_bsearch(const void *name, const void *cmd_p)
bd489d13479e Added command_register() and related functions so we can dynamically
Timo Sirainen <tss@iki.fi>
parents: 1172
diff changeset
115 {
bd489d13479e Added command_register() and related functions so we can dynamically
Timo Sirainen <tss@iki.fi>
parents: 1172
diff changeset
116 const struct command *cmd = cmd_p;
bd489d13479e Added command_register() and related functions so we can dynamically
Timo Sirainen <tss@iki.fi>
parents: 1172
diff changeset
117
bd489d13479e Added command_register() and related functions so we can dynamically
Timo Sirainen <tss@iki.fi>
parents: 1172
diff changeset
118 return strcasecmp(name, cmd->name);
0
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
119 }
1464
bd489d13479e Added command_register() and related functions so we can dynamically
Timo Sirainen <tss@iki.fi>
parents: 1172
diff changeset
120
4941
f612d2086448 If running commands in parallel would cause ambiguity, run them
Timo Sirainen <tss@iki.fi>
parents: 4939
diff changeset
121 struct command *command_find(const char *name)
1464
bd489d13479e Added command_register() and related functions so we can dynamically
Timo Sirainen <tss@iki.fi>
parents: 1172
diff changeset
122 {
bd489d13479e Added command_register() and related functions so we can dynamically
Timo Sirainen <tss@iki.fi>
parents: 1172
diff changeset
123 void *base;
4629
0d24ee6b4ccd Use array_t in commands buffer.
Timo Sirainen <tss@iki.fi>
parents: 4451
diff changeset
124 unsigned int count;
1464
bd489d13479e Added command_register() and related functions so we can dynamically
Timo Sirainen <tss@iki.fi>
parents: 1172
diff changeset
125
8728
da19acbae79e imap: export imap_commands array containing all registered commands.
Timo Sirainen <tss@iki.fi>
parents: 8590
diff changeset
126 base = array_get_modifiable(&imap_commands, &count);
4629
0d24ee6b4ccd Use array_t in commands buffer.
Timo Sirainen <tss@iki.fi>
parents: 4451
diff changeset
127 if (commands_unsorted) {
0d24ee6b4ccd Use array_t in commands buffer.
Timo Sirainen <tss@iki.fi>
parents: 4451
diff changeset
128 qsort(base, count, sizeof(struct command), command_cmp);
0d24ee6b4ccd Use array_t in commands buffer.
Timo Sirainen <tss@iki.fi>
parents: 4451
diff changeset
129 commands_unsorted = FALSE;
1464
bd489d13479e Added command_register() and related functions so we can dynamically
Timo Sirainen <tss@iki.fi>
parents: 1172
diff changeset
130 }
bd489d13479e Added command_register() and related functions so we can dynamically
Timo Sirainen <tss@iki.fi>
parents: 1172
diff changeset
131
4941
f612d2086448 If running commands in parallel would cause ambiguity, run them
Timo Sirainen <tss@iki.fi>
parents: 4939
diff changeset
132 return bsearch(name, base, count, sizeof(struct command),
f612d2086448 If running commands in parallel would cause ambiguity, run them
Timo Sirainen <tss@iki.fi>
parents: 4939
diff changeset
133 command_bsearch);
1464
bd489d13479e Added command_register() and related functions so we can dynamically
Timo Sirainen <tss@iki.fi>
parents: 1172
diff changeset
134 }
bd489d13479e Added command_register() and related functions so we can dynamically
Timo Sirainen <tss@iki.fi>
parents: 1172
diff changeset
135
bd489d13479e Added command_register() and related functions so we can dynamically
Timo Sirainen <tss@iki.fi>
parents: 1172
diff changeset
136 void commands_init(void)
bd489d13479e Added command_register() and related functions so we can dynamically
Timo Sirainen <tss@iki.fi>
parents: 1172
diff changeset
137 {
8728
da19acbae79e imap: export imap_commands array containing all registered commands.
Timo Sirainen <tss@iki.fi>
parents: 8590
diff changeset
138 i_array_init(&imap_commands, 64);
4629
0d24ee6b4ccd Use array_t in commands buffer.
Timo Sirainen <tss@iki.fi>
parents: 4451
diff changeset
139 commands_unsorted = FALSE;
1464
bd489d13479e Added command_register() and related functions so we can dynamically
Timo Sirainen <tss@iki.fi>
parents: 1172
diff changeset
140
bd489d13479e Added command_register() and related functions so we can dynamically
Timo Sirainen <tss@iki.fi>
parents: 1172
diff changeset
141 command_register_array(imap4rev1_commands, IMAP4REV1_COMMANDS_COUNT);
bd489d13479e Added command_register() and related functions so we can dynamically
Timo Sirainen <tss@iki.fi>
parents: 1172
diff changeset
142 command_register_array(imap_ext_commands, IMAP_EXT_COMMANDS_COUNT);
bd489d13479e Added command_register() and related functions so we can dynamically
Timo Sirainen <tss@iki.fi>
parents: 1172
diff changeset
143 }
bd489d13479e Added command_register() and related functions so we can dynamically
Timo Sirainen <tss@iki.fi>
parents: 1172
diff changeset
144
bd489d13479e Added command_register() and related functions so we can dynamically
Timo Sirainen <tss@iki.fi>
parents: 1172
diff changeset
145 void commands_deinit(void)
bd489d13479e Added command_register() and related functions so we can dynamically
Timo Sirainen <tss@iki.fi>
parents: 1172
diff changeset
146 {
bd489d13479e Added command_register() and related functions so we can dynamically
Timo Sirainen <tss@iki.fi>
parents: 1172
diff changeset
147 command_unregister_array(imap4rev1_commands, IMAP4REV1_COMMANDS_COUNT);
bd489d13479e Added command_register() and related functions so we can dynamically
Timo Sirainen <tss@iki.fi>
parents: 1172
diff changeset
148 command_unregister_array(imap_ext_commands, IMAP_EXT_COMMANDS_COUNT);
8728
da19acbae79e imap: export imap_commands array containing all registered commands.
Timo Sirainen <tss@iki.fi>
parents: 8590
diff changeset
149 array_free(&imap_commands);
1464
bd489d13479e Added command_register() and related functions so we can dynamically
Timo Sirainen <tss@iki.fi>
parents: 1172
diff changeset
150 }