* mu-cmd-server.c: fix error handling
This commit is contained in:
@ -79,9 +79,7 @@ install_sig_handler (void)
|
|||||||
/* BOX - beginning-of-expression */
|
/* BOX - beginning-of-expression */
|
||||||
#define BOX "\376"
|
#define BOX "\376"
|
||||||
|
|
||||||
static void send_expr (const char* frm, ...) G_GNUC_PRINTF(1, 2);
|
static void G_GNUC_PRINTF(1, 2)
|
||||||
|
|
||||||
static void
|
|
||||||
send_expr (const char* frm, ...)
|
send_expr (const char* frm, ...)
|
||||||
{
|
{
|
||||||
char *expr;
|
char *expr;
|
||||||
@ -89,10 +87,12 @@ send_expr (const char* frm, ...)
|
|||||||
char hdr[16];
|
char hdr[16];
|
||||||
size_t exprlen, hdrlen;
|
size_t exprlen, hdrlen;
|
||||||
|
|
||||||
va_start (ap, frm);
|
|
||||||
|
|
||||||
expr = NULL;
|
expr = NULL;
|
||||||
|
|
||||||
|
va_start (ap, frm);
|
||||||
exprlen = g_vasprintf (&expr, frm, ap);
|
exprlen = g_vasprintf (&expr, frm, ap);
|
||||||
|
va_end (ap);
|
||||||
|
|
||||||
hdrlen = snprintf (hdr, sizeof(hdr), BOX "%u" BOX,
|
hdrlen = snprintf (hdr, sizeof(hdr), BOX "%u" BOX,
|
||||||
(unsigned)exprlen);
|
(unsigned)exprlen);
|
||||||
|
|
||||||
@ -103,14 +103,11 @@ send_expr (const char* frm, ...)
|
|||||||
MU_WRITE_LOG ("error writing output: %s", strerror(errno));
|
MU_WRITE_LOG ("error writing output: %s", strerror(errno));
|
||||||
|
|
||||||
g_free (expr);
|
g_free (expr);
|
||||||
va_end (ap);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static MuError server_error (GError **err, MuError merr, const char* frm, ...)
|
static MuError G_GNUC_PRINTF(3, 4)
|
||||||
G_GNUC_PRINTF(3, 4);
|
|
||||||
|
|
||||||
static MuError
|
|
||||||
server_error (GError **err, MuError merr, const char* frm, ...)
|
server_error (GError **err, MuError merr, const char* frm, ...)
|
||||||
{
|
{
|
||||||
gboolean has_err;
|
gboolean has_err;
|
||||||
@ -119,6 +116,7 @@ server_error (GError **err, MuError merr, const char* frm, ...)
|
|||||||
|
|
||||||
va_start (ap, frm);
|
va_start (ap, frm);
|
||||||
errmsg = g_strdup_vprintf (frm, ap);
|
errmsg = g_strdup_vprintf (frm, ap);
|
||||||
|
va_end (ap);
|
||||||
|
|
||||||
has_err = err && *err;
|
has_err = err && *err;
|
||||||
send_expr ("(:error %u :error-message \"%s\")\n",
|
send_expr ("(:error %u :error-message \"%s\")\n",
|
||||||
@ -126,7 +124,6 @@ server_error (GError **err, MuError merr, const char* frm, ...)
|
|||||||
has_err ? (*err)->message : errmsg);
|
has_err ? (*err)->message : errmsg);
|
||||||
|
|
||||||
g_free (errmsg);
|
g_free (errmsg);
|
||||||
va_end (ap);
|
|
||||||
|
|
||||||
return has_err ? (unsigned)(*err)->code : merr;
|
return has_err ? (unsigned)(*err)->code : merr;
|
||||||
}
|
}
|
||||||
@ -1014,11 +1011,16 @@ mu_cmd_server (MuStore *store, MuConfig *opts, GError **err)
|
|||||||
GError *my_err;
|
GError *my_err;
|
||||||
|
|
||||||
line = my_readline (MU_PROMPT);
|
line = my_readline (MU_PROMPT);
|
||||||
|
args = NULL;
|
||||||
cmd = parse_line (line, &args, err);
|
cmd = parse_line (line, &args, err);
|
||||||
g_free (line);
|
g_free (line);
|
||||||
|
|
||||||
if (cmd == CMD_INVALID)
|
if (cmd == CMD_INVALID) {
|
||||||
|
g_set_error (err, MU_ERROR_DOMAIN, MU_ERROR_IN_PARAMETERS,
|
||||||
|
"invalid command");
|
||||||
|
mu_str_free_list (args);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
my_err = NULL;
|
my_err = NULL;
|
||||||
if (!handle_command (cmd, store, query, args, &my_err))
|
if (!handle_command (cmd, store, query, args, &my_err))
|
||||||
|
|||||||
Reference in New Issue
Block a user