MCPcopy Create free account
hub / github.com/ElementsProject/lightning / rune_alt_single

Function rune_alt_single

ccan/ccan/rune/rune.c:298–376  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

296}
297
298static const char *rune_alt_single(const tal_t *ctx,
299 const struct rune_altern *alt,
300 const char *fieldval_str,
301 size_t fieldval_strlen,
302 const s64 *fieldval_int)
303{
304 char strfield[STR_MAX_CHARS(s64) + 1];
305 s64 runeval_int = 0 /* gcc v9.4.0 gets upset with uninitiaized var at -O3 */;
306 const char *err;
307
308 /* Caller can't set both! */
309 if (fieldval_int) {
310 assert(!fieldval_str);
311 sprintf(strfield, "%"PRIi64, *fieldval_int);
312 fieldval_str = strfield;
313 fieldval_strlen = strlen(strfield);
314 }
315
316 switch (alt->condition) {
317 case RUNE_COND_IF_MISSING:
318 if (!fieldval_str)
319 return NULL;
320 return tal_fmt(ctx, "%s is present", alt->fieldname);
321 case RUNE_COND_EQUAL:
322 if (!fieldval_str)
323 return tal_fmt(ctx, "%s not present", alt->fieldname);
324 return cond_test(ctx, alt, "is not equal to",
325 memeqstr(fieldval_str, fieldval_strlen, alt->value));
326 case RUNE_COND_NOT_EQUAL:
327 if (!fieldval_str)
328 return tal_fmt(ctx, "%s not present", alt->fieldname);
329 return cond_test(ctx, alt, "is equal to",
330 !memeqstr(fieldval_str, fieldval_strlen, alt->value));
331 case RUNE_COND_BEGINS:
332 if (!fieldval_str)
333 return tal_fmt(ctx, "%s not present", alt->fieldname);
334 return cond_test(ctx, alt, "does not start with",
335 memstarts_str(fieldval_str, fieldval_strlen, alt->value));
336 case RUNE_COND_ENDS:
337 if (!fieldval_str)
338 return tal_fmt(ctx, "%s not present", alt->fieldname);
339 return cond_test(ctx, alt, "does not end with",
340 memends_str(fieldval_str, fieldval_strlen, alt->value));
341 case RUNE_COND_CONTAINS:
342 if (!fieldval_str)
343 return tal_fmt(ctx, "%s not present", alt->fieldname);
344 return cond_test(ctx, alt, "does not contain",
345 memmem(fieldval_str, fieldval_strlen,
346 alt->value, strlen(alt->value)));
347 case RUNE_COND_INT_LESS:
348 err = integer_compare_valid(ctx, fieldval_int,
349 alt, &runeval_int);
350 if (err)
351 return err;
352 return cond_test(ctx, alt, "is greater or equal to",
353 *fieldval_int < runeval_int);
354 case RUNE_COND_INT_GREATER:
355 err = integer_compare_valid(ctx, fieldval_int,

Callers 3

rune_alt_single_strFunction · 0.85
rune_alt_single_intFunction · 0.85
rune_alt_single_missingFunction · 0.85

Calls 8

cond_testFunction · 0.85
memeqstrFunction · 0.85
memstarts_strFunction · 0.85
memends_strFunction · 0.85
memmemFunction · 0.85
integer_compare_validFunction · 0.85
lexo_orderFunction · 0.85
abortFunction · 0.85

Tested by

no test coverage detected