/* Copyright (c) 2010 The Chromium OS Authors. All rights reserved. * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. * * Stub implementations of utility functions which call their linux-specific * equivalents. */ #include "utility.h" #include #include #include void error(const char *format, ...) { va_list ap; va_start(ap, format); fprintf(stderr, "ERROR: "); vfprintf(stderr, format, ap); va_end(ap); exit(1); } void debug(const char *format, ...) { va_list ap; va_start(ap, format); fprintf(stderr, "WARNING: "); vfprintf(stderr, format, ap); va_end(ap); } void* Malloc(size_t size) { void* p = malloc(size); if (!p) { /* Fatal Error. We must abort. */ abort(); } return p; } void Free(void* ptr) { free(ptr); } int Memcmp(const void* src1, const void* src2, size_t n) { return memcmp(src1, src2, n); } void* Memcpy(void* dest, const void* src, size_t n) { return memcpy(dest, src, n); } void* Memset(void* dest, const uint8_t c, size_t n) { while (n--) { *((uint8_t*)dest++) = c; } return dest; } int SafeMemcmp(const void* s1, const void* s2, size_t n) { int match = 0; const unsigned char* us1 = s1; const unsigned char* us2 = s2; while (n--) { if (*us1++ != *us2++) match = 1; } return match; } void* StatefulMemcpy(MemcpyState* state, void* dst, uint64_t len) { if (state->overrun) return NULL; if (len > state->remaining_len) { state->overrun = 1; return NULL; } Memcpy(dst, state->remaining_buf, len); state->remaining_buf += len; state->remaining_len -= len; return dst; } const void* StatefulMemcpy_r(MemcpyState* state, const void* src, uint64_t len) { if (state->overrun) return NULL; if (len > state->remaining_len) { state->overrun = 1; return NULL; } Memcpy(state->remaining_buf, src, len); state->remaining_buf += len; state->remaining_len -= len; return src; }