summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Josefsson <simon@josefsson.org>2009-06-08 14:14:37 +0200
committerSimon Josefsson <simon@josefsson.org>2009-06-08 14:14:37 +0200
commit9108b01369dd755ba6a1606bfeb408507a5b6d95 (patch)
tree8d36459d56bbdcd14dbedf49956a816bfe1dd3d8
parent39cde3c5c692a7593e7a54f741833271c10d3e77 (diff)
downloadlibtasn1-9108b01369dd755ba6a1606bfeb408507a5b6d95.tar.gz
libtasn1-9108b01369dd755ba6a1606bfeb408507a5b6d95.tar.bz2
libtasn1-9108b01369dd755ba6a1606bfeb408507a5b6d95.zip
Improve --help and --version outputs.
-rw-r--r--src/asn1Coding.c90
-rw-r--r--src/asn1Decoding.c91
-rw-r--r--src/asn1Parser.c73
3 files changed, 115 insertions, 139 deletions
diff --git a/src/asn1Coding.c b/src/asn1Coding.c
index 3012927..476f374 100644
--- a/src/asn1Coding.c
+++ b/src/asn1Coding.c
@@ -1,4 +1,4 @@
-/*
+/* asn1Coding.c --- program to generate a DER coding of an ASN1 definition.
* Copyright (C) 2006, 2007, 2008, 2009 Free Software Foundation
* Copyright (C) 2002 Fabio Fiorina
*
@@ -19,13 +19,6 @@
*
*/
-
-/*****************************************************/
-/* File: asn1Coding.c */
-/* Description: program to generate a DER coding */
-/* of an ASN1 definition. */
-/*****************************************************/
-
#include <config.h>
#include <stdio.h>
@@ -39,17 +32,38 @@
#include <progname.h>
#include <version-etc.h>
-static const char help_man[] =
- "Usage: asn1Coding [OPTION] DEFINITIONS ASSIGNMENTS\n"
- "asn1Coding generates a DER encoding of ASN.1 DEFINITIONS file\n"
- "and ASSIGNMENTS file with value assignments.\n"
- "\n"
- "Mandatory arguments to long options are mandatory for short options too.\n"
- " -c, --check checks the syntax only\n"
- " -o, --output FILE output file\n"
- " -h, --help display this help and exit\n"
- " -v, --version output version information and exit.\n"
- "\n" "Report bugs to <" PACKAGE_BUGREPORT ">.";
+/* This feature is available in gcc versions 2.5 and later. */
+#if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5)
+# define ATTR_NO_RETRUN
+#else
+# define ATTR_NO_RETRUN __attribute__ ((__noreturn__))
+#endif
+
+ATTR_NO_RETRUN
+static void
+usage (int status)
+{
+ if (status != EXIT_SUCCESS)
+ fprintf (stderr, "Try `%s --help' for more information.\n",
+ program_name);
+ else
+ {
+ printf ("\
+Usage: %s [OPTION] DEFINITIONS ASSIGNMENTS\n", program_name);
+ printf ("\
+Generates a DER encoding of ASN.1 DEFINITIONS file\n\
+and ASSIGNMENTS file with value assignments.\n\
+\n");
+ printf ("\
+Mandatory arguments to long options are mandatory for short options too.\n\
+ -c, --check checks the syntax only\n\
+ -o, --output FILE output file\n\
+ -h, --help display this help and exit\n\
+ -v, --version output version information and exit\n");
+ emit_bug_reporting_address ();
+ }
+ exit (status);
+}
#define ASSIGNMENT_SUCCESS 1
#define ASSIGNMENT_ERROR 2
@@ -74,8 +88,6 @@ readAssignment (FILE * file, char *varName, char *value)
return ASSIGNMENT_SUCCESS;
}
-
-
static void
createFileName (char *inputFileName, char **outputFileName)
{
@@ -108,11 +120,6 @@ createFileName (char *inputFileName, char **outputFileName)
return;
}
-
-/********************************************************/
-/* Function : main */
-/* Description: */
-/********************************************************/
int
main (int argc, char *argv[])
{
@@ -157,10 +164,8 @@ main (int argc, char *argv[])
switch (option_result)
{
case 'h': /* HELP */
- printf ("%s\n", help_man);
-
free (outputFileName);
- exit (0);
+ usage (EXIT_SUCCESS);
break;
case 'v': /* VERSION */
version_etc (stdout, program_name, PACKAGE, VERSION,
@@ -176,13 +181,11 @@ main (int argc, char *argv[])
strcpy (outputFileName, optarg);
break;
case '?': /* UNKNOW OPTION */
+ free (outputFileName);
fprintf (stderr,
"asn1Coding: option '%s' not recognized or without argument.\n\n",
argv[optind - 1]);
- printf ("%s\n", help_man);
-
- free (outputFileName);
- exit (1);
+ usage (EXIT_FAILURE);
break;
default:
fprintf (stderr,
@@ -191,26 +194,11 @@ main (int argc, char *argv[])
}
}
- if (optind == argc)
- {
- fprintf (stderr,
- "asn1Coding: input file with ASN1 definitions missing.\n");
- fprintf (stderr,
- " input file with assignments missing.\n\n");
- printf ("%s\n", help_man);
-
- free (outputFileName);
- exit (1);
- }
-
- if (optind == argc - 1)
+ if (optind == argc || optind == argc -1)
{
- fprintf (stderr,
- "asn1Coding: input file with assignments missing.\n\n");
- printf ("%s\n", help_man);
-
free (outputFileName);
- exit (1);
+ fprintf (stderr, "asn1Coding: input files missing\n");
+ usage (EXIT_FAILURE);
}
inputFileAsnName = (char *) malloc (strlen (argv[optind]) + 1);
diff --git a/src/asn1Decoding.c b/src/asn1Decoding.c
index 3fd9c67..93c61f5 100644
--- a/src/asn1Decoding.c
+++ b/src/asn1Decoding.c
@@ -1,4 +1,4 @@
-/*
+/* asn1Decoding.c --- program to generate an ASN1 type from a DER coding.
* Copyright (C) 2006, 2007, 2008, 2009 Free Software Foundation
* Copyright (C) 2002 Fabio Fiorina
*
@@ -19,13 +19,6 @@
*
*/
-
-/*****************************************************/
-/* File: asn1Deoding.c */
-/* Description: program to generate an ASN1 type from*/
-/* a DER coding. */
-/*****************************************************/
-
#include <config.h>
#include <stdio.h>
@@ -40,20 +33,37 @@
#include <version-etc.h>
#include <read-file.h>
-static const char help_man[] =
- "Usage: asn1Decoding [OPTION] DEFINITIONS ENCODED ASN1TYPE\n"
- "asn1Decoding decodes DER data in ENCODED file, for the ASN1TYPE element\n"
- "described in ASN.1 DEFINITIONS file, and print decoded structures.\n"
- "\n"
- " -c, --check checks the syntax only\n"
- " -h, --help display this help and exit\n"
- " -v, --version output version information and exit.\n"
- "\n" "Report bugs to <" PACKAGE_BUGREPORT ">.";
-
-/********************************************************/
-/* Function : main */
-/* Description: */
-/********************************************************/
+/* This feature is available in gcc versions 2.5 and later. */
+#if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5)
+# define ATTR_NO_RETRUN
+#else
+# define ATTR_NO_RETRUN __attribute__ ((__noreturn__))
+#endif
+
+ATTR_NO_RETRUN
+static void
+usage (int status)
+{
+ if (status != EXIT_SUCCESS)
+ fprintf (stderr, "Try `%s --help' for more information.\n",
+ program_name);
+ else
+ {
+ printf ("\
+Usage: %s [OPTION] DEFINITIONS ENCODED ASN1TYPE\n", program_name);
+ printf ("\
+Decodes DER data in ENCODED file, for the ASN1TYPE element\n\
+described in ASN.1 DEFINITIONS file, and print decoded structures.\n\
+\n");
+ printf ("\
+ -c, --check checks the syntax only\n\
+ -h, --help display this help and exit\n\
+ -v, --version output version information and exit\n");
+ emit_bug_reporting_address ();
+ }
+ exit (status);
+}
+
int
main (int argc, char *argv[])
{
@@ -93,8 +103,7 @@ main (int argc, char *argv[])
switch (option_result)
{
case 'h': /* HELP */
- printf ("%s\n", help_man);
- exit (0);
+ usage (EXIT_SUCCESS);
break;
case 'v': /* VERSION */
version_etc (stdout, program_name, PACKAGE, VERSION,
@@ -108,9 +117,7 @@ main (int argc, char *argv[])
fprintf (stderr,
"asn1Decoding: option '%s' not recognized or without argument.\n\n",
argv[optind - 1]);
- printf ("%s\n", help_man);
-
- exit (1);
+ usage (EXIT_FAILURE);
break;
default:
fprintf (stderr,
@@ -119,33 +126,11 @@ main (int argc, char *argv[])
}
}
- if (optind == argc)
- {
- fprintf (stderr,
- "asn1Decoding: input file with ASN1 definitions missing.\n");
- fprintf (stderr, " input file with DER coding missing.\n");
- fprintf (stderr, " ASN1 type name missing.\n\n");
- printf ("%s\n", help_man);
-
- exit (1);
- }
-
- if (optind == argc - 1)
+ if (optind == argc || optind == argc - 1 || optind == argc - 2)
{
- fprintf (stderr,
- "asn1Decoding: input file with DER coding missing.\n\n");
- fprintf (stderr, " ASN1 type name missing.\n\n");
- printf ("%s\n", help_man);
-
- exit (1);
- }
-
- if (optind == argc - 2)
- {
- fprintf (stderr, "asn1Decoding: ASN1 type name missing.\n\n");
- printf ("%s\n", help_man);
-
- exit (1);
+ fprintf (stderr, "asn1Decoding: input files or ASN.1 type "
+ "name missing\n");
+ usage (EXIT_FAILURE);
}
inputFileAsnName = (char *) malloc (strlen (argv[optind]) + 1);
diff --git a/src/asn1Parser.c b/src/asn1Parser.c
index 8a09209..8152617 100644
--- a/src/asn1Parser.c
+++ b/src/asn1Parser.c
@@ -1,4 +1,4 @@
-/*
+/* asn1Parser.c -- program to parse a file with ASN1 definitions
* Copyright (C) 2006, 2007, 2008, 2009 Free Software Foundation
* Copyright (C) 2002 Fabio Fiorina
*
@@ -19,13 +19,6 @@
*
*/
-
-/*****************************************************/
-/* File: asn1Parser.c */
-/* Description: program to parse a file with ASN1 */
-/* definitions. */
-/*****************************************************/
-
#include <config.h>
#include <stdio.h>
@@ -39,23 +32,40 @@
#include <progname.h>
#include <version-etc.h>
-static const char help_man[] =
- "Usage: asn1Parser [OPTION] FILE\n"
- "Read FILE with ASN.1 definitions and generate\n"
- "a C array that is used with libtasn1 functions.\n"
- "\n"
- "Mandatory arguments to long options are mandatory for short options too.\n"
- " -c, --check checks the syntax only\n"
- " -o, --output FILE output file\n"
- " -n, --name NAME array name\n"
- " -h, --help display this help and exit\n"
- " -v, --version output version information and exit.\n"
- "\n" "Report bugs to <" PACKAGE_BUGREPORT ">.";
-
-/********************************************************/
-/* Function : main */
-/* Description: */
-/********************************************************/
+/* This feature is available in gcc versions 2.5 and later. */
+#if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5)
+# define ATTR_NO_RETRUN
+#else
+# define ATTR_NO_RETRUN __attribute__ ((__noreturn__))
+#endif
+
+ATTR_NO_RETRUN
+static void
+usage (int status)
+{
+ if (status != EXIT_SUCCESS)
+ fprintf (stderr, "Try `%s --help' for more information.\n",
+ program_name);
+ else
+ {
+ printf ("\
+Usage: %s [OPTION] FILE\n", program_name);
+ printf ("\
+Read FILE with ASN.1 definitions and generate\n\
+a C array that is used with libtasn1 functions.\n\
+\n");
+ printf ("\
+Mandatory arguments to long options are mandatory for short options too.\n\
+ -c, --check checks the syntax only\n\
+ -o, --output FILE output file\n\
+ -n, --name NAME array name\n\
+ -h, --help display this help and exit\n\
+ -v, --version output version information and exit\n");
+ emit_bug_reporting_address ();
+ }
+ exit (status);
+}
+
int
main (int argc, char *argv[])
{
@@ -99,11 +109,9 @@ main (int argc, char *argv[])
printf ("\n");
break;
case 'h': /* HELP */
- printf ("%s\n", help_man);
-
free (outputFileName);
free (vectorName);
- exit (0);
+ usage (EXIT_SUCCESS);
break;
case 'v': /* VERSION */
version_etc (stdout, program_name, PACKAGE, VERSION,
@@ -127,11 +135,9 @@ main (int argc, char *argv[])
fprintf (stderr,
"asn1Parser: option '%s' not recognized or without argument.\n\n",
argv[optind - 1]);
- printf ("%s\n", help_man);
-
free (outputFileName);
free (vectorName);
- exit (1);
+ usage (EXIT_FAILURE);
break;
default:
fprintf (stderr,
@@ -143,12 +149,9 @@ main (int argc, char *argv[])
if (optind == argc)
{
- fprintf (stderr, "asn1Parser: input file name missing.\n\n");
- printf ("%s\n", help_man);
-
free (outputFileName);
free (vectorName);
- exit (1);
+ usage (EXIT_SUCCESS);
}
else
{