aboutsummaryrefslogtreecommitdiffstats
path: root/src/repo/s6rc_repo_read_major.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/repo/s6rc_repo_read_major.c')
-rw-r--r--src/repo/s6rc_repo_read_major.c15
1 files changed, 6 insertions, 9 deletions
diff --git a/src/repo/s6rc_repo_read_major.c b/src/repo/s6rc_repo_read_major.c
index 08d646b..1501fe2 100644
--- a/src/repo/s6rc_repo_read_major.c
+++ b/src/repo/s6rc_repo_read_major.c
@@ -16,15 +16,12 @@ uint32_t s6rc_repo_read_major (char const *compiled)
size_t clen = strlen(compiled) ;
ssize_t r ;
uint32_t res ;
- char tmp[UINT32_FMT] ;
- char fn[clen + 7] ;
+ char pack[5] ;
+ char fn[clen + 16] ;
memcpy(fn, compiled, clen) ;
- memcpy(fn + clen, "/major", 7) ;
- r = openreadnclose(fn, tmp, UINT32_FMT) ;
- if (r == -1) return errno == ENOENT ? 7 : 0 ; /* up to 0.7.0.0 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) ;
+ memcpy(fn + clen, "/metainfo/major", 16) ;
+ r = openreadnclose(fn, pack, 5) ;
+ if (r != 4) return r == -1 && errno == ENOENT ? 7 : 0 ; /* up to 0.7.0.0 doesn't have metainfo */
+ uint32_unpack_big(pack, &res) ;
return res ;
}