int deps_match(const struct deps *deps, uint x, uint y) { uint f1, f2; const char *s1, *s2; int d; if (array_get(&deps->names, x) != array_get(&deps->names, y)) return 0; f1 = array_get(&deps->flags, x); f2 = array_get(&deps->flags, y); if (!f1 || !f2) return 1; d = array_get(&deps->epochs, x) - array_get(&deps->epochs, y); if (!d) { s1 = strings_get(deps->strings, array_get(&deps->vers, x)); s2 = strings_get(deps->strings, array_get(&deps->vers, y)); if (*s1 && *s2) d = rpmvercmp(s1, s2); } if (!d) { s1 = strings_get(deps->strings, array_get(&deps->rels, x)); s2 = strings_get(deps->strings, array_get(&deps->rels, y)); if (*s1 && *s2) d = rpmvercmp(s1, s2); } if ((!d && f1 & f2) || (d > 0 && (f1 & RPMSENSE_LESS || f2 & RPMSENSE_GREATER)) || (d < 0 && (f1 & RPMSENSE_GREATER || f2 & RPMSENSE_LESS))) return 1; return 0; }
int deps_print(const struct deps *deps, uint dep, char *str, size_t size) { const char *n, *v, *r; uint f; int s, l; n = strings_get(deps->strings, array_get(&deps->names, dep)); v = strings_get(deps->strings, array_get(&deps->vers, dep)); r = strings_get(deps->strings, array_get(&deps->rels, dep)); f = array_get(&deps->flags, dep); s = snprintf(str, size, "%s", n); if (s < 0 || s >= size) return s; l = s; if (!f || !v || !v[0]) return l; s = snprintf(str + l, size - l, " %s%s%s %s", f & RPMSENSE_LESS ? "<" : "", f & RPMSENSE_GREATER ? ">" : "", f & RPMSENSE_EQUAL ? "=" : "", v); if (s < 0 || s >= size) return l + s; l += s; if (!r || !r[0]) return l; return l + snprintf(str + l, size - l, ".%s", r); }
// Initialize the triac control. void zcd_init(void) { zcd_time_t zcd_calibration = zcd_calibrate(); zcd_set(0); zcd_run(zcd_calibration); printf( strings_get(STR_TRIAC_CALIBRATION), zcd_calibration / (F_CPU / 1000000) ); }