]> git.sur5r.net Git - i3/i3/commitdiff
parser: return a proper JSON reply on parse errors
authorMichael Stapelberg <michael@stapelberg.de>
Sun, 14 Nov 2010 00:45:05 +0000 (01:45 +0100)
committerMichael Stapelberg <michael@stapelberg.de>
Sun, 14 Nov 2010 00:45:05 +0000 (01:45 +0100)
include/config.h
src/cmdparse.y

index a435cb5b1a2e71f49c2d6f108f40da9974590ca5..ab2dac878b4d973388ed1c77715ce28dca981777 100644 (file)
@@ -35,6 +35,8 @@ struct context {
         char *line_copy;
         const char *filename;
 
+        const char *compact_error;
+
         /* These are the same as in YYLTYPE */
         int first_column;
         int last_column;
index d79698e49c6f89b50bd6bd21f0987bcfdbb537ef..e5c9aa5c9180783d775d3268e2506901feaddd1c 100644 (file)
@@ -58,6 +58,7 @@ void cmdyyerror(const char *error_message) {
         else printf(" ");
     printf("\n");
     ELOG("\n");
+    context->compact_error = sstrdup(error_message);
 }
 
 int cmdyywrap() {
@@ -73,13 +74,17 @@ char *parse_cmd(const char *new) {
     FREE(json_output);
     if (cmdyyparse() != 0) {
         fprintf(stderr, "Could not parse command\n");
+        asprintf(&json_output, "{\"success\":false, \"error\":\"%s at position %d\"}",
+                 context->compact_error, context->first_column);
         FREE(context->line_copy);
+        FREE(context->compact_error);
         free(context);
-        return;
+        return json_output;
     }
     printf("done, json output = %s\n", json_output);
 
     FREE(context->line_copy);
+    FREE(context->compact_error);
     free(context);
     return json_output;
 }