+ ret = json_process_expr(call, tb[1]);
+ if (ret < 0)
+ return ret;
+ return !ret;
+}
+
+static int handle_expr_isdir(struct json_call *call, struct blob_attr *expr)
+{
+ static struct blob_buf b;
+ struct blob_attr *tb[3];
+ const char *pattern, *path;
+ struct stat s;
+ int ret;
+
+ json_get_tuple(expr, tb, BLOBMSG_TYPE_STRING, 0);
+ if (!tb[1] || blobmsg_type(tb[1]) != BLOBMSG_TYPE_STRING)
+ return -1;
+ pattern = blobmsg_data(tb[1]);
+
+ blob_buf_init(&b, 0);
+ ret = eval_string(call, &b, NULL, pattern);
+ if (ret < 0)
+ return ret;
+ path = blobmsg_data(blob_data(b.head));
+ ret = stat(path, &s);
+ if (ret < 0)
+ return 0;
+ return S_ISDIR(s.st_mode);