From 48cf82f823a51813240d13515524c0d978269dae Mon Sep 17 00:00:00 2001 From: "Dirk-Jan C. Binnema" Date: Wed, 10 Aug 2011 23:57:34 +0300 Subject: [PATCH] * mu-cmd.c, mu-config.c: enable 'mu add' and 'mu remove' and fix line33 check --- src/mu-cmd.c | 128 ++++++++++++++++++++++++++++++------------------ src/mu-config.c | 5 ++ 2 files changed, 85 insertions(+), 48 deletions(-) diff --git a/src/mu-cmd.c b/src/mu-cmd.c index ae93ba18..2a388c7f 100644 --- a/src/mu-cmd.c +++ b/src/mu-cmd.c @@ -305,6 +305,22 @@ mv_check_params (MuConfig *opts, MuMsgFlags *flags) } +static MuExitCode +cmd_mv_dev_null (MuConfig *opts) +{ + if (unlink (opts->params[1]) != 0) { + g_warning ("unlink failed: %s", strerror (errno)); + return MU_EXITCODE_ERROR; + } + + if (opts->printtarget) + g_print ("%s\n", "/dev/null"); /* /dev/null */ + + return MU_EXITCODE_OK; +} + + + MuExitCode mu_cmd_mv (MuConfig *opts) { @@ -316,17 +332,8 @@ mu_cmd_mv (MuConfig *opts) return MU_EXITCODE_ERROR; /* special case: /dev/null */ - if (g_strcmp0 (opts->params[2], "/dev/null") == 0) { - if (unlink (opts->params[1]) != 0) { - g_warning ("unlink failed: %s", strerror (errno)); - return MU_EXITCODE_ERROR; - } else { - if (opts->printtarget) - /* if the move worked, print */ - g_print ("%s\n", "/dev/null"); /* /dev/null */ - return MU_EXITCODE_OK; - } - } + if (g_strcmp0 (opts->params[2], "/dev/null") == 0) + return cmd_mv_dev_null (opts); err = NULL; fullpath = mu_msg_file_move_to_maildir (opts->params[1], opts->params[2], @@ -368,14 +375,12 @@ check_file_okay (const char *path, gboolean cmd_add) } -static gboolean -add_or_remove (MuConfig *opts, gboolean cmd_add) +static MuStore* +get_store (void) { MuStore *store; GError *err; - gboolean allok; - int i; - + err = NULL; store = mu_store_new (mu_runtime_path(MU_RUNTIME_PATH_XAPIANDB), mu_runtime_path(MU_RUNTIME_PATH_CONTACTS), @@ -386,38 +391,10 @@ add_or_remove (MuConfig *opts, gboolean cmd_add) g_error_free (err); } else g_warning ("failed to create store object"); - - return MU_EXITCODE_ERROR; } - - for (i = 1, allok = TRUE; opts->params[i]; ++i) { - - const char* src; - - src = opts->params[i]; - - if (!check_file_okay (src, cmd_add)) { - allok = FALSE; - continue; - } - - if (cmd_add) { - if (!mu_store_store_path (store, src)) { - allok = FALSE; - g_warning ("failed to store %s", src); - } - } else { /* remove */ - if (!mu_store_remove_path (store, src)) { - allok = FALSE; - g_warning ("failed to remove %s", src); - } - } - } + return store; - mu_store_destroy (store); - - return allok ? MU_EXITCODE_OK : MU_EXITCODE_DB_UPDATE_ERROR; } @@ -425,6 +402,10 @@ add_or_remove (MuConfig *opts, gboolean cmd_add) MuExitCode mu_cmd_add (MuConfig *opts) { + MuStore *store; + gboolean allok; + int i; + g_return_val_if_fail (opts, MU_EXITCODE_ERROR); g_return_val_if_fail (opts->cmd == MU_CONFIG_CMD_ADD, MU_EXITCODE_ERROR); @@ -435,13 +416,39 @@ mu_cmd_add (MuConfig *opts) return MU_EXITCODE_ERROR; } - return add_or_remove (opts, TRUE); + store = get_store (); + if (!store) + return MU_EXITCODE_ERROR; + + for (i = 1, allok = TRUE; opts->params[i]; ++i) { + + const char* src; + src = opts->params[i]; + + if (!check_file_okay (src, TRUE)) { + allok = FALSE; + continue; + } + + if (!mu_store_store_path (store, src)) { + allok = FALSE; + g_warning ("failed to store %s", src); + } + } + + mu_store_destroy (store); + + return allok ? MU_EXITCODE_OK : MU_EXITCODE_ERROR; } MuExitCode mu_cmd_remove (MuConfig *opts) -{ +{ + MuStore *store; + gboolean allok; + int i; + g_return_val_if_fail (opts, MU_EXITCODE_ERROR); g_return_val_if_fail (opts->cmd == MU_CONFIG_CMD_REMOVE, MU_EXITCODE_ERROR); @@ -452,6 +459,31 @@ mu_cmd_remove (MuConfig *opts) return MU_EXITCODE_ERROR; } - return add_or_remove (opts, TRUE); + store = get_store (); + if (!store) + return MU_EXITCODE_ERROR; + + for (i = 1, allok = TRUE; opts->params[i]; ++i) { + + const char* src; + src = opts->params[i]; + + if (!check_file_okay (src, FALSE)) { + allok = FALSE; + continue; + } + + if (!mu_store_remove_path (store, src)) { + allok = FALSE; + g_warning ("failed to remove %s", src); + } + } + + mu_store_destroy (store); + + return allok ? MU_EXITCODE_OK : MU_EXITCODE_ERROR; } + + + diff --git a/src/mu-config.c b/src/mu-config.c index ad46a081..f50df734 100644 --- a/src/mu-config.c +++ b/src/mu-config.c @@ -386,6 +386,8 @@ parse_cmd (MuConfig *opts, int *argcp, char ***argvp) { "mkdir", MU_CONFIG_CMD_MKDIR }, { "mv", MU_CONFIG_CMD_MV }, { "view", MU_CONFIG_CMD_VIEW }, + { "add", MU_CONFIG_CMD_ADD }, + { "remove", MU_CONFIG_CMD_REMOVE }, }; opts->cmd = MU_CONFIG_CMD_NONE; @@ -562,6 +564,9 @@ mu_config_execute (MuConfig *opts) case MU_CONFIG_CMD_MKDIR: return mu_cmd_mkdir (opts); case MU_CONFIG_CMD_MV: return mu_cmd_mv (opts); case MU_CONFIG_CMD_VIEW: return mu_cmd_view (opts); + case MU_CONFIG_CMD_ADD: return mu_cmd_add (opts); + case MU_CONFIG_CMD_REMOVE: return mu_cmd_remove (opts); + case MU_CONFIG_CMD_UNKNOWN: g_printerr ("mu: unknown command '%s'\n\n", opts->cmdstr); show_usage (FALSE);