1*0d6140beSAndroid Build Coastguard Worker /*
2*0d6140beSAndroid Build Coastguard Worker * This file is part of the flashrom project.
3*0d6140beSAndroid Build Coastguard Worker *
4*0d6140beSAndroid Build Coastguard Worker * Copyright (C) 2022 The Chromium OS Authors
5*0d6140beSAndroid Build Coastguard Worker *
6*0d6140beSAndroid Build Coastguard Worker * This program is free software; you can redistribute it and/or modify
7*0d6140beSAndroid Build Coastguard Worker * it under the terms of the GNU General Public License as published by
8*0d6140beSAndroid Build Coastguard Worker * the Free Software Foundation; either version 2 of the License, or
9*0d6140beSAndroid Build Coastguard Worker * (at your option) any later version.
10*0d6140beSAndroid Build Coastguard Worker *
11*0d6140beSAndroid Build Coastguard Worker * This program is distributed in the hope that it will be useful,
12*0d6140beSAndroid Build Coastguard Worker * but WITHOUT ANY WARRANTY; without even the implied warranty of
13*0d6140beSAndroid Build Coastguard Worker * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14*0d6140beSAndroid Build Coastguard Worker * GNU General Public License for more details.
15*0d6140beSAndroid Build Coastguard Worker */
16*0d6140beSAndroid Build Coastguard Worker
17*0d6140beSAndroid Build Coastguard Worker #include <stdarg.h>
18*0d6140beSAndroid Build Coastguard Worker #include <stdlib.h>
19*0d6140beSAndroid Build Coastguard Worker #include <stdio.h>
20*0d6140beSAndroid Build Coastguard Worker
21*0d6140beSAndroid Build Coastguard Worker #include "libflashrom.h"
22*0d6140beSAndroid Build Coastguard Worker
23*0d6140beSAndroid Build Coastguard Worker void log_rust(enum flashrom_log_level level, const char *format);
24*0d6140beSAndroid Build Coastguard Worker
25*0d6140beSAndroid Build Coastguard Worker // LOG_LEVEL = 0 (ERROR) means no messages are printed.
26*0d6140beSAndroid Build Coastguard Worker enum flashrom_log_level current_level = 0;
27*0d6140beSAndroid Build Coastguard Worker
log_c(enum flashrom_log_level level,const char * format,va_list ap)28*0d6140beSAndroid Build Coastguard Worker static int log_c(enum flashrom_log_level level, const char *format, va_list ap)
29*0d6140beSAndroid Build Coastguard Worker {
30*0d6140beSAndroid Build Coastguard Worker static char *buf = NULL;
31*0d6140beSAndroid Build Coastguard Worker static int len = 0;
32*0d6140beSAndroid Build Coastguard Worker if (level >= current_level) {
33*0d6140beSAndroid Build Coastguard Worker return 0;
34*0d6140beSAndroid Build Coastguard Worker }
35*0d6140beSAndroid Build Coastguard Worker
36*0d6140beSAndroid Build Coastguard Worker va_list ap2;
37*0d6140beSAndroid Build Coastguard Worker va_copy(ap2, ap);
38*0d6140beSAndroid Build Coastguard Worker // when buf is NULL, len is zero and this will not write to buf
39*0d6140beSAndroid Build Coastguard Worker int req_len = vsnprintf(buf, len, format, ap2);
40*0d6140beSAndroid Build Coastguard Worker va_end(ap2);
41*0d6140beSAndroid Build Coastguard Worker
42*0d6140beSAndroid Build Coastguard Worker if (req_len > len) {
43*0d6140beSAndroid Build Coastguard Worker char *new_buf = realloc(buf, req_len + 1);
44*0d6140beSAndroid Build Coastguard Worker if (!new_buf) {
45*0d6140beSAndroid Build Coastguard Worker return 0;
46*0d6140beSAndroid Build Coastguard Worker }
47*0d6140beSAndroid Build Coastguard Worker buf = new_buf;
48*0d6140beSAndroid Build Coastguard Worker len = req_len + 1;
49*0d6140beSAndroid Build Coastguard Worker req_len = vsnprintf(buf, len, format, ap);
50*0d6140beSAndroid Build Coastguard Worker }
51*0d6140beSAndroid Build Coastguard Worker
52*0d6140beSAndroid Build Coastguard Worker if (req_len > 0) {
53*0d6140beSAndroid Build Coastguard Worker log_rust(level, buf);
54*0d6140beSAndroid Build Coastguard Worker }
55*0d6140beSAndroid Build Coastguard Worker return req_len;
56*0d6140beSAndroid Build Coastguard Worker }
57*0d6140beSAndroid Build Coastguard Worker
set_log_callback()58*0d6140beSAndroid Build Coastguard Worker void set_log_callback()
59*0d6140beSAndroid Build Coastguard Worker {
60*0d6140beSAndroid Build Coastguard Worker flashrom_set_log_callback(log_c);
61*0d6140beSAndroid Build Coastguard Worker }
62