diff options
author | Tianjie Xu <xunchang@google.com> | 2016-04-30 20:49:59 +0200 |
---|---|---|
committer | Tianjie Xu <xunchang@google.com> | 2016-05-20 22:56:53 +0200 |
commit | 162558382b768a4120b3e41090a4c7b53f11469a (patch) | |
tree | 7e0d268233fc6bea07a361cf6913fc3a5e524063 /edify/expr.cpp | |
parent | Add time and I/O info to last_install (diff) | |
download | android_bootable_recovery-162558382b768a4120b3e41090a4c7b53f11469a.tar android_bootable_recovery-162558382b768a4120b3e41090a4c7b53f11469a.tar.gz android_bootable_recovery-162558382b768a4120b3e41090a4c7b53f11469a.tar.bz2 android_bootable_recovery-162558382b768a4120b3e41090a4c7b53f11469a.tar.lz android_bootable_recovery-162558382b768a4120b3e41090a4c7b53f11469a.tar.xz android_bootable_recovery-162558382b768a4120b3e41090a4c7b53f11469a.tar.zst android_bootable_recovery-162558382b768a4120b3e41090a4c7b53f11469a.zip |
Diffstat (limited to '')
-rw-r--r-- | edify/expr.cpp | 39 |
1 files changed, 29 insertions, 10 deletions
diff --git a/edify/expr.cpp b/edify/expr.cpp index cd1e08726..cc14fbe93 100644 --- a/edify/expr.cpp +++ b/edify/expr.cpp @@ -21,6 +21,11 @@ #include <stdarg.h> #include <unistd.h> +#include <string> + +#include <android-base/stringprintf.h> +#include <android-base/strings.h> + #include "expr.h" // Functions should: @@ -36,7 +41,7 @@ char* Evaluate(State* state, Expr* expr) { Value* v = expr->fn(expr->name, state, expr->argc, expr->argv); if (v == NULL) return NULL; if (v->type != VAL_STRING) { - ErrorAbort(state, "expecting string, got value type %d", v->type); + ErrorAbort(state, kArgsParsingFailure, "expecting string, got value type %d", v->type); FreeValue(v); return NULL; } @@ -493,15 +498,29 @@ Value** ReadValueVarArgs(State* state, int argc, Expr* argv[]) { return args; } +static void ErrorAbortV(State* state, const char* format, va_list ap) { + std::string buffer; + android::base::StringAppendV(&buffer, format, ap); + free(state->errmsg); + state->errmsg = strdup(buffer.c_str()); + return; +} + // Use printf-style arguments to compose an error message to put into -// *state. Returns NULL. +// *state. Returns nullptr. Value* ErrorAbort(State* state, const char* format, ...) { - char* buffer = reinterpret_cast<char*>(malloc(4096)); - va_list v; - va_start(v, format); - vsnprintf(buffer, 4096, format, v); - va_end(v); - free(state->errmsg); - state->errmsg = buffer; - return NULL; + va_list ap; + va_start(ap, format); + ErrorAbortV(state, format, ap); + va_end(ap); + return nullptr; +} + +Value* ErrorAbort(State* state, CauseCode cause_code, const char* format, ...) { + va_list ap; + va_start(ap, format); + ErrorAbortV(state, format, ap); + va_end(ap); + state->cause_code = cause_code; + return nullptr; } |