Coverage Report

Created: 2023-02-15 06:24

/proc/self/cwd/upb/base/status.c
Line
Count
Source (jump to first uncovered line)
1
/*
2
 * Copyright (c) 2009-2021, Google LLC
3
 * All rights reserved.
4
 *
5
 * Redistribution and use in source and binary forms, with or without
6
 * modification, are permitted provided that the following conditions are met:
7
 *     * Redistributions of source code must retain the above copyright
8
 *       notice, this list of conditions and the following disclaimer.
9
 *     * Redistributions in binary form must reproduce the above copyright
10
 *       notice, this list of conditions and the following disclaimer in the
11
 *       documentation and/or other materials provided with the distribution.
12
 *     * Neither the name of Google LLC nor the
13
 *       names of its contributors may be used to endorse or promote products
14
 *       derived from this software without specific prior written permission.
15
 *
16
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
17
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19
 * ARE DISCLAIMED. IN NO EVENT SHALL Google LLC BE LIABLE FOR ANY DIRECT,
20
 * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21
 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22
 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23
 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26
 */
27
28
#include "upb/base/status.h"
29
30
#include <errno.h>
31
#include <float.h>
32
#include <stdarg.h>
33
#include <stdlib.h>
34
#include <string.h>
35
36
// Must be last.
37
#include "upb/port/def.inc"
38
39
7.57k
void upb_Status_Clear(upb_Status* status) {
40
7.57k
  if (!status) return;
41
7.57k
  status->ok = true;
42
7.57k
  status->msg[0] = '\0';
43
7.57k
}
44
45
0
bool upb_Status_IsOk(const upb_Status* status) { return status->ok; }
46
47
0
const char* upb_Status_ErrorMessage(const upb_Status* status) {
48
0
  return status->msg;
49
0
}
50
51
289
void upb_Status_SetErrorMessage(upb_Status* status, const char* msg) {
52
289
  if (!status) return;
53
289
  status->ok = false;
54
289
  strncpy(status->msg, msg, _kUpb_Status_MaxMessage - 1);
55
289
  status->msg[_kUpb_Status_MaxMessage - 1] = '\0';
56
289
}
57
58
118
void upb_Status_SetErrorFormat(upb_Status* status, const char* fmt, ...) {
59
118
  va_list args;
60
118
  va_start(args, fmt);
61
118
  upb_Status_VSetErrorFormat(status, fmt, args);
62
118
  va_end(args);
63
118
}
64
65
void upb_Status_VSetErrorFormat(upb_Status* status, const char* fmt,
66
4.10k
                                va_list args) {
67
4.10k
  if (!status) return;
68
4.10k
  status->ok = false;
69
4.10k
  vsnprintf(status->msg, sizeof(status->msg), fmt, args);
70
4.10k
  status->msg[_kUpb_Status_MaxMessage - 1] = '\0';
71
4.10k
}
72
73
void upb_Status_VAppendErrorFormat(upb_Status* status, const char* fmt,
74
104
                                   va_list args) {
75
104
  size_t len;
76
104
  if (!status) return;
77
104
  status->ok = false;
78
104
  len = strlen(status->msg);
79
104
  vsnprintf(status->msg + len, sizeof(status->msg) - len, fmt, args);
80
104
  status->msg[_kUpb_Status_MaxMessage - 1] = '\0';
81
104
}