/* ISC license. */ #include #include #include #include #include #include #include uint32_t s6rc_read_major (char const *compiled) { size_t clen = strlen(compiled) ; ssize_t r ; uint32_t res ; char tmp[UINT32_FMT] ; char fn[clen + 7] ; memcpy(fn, compiled, clen) ; memcpy(fn + clen, "/major", 7) ; r = openreadnclose(fn, tmp, UINT32_FMT) ; if (r == -1) return errno == ENOENT ? 6 : 0 ; /* up to 0.6.x.y doesn't have db/major */ if (!r) return 0 ; if (tmp[r] != '\n') return (errno = EPROTO, 0) ; tmp[r] = 0 ; if (uint320_scan(tmp, &res) != r) return (errno = EPROTO, 0) ; return res ; }