Mercurial > dovecot > original-hg > dovecot-1.2
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 |
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 | 2 |
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 | 6 #include "commands.h" |
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 | 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 | 88 } |
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 | 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 } |