1/* $NetBSD: ntp_libopts.c,v 1.1.1.1 2012/01/31 21:24:15 kardel Exp $ */ 2 3/* 4 * ntp_libopts.c 5 * 6 * Common code interfacing with Autogen's libopts command-line option 7 * processing. 8 */ 9#ifdef HAVE_CONFIG_H 10# include <config.h> 11#endif 12 13#include <stdio.h> 14#include <stddef.h> 15#include "ntp_libopts.h" 16#include "ntp_stdlib.h" 17 18extern const char *Version; /* version.c for each program */ 19 20 21/* 22 * ntpOptionProcess() is a clone of libopts' optionProcess which 23 * overrides the --version output, appending detail from version.c 24 * which was not available at Autogen time. 25 */ 26int 27ntpOptionProcess( 28 tOptions * pOpts, 29 int argc, 30 char ** argv 31 ) 32{ 33 char * pchOpts; 34 char ** ppzFullVersion; 35 char * pzNewFV; 36 char * pzAutogenFV; 37 size_t octets; 38 int rc; 39 40 pchOpts = (void *)pOpts; 41 ppzFullVersion = (char **)(pchOpts + offsetof(tOptions, 42 pzFullVersion)); 43 pzAutogenFV = *ppzFullVersion; 44 octets = strlen(pzAutogenFV) + 45 1 + /* '\n' */ 46 strlen(Version) + 47 1; /* '\0' */ 48 pzNewFV = emalloc(octets); 49 snprintf(pzNewFV, octets, "%s\n%s", pzAutogenFV, Version); 50 *ppzFullVersion = pzNewFV; 51 rc = optionProcess(pOpts, argc, argv); 52 *ppzFullVersion = pzAutogenFV; 53 free(pzNewFV); 54 55 return rc; 56} 57