From 99c275dbb52ccd31d45fa046f0bae1a18faff7e6 Mon Sep 17 00:00:00 2001 From: midipix Date: Fri, 9 Feb 2024 20:10:05 +0000 Subject: driver: move slbt_init_version_info() to its own translation unit. --- src/driver/slbt_version_info.c | 73 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 src/driver/slbt_version_info.c (limited to 'src/driver/slbt_version_info.c') diff --git a/src/driver/slbt_version_info.c b/src/driver/slbt_version_info.c new file mode 100644 index 0000000..5b28075 --- /dev/null +++ b/src/driver/slbt_version_info.c @@ -0,0 +1,73 @@ +/*******************************************************************/ +/* slibtool: a skinny libtool implementation, written in C */ +/* Copyright (C) 2016--2021 SysDeer Technologies, LLC */ +/* Released under the Standard MIT License; see COPYING.SLIBTOOL. */ +/*******************************************************************/ + +#include +#include +#include +#include +#include + +#include +#include "slibtool_version.h" +#include "slibtool_driver_impl.h" +#include "slibtool_errinfo_impl.h" +#include "argv/argv.h" + + +int slbt_init_version_info( + struct slbt_driver_ctx_impl * ictx, + struct slbt_version_info * verinfo) +{ + int current; + int revision; + int age; + int colons; + int fmtcnt; + const char * ch; + + if (!verinfo->verinfo && !verinfo->vernumber) + return 0; + + if (verinfo->vernumber) { + sscanf(verinfo->vernumber,"%d:%d:%d", + &verinfo->major, + &verinfo->minor, + &verinfo->revision); + return 0; + } + + current = revision = age = 0; + + for (colons=0, ch=verinfo->verinfo; *ch; ch++) + if (*ch == ':') + colons++; + + fmtcnt = sscanf(verinfo->verinfo,"%d:%d:%d", + ¤t,&revision,&age); + + if (!fmtcnt || (fmtcnt > 3) || (fmtcnt != colons + 1)) { + slbt_dprintf(ictx->fdctx.fderr, + "%s: error: invalid version info: " + "supported argument format is %%d[:%%d[:%%d]].\n", + slbt_program_name(ictx->cctx.targv[0])); + return -1; + } + + if (current < age) { + if (ictx->cctx.drvflags & SLBT_DRIVER_VERBOSITY_ERRORS) + slbt_dprintf(ictx->fdctx.fderr, + "%s: error: invalid version info: " + " may not be smaller than .\n", + slbt_program_name(ictx->cctx.targv[0])); + return -1; + } + + verinfo->major = current - age; + verinfo->minor = age; + verinfo->revision = revision; + + return 0; +} -- cgit v1.2.3