return FALSE;
}
-struct client *client_create(int hin, int hout, struct mailbox *mailbox)
+struct client *client_create(int hin, int hout, struct mail_storage *storage)
{
struct client *client;
client->io = io_add(hin, IO_READ, client_input, client);
client->last_input = ioloop_time;
+ client->storage = storage;
- client->storage = mailbox->storage;
- client->mailbox = mailbox;
+ storage->set_callbacks(storage, &mail_storage_callbacks, client);
- mailbox->storage->set_callbacks(mailbox->storage,
- &mail_storage_callbacks, client);
-
- i_assert(my_client == NULL);
- my_client = client;
+ client->mailbox = storage->open_mailbox(storage, "INBOX", FALSE, FALSE);
+ if (client->mailbox == NULL) {
+ client_send_line(client, "-ERR No INBOX for user.");
+ return NULL;
+ }
if (!init_mailbox(client)) {
client_destroy(client);
- client = NULL;
+ return NULL;
}
+ i_assert(my_client == NULL);
+ my_client = client;
+
return client;
}
/* Create new client with specified input/output handles. socket specifies
if the handle is a socket. */
-struct client *client_create(int hin, int hout, struct mailbox *mailbox);
+struct client *client_create(int hin, int hout, struct mail_storage *storage);
void client_destroy(struct client *client);
/* Disconnect client connection */
restrict_access_by_env(!IS_STANDALONE());
}
-static void main_init(void)
+static int main_init(void)
{
struct client *client;
struct mail_storage *storage;
- struct mailbox *mailbox;
const char *mail;
lib_init_signals(sig_quit);
}
}
- mailbox = storage->open_mailbox(storage, "INBOX", FALSE, FALSE);
- if (mailbox == NULL)
- i_fatal("No INBOX for user");
-
- client = client_create(0, 1, mailbox);
+ client = client_create(0, 1, storage);
+ return client != NULL;
}
static void main_deinit(void)
process_title_init(argv, envp);
ioloop = io_loop_create(system_pool);
- main_init();
- io_loop_run(ioloop);
+ if (main_init())
+ io_loop_run(ioloop);
main_deinit();
io_loop_destroy(ioloop);