Browse Source

json_script: add support for aborting script processing

Signed-off-by: Felix Fietkau <nbd@openwrt.org>
Felix Fietkau 8 years ago
parent
commit
3d45c47752
2 changed files with 18 additions and 0 deletions
  1. 5 0
      json_script.c
  2. 13 0
      json_script.h

+ 5 - 0
json_script.c

@@ -541,6 +541,9 @@ static int json_process_cmd(struct json_call *call, struct blob_attr *block)
 	}
 
 	blobmsg_for_each_attr(cur, block, rem) {
+		if (ctx->abort)
+			break;
+
 		switch(blobmsg_type(cur)) {
 		case BLOBMSG_TYPE_STRING:
 			if (!i)
@@ -571,6 +574,8 @@ void json_script_run_file(struct json_script_ctx *ctx, struct json_script_file *
 	if (!call.seq)
 		call.seq = ++_seq;
 
+	ctx->abort = false;
+
 	__json_script_run(&call, file, NULL);
 }
 

+ 13 - 0
json_script.h

@@ -28,6 +28,7 @@ struct json_script_ctx {
 	struct blob_buf buf;
 
 	uint32_t run_seq;
+	bool abort;
 
 	/*
 	 * handle_command: handle a command that was not recognized by the
@@ -99,6 +100,18 @@ void json_script_run(struct json_script_ctx *ctx, const char *filename,
 
 void json_script_run_file(struct json_script_ctx *ctx, struct json_script_file *file,
 			  struct blob_attr *vars);
+
+/*
+ * json_script_abort - abort current json script run
+ *
+ * to be called from a script context callback
+ */
+static inline void
+json_script_abort(struct json_script_ctx *ctx)
+{
+	ctx->abort = true;
+}
+
 /*
  * json_script_eval_string - evaluate a string and store the result
  *