| OLD | NEW |
| (Empty) |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | |
| 2 // Use of this source code is governed by a BSD-style license that can be | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 #include <stdarg.h> | |
| 6 #include <stdio.h> | |
| 7 #include <string.h> | |
| 8 | |
| 9 #include <android/log.h> | |
| 10 #include <cutils/properties.h> | |
| 11 #include <hardware/hardware.h> | |
| 12 | |
| 13 #define LOG_BUF_SIZE 1024 | |
| 14 | |
| 15 static int default_log_fn(int prio, const char* tag, const char* msg); | |
| 16 | |
| 17 static hwcplus_log_fn_t hwcplus_log_fn = default_log_fn; | |
| 18 | |
| 19 void hwcplus_set_log_fn(hwcplus_log_fn_t fn) { | |
| 20 hwcplus_log_fn = fn; | |
| 21 } | |
| 22 | |
| 23 #ifndef HAVE_STRLCPY | |
| 24 size_t strlcpy(char* dst, const char* src, size_t siz) { | |
| 25 char* d = dst; | |
| 26 const char* s = src; | |
| 27 size_t n = siz; | |
| 28 | |
| 29 /* Copy as many bytes as will fit */ | |
| 30 if (n != 0) { | |
| 31 while (--n != 0) { | |
| 32 if ((*d++ = *s++) == '\0') | |
| 33 break; | |
| 34 } | |
| 35 } | |
| 36 | |
| 37 /* Not enough room in dst, add NUL and traverse rest of src */ | |
| 38 if (n == 0) { | |
| 39 if (siz != 0) | |
| 40 *d = '\0'; /* NUL-terminate dst */ | |
| 41 while (*s++) { | |
| 42 } | |
| 43 } | |
| 44 | |
| 45 return(s - src - 1); /* count does not include NUL */ | |
| 46 } | |
| 47 #endif | |
| 48 | |
| 49 static int default_log_fn(int prio, const char* tag, const char* msg) { | |
| 50 fprintf(stderr, "<%d> %s %s\n", prio, tag, msg); | |
| 51 } | |
| 52 | |
| 53 int __android_log_write(int prio, const char* tag, const char* msg) { | |
| 54 hwcplus_log_fn(prio, tag, msg); | |
| 55 } | |
| 56 | |
| 57 int __android_log_print(int prio, const char* tag, const char* fmt, ...) { | |
| 58 va_list ap; | |
| 59 char buf[LOG_BUF_SIZE]; | |
| 60 | |
| 61 va_start(ap, fmt); | |
| 62 vsnprintf(buf, LOG_BUF_SIZE, fmt, ap); | |
| 63 va_end(ap); | |
| 64 | |
| 65 return __android_log_write(prio, tag, buf); | |
| 66 } | |
| 67 | |
| 68 void __android_log_assert(const char* cond, | |
| 69 const char* tag, | |
| 70 const char* fmt, | |
| 71 ...) { | |
| 72 char buf[LOG_BUF_SIZE]; | |
| 73 | |
| 74 if (fmt) { | |
| 75 va_list ap; | |
| 76 va_start(ap, fmt); | |
| 77 vsnprintf(buf, LOG_BUF_SIZE, fmt, ap); | |
| 78 va_end(ap); | |
| 79 } else { | |
| 80 /* Msg not provided, log condition. N.B. Do not use cond directly as | |
| 81 * format string as it could contain spurious '%' syntax (e.g. | |
| 82 * "%d" in "blocks%devs == 0"). | |
| 83 */ | |
| 84 if (cond) | |
| 85 snprintf(buf, LOG_BUF_SIZE, "Assertion failed: %s", cond); | |
| 86 else | |
| 87 snprintf(buf, LOG_BUF_SIZE, "Unspecified assertion failed"); | |
| 88 } | |
| 89 | |
| 90 __android_log_write(ANDROID_LOG_FATAL, tag, buf); | |
| 91 | |
| 92 __builtin_trap(); /* trap so we have a chance to debug the situation */ | |
| 93 } | |
| 94 | |
| 95 int property_get(const char* key, char* value, const char* default_value) { | |
| 96 printf("property_get %s\n", key); | |
| 97 const char* r = default_value; | |
| 98 if (!r) | |
| 99 r = ""; | |
| 100 strncpy(value, r, PROPERTY_VALUE_MAX); | |
| 101 return strlen(r); | |
| 102 } | |
| OLD | NEW |