+static bool builtin_test_op_file(struct grub2_script *script, char op,
+ const char *file)
+{
+ bool result;
+ int len, rc;
+ char *buf;
+
+ rc = parser_request_file(script->ctx, script->ctx->device,
+ file, &buf, &len);
+ if (rc)
+ return false;
+
+ switch (op) {
+ case 's':
+ /* -s: return true if file exists and has non-zero size */
+ result = len > 0;
+ break;
+ case 'f':
+ /* -f: return true if file exists */
+ result = true;
+ break;
+ default:
+ result = false;
+
+ }
+
+ talloc_free(buf);
+ return result;
+}
+
+static bool builtin_test_op_dir(struct grub2_script *script, char op,
+ const char *dir)
+{
+ if (op != 'd')
+ return false;
+
+ return parser_check_dir(script->ctx, script->ctx->device, dir) == 0;
+}
+
+static bool builtin_test_op(struct grub2_script *script,
+ int argc, char **argv, int *consumed)