Coverage Report

Created: 2026-07-30 06:52

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/CMake/Utilities/cmllpkgc/llpkgc_dep.c
Line
Count
Source
1
/* Distributed under the OSI-approved BSD 3-Clause License.
2
   See accompanying file LICENSE.rst for details.  */
3
4
#include <stdint.h>
5
#include <stdlib.h>
6
#include <string.h>
7
8
#include "llpkgc_dep.h"
9
10
#define CALLBACK_MAYBE(PARSER, NAME)                                           \
11
0
  do {                                                                         \
12
0
    const llpkgc_dep_settings_t* settings;                                     \
13
0
    settings =                                                                 \
14
0
        (const llpkgc_dep_settings_t*) (PARSER)->llpkgc_dep__settings;         \
15
0
    if(settings == NULL || settings->NAME == NULL) {                             \
16
0
      err = 0;                                                                 \
17
0
      break;                                                                   \
18
0
    }                                                                          \
19
0
    err = settings->NAME((PARSER));                                            \
20
0
  } while(0)
21
22
#define SPAN_CALLBACK_MAYBE(PARSER, NAME, START, LEN)                          \
23
0
  do {                                                                         \
24
0
    const llpkgc_dep_settings_t* settings;                                     \
25
0
    settings =                                                                 \
26
0
        (const llpkgc_dep_settings_t*) (PARSER)->llpkgc_dep__settings;         \
27
0
    if(settings == NULL || settings->NAME == NULL) {                             \
28
0
      err = 0;                                                                 \
29
0
      break;                                                                   \
30
0
    }                                                                          \
31
0
    err = settings->NAME((PARSER), (START), (LEN));                            \
32
0
    if(err == -1) {                                                            \
33
0
      err = PDEP_USER;                                                         \
34
0
      llpkgc_dep_set_error_reason((PARSER), "Span callback error in " #NAME);  \
35
0
    }                                                                          \
36
0
  } while(0)
37
38
enum llpkgc_dep_state {
39
  PDEP_START = 0,
40
  PDEP_DEP_NAME = 1,
41
  PDEP_DEP_OP = 2,
42
  PDEP_AFTER_OP = 3,
43
  PDEP_DEP_VERSION = 4,
44
};
45
46
void llpkgc_dep_init(llpkgc_dep_t* parser,
47
0
    const llpkgc_dep_settings_t* settings) {
48
0
  llpkgc_dep__internal_init(parser);
49
0
  parser->llpkgc_dep__settings = (void*) settings;
50
0
}
51
52
0
void llpkgc_dep_reset(llpkgc_dep_t* parser) {
53
0
  llpkgc_dep_settings_t* settings = parser->llpkgc_dep__settings;
54
0
  void* data = parser->data;
55
0
  llpkgc_dep__internal_init(parser);
56
0
  parser->llpkgc_dep__settings = settings;
57
0
  parser->data = data;
58
0
}
59
60
0
void llpkgc_dep_settings_init(llpkgc_dep_settings_t* settings) {
61
0
  memset(settings, 0, sizeof(*settings));
62
0
}
63
64
llpkgc_dep_errno_t llpkgc_dep_execute(llpkgc_dep_t* parser, const char* data,
65
0
    size_t len) {
66
0
  return llpkgc_dep__internal_execute(parser, data, data + len);
67
0
}
68
69
0
llpkgc_dep_errno_t llpkgc_dep_finish(llpkgc_dep_t* parser) {
70
0
  int err = PDEP_OK;
71
72
0
  if(parser->error != 0) {
73
0
    return parser->error;
74
0
  }
75
76
0
  switch(parser->llpkgc_dep__state) {
77
0
    case PDEP_DEP_NAME:
78
0
      CALLBACK_MAYBE(parser, on_dep_complete);
79
0
      if(err != PDEP_OK) {
80
0
        parser->error = err;
81
0
        return err;
82
0
      }
83
0
      break;
84
85
0
    case PDEP_DEP_OP:
86
0
    case PDEP_AFTER_OP:
87
0
    case PDEP_DEP_VERSION:
88
0
      CALLBACK_MAYBE(parser, on_dep_complete);
89
0
      if(err != PDEP_OK) {
90
0
        parser->error = err;
91
0
        return err;
92
0
      }
93
0
      break;
94
95
0
    case PDEP_START:
96
0
      break;
97
0
  }
98
99
0
  CALLBACK_MAYBE(parser, on_dep_list_complete);
100
0
  if(err != PDEP_OK) {
101
0
    parser->error = err;
102
0
    return err;
103
0
  }
104
105
0
  return PDEP_OK;
106
0
}
107
108
0
void llpkgc_dep_pause(llpkgc_dep_t* parser) {
109
0
  if(parser->error != PDEP_OK) {
110
0
    return;
111
0
  }
112
0
  parser->error = PDEP_PAUSED;
113
0
  parser->reason = "Paused";
114
0
}
115
116
0
void llpkgc_dep_resume(llpkgc_dep_t* parser) {
117
0
  if(parser->error != PDEP_PAUSED) {
118
0
    return;
119
0
  }
120
0
  parser->error = 0;
121
0
}
122
123
0
llpkgc_dep_errno_t llpkgc_dep_get_errno(const llpkgc_dep_t* parser) {
124
0
  return parser->error;
125
0
}
126
127
0
const char* llpkgc_dep_get_error_reason(const llpkgc_dep_t* parser) {
128
0
  return parser->reason;
129
0
}
130
131
0
void llpkgc_dep_set_error_reason(llpkgc_dep_t* parser, const char* reason) {
132
0
  parser->reason = reason;
133
0
}
134
135
0
const char* llpkgc_dep_get_error_pos(const llpkgc_dep_t* parser) {
136
0
  return parser->error_pos;
137
0
}
138
139
0
const char* llpkgc_dep_errno_name(llpkgc_dep_errno_t err) {
140
0
  switch(err) {
141
0
    case PDEP_OK:
142
0
      return "PDEP_OK";
143
0
    case PDEP_INTERNAL:
144
0
      return "PDEP_INTERNAL";
145
0
    case PDEP_PAUSED:
146
0
      return "PDEP_PAUSED";
147
0
    case PDEP_USER:
148
0
      return "PDEP_USER";
149
0
    case PDEP_UNFINISHED:
150
0
      return "PDEP_UNFINISHED";
151
0
  }
152
0
  return "INVALID_ERRNO";
153
0
}
154
155
int llpkgc_dep__dep_name(llpkgc_dep_t* s, const char* p,
156
0
    const char* endp) {
157
0
  int err;
158
0
  SPAN_CALLBACK_MAYBE(s, on_dep_name, p, endp - p);
159
0
  return err;
160
0
}
161
162
int llpkgc_dep__dep_op(llpkgc_dep_t* s, const char* p,
163
0
    const char* endp) {
164
0
  int err;
165
0
  SPAN_CALLBACK_MAYBE(s, on_dep_op, p, endp - p);
166
0
  return err;
167
0
}
168
169
int llpkgc_dep__dep_version(llpkgc_dep_t* s, const char* p,
170
0
    const char* endp) {
171
0
  int err;
172
0
  SPAN_CALLBACK_MAYBE(s, on_dep_version, p, endp - p);
173
0
  return err;
174
0
}
175
176
int llpkgc_dep__dep_complete(llpkgc_dep_t* s, const char* p,
177
0
    const char* endp) {
178
0
  int err;
179
  CALLBACK_MAYBE(s, on_dep_complete);
180
0
  return err;
181
0
}