comparison nspr/lib/libc/include/plgetopt.h @ 0:1e5118fa0cb1

This is NSS with a Cmake Buildsyste To compile a static NSS library for Windows we've used the Chromium-NSS fork and added a Cmake buildsystem to compile it statically for Windows. See README.chromium for chromium changes and README.trustbridge for our modifications.
author Andre Heinecke <andre.heinecke@intevation.de>
date Mon, 28 Jul 2014 10:47:06 +0200
parents
children
comparison
equal deleted inserted replaced
-1:000000000000 0:1e5118fa0cb1
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 /* This Source Code Form is subject to the terms of the Mozilla Public
3 * License, v. 2.0. If a copy of the MPL was not distributed with this
4 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
5
6 /*
7 ** File: plgetopt.h
8 ** Description: utilities to parse argc/argv
9 */
10
11 #if defined(PLGETOPT_H_)
12 #else
13 #define PLGETOPT_H_
14
15 #include "prtypes.h"
16
17 PR_BEGIN_EXTERN_C
18
19 typedef struct PLOptionInternal PLOptionInternal;
20
21 typedef enum
22 {
23 PL_OPT_OK, /* all's well with the option */
24 PL_OPT_EOL, /* end of options list */
25 PL_OPT_BAD /* invalid option (and value) */
26 } PLOptStatus;
27
28 typedef struct PLLongOpt
29 {
30 const char * longOptName; /* long option name string */
31 PRIntn longOption; /* value put in PLOptState for this option. */
32 PRBool valueRequired; /* If option name not followed by '=', */
33 /* value is the next argument from argv. */
34 } PLLongOpt;
35
36 typedef struct PLOptState
37 {
38 char option; /* the name of the option */
39 const char *value; /* the value of that option | NULL */
40
41 PLOptionInternal *internal; /* private processing state */
42
43 PRIntn longOption; /* value from PLLongOpt put here */
44 PRIntn longOptIndex; /* index into caller's array of PLLongOpts */
45 } PLOptState;
46
47 /*
48 * PL_CreateOptState
49 *
50 * The argument "options" points to a string of single-character option
51 * names. Option names that may have an option argument value must be
52 * followed immediately by a ':' character.
53 */
54 PR_EXTERN(PLOptState*) PL_CreateOptState(
55 PRIntn argc, char **argv, const char *options);
56
57 /*
58 * PL_CreateLongOptState
59 *
60 * Alternative to PL_CreateOptState.
61 * Allows caller to specify BOTH a string of single-character option names,
62 * AND an array of structures describing "long" (keyword) option names.
63 * The array is terminated by a structure in which longOptName is NULL.
64 * Long option values (arguments) may always be given as "--name=value".
65 * If PLLongOpt.valueRequired is not PR_FALSE, and the option name was not
66 * followed by '=' then the next argument from argv is taken as the value.
67 */
68 PR_EXTERN(PLOptState*) PL_CreateLongOptState(
69 PRIntn argc, char **argv, const char *options,
70 const PLLongOpt *longOpts);
71 /*
72 * PL_DestroyOptState
73 *
74 * Call this to destroy the PLOptState returned from PL_CreateOptState or
75 * PL_CreateLongOptState.
76 */
77 PR_EXTERN(void) PL_DestroyOptState(PLOptState *opt);
78
79 /*
80 * PL_GetNextOpt
81 *
82 * When this function returns PL_OPT_OK,
83 * - opt->option will hold the single-character option name that was parsed,
84 * or zero.
85 * When opt->option is zero, the token parsed was either a "long" (keyword)
86 * option or a positional parameter.
87 * For a positional parameter,
88 * - opt->longOptIndex will contain -1, and
89 * - opt->value will point to the positional parameter string.
90 * For a long option name,
91 * - opt->longOptIndex will contain the non-negative index of the
92 * PLLongOpt structure in the caller's array of PLLongOpt structures
93 * corresponding to the long option name, and
94 * For a single-character or long option,
95 * - opt->longOption will contain the value of the single-character option
96 * name, or the value of the longOption from the PLLongOpt structure
97 * for that long option. See notes below.
98 * - opt->value will point to the argument option string, or will
99 * be NULL if option does not require argument. If option requires
100 * argument but it is not provided, PL_OPT_BAD is returned.
101 * When opt->option is non-zero,
102 * - opt->longOptIndex will be -1
103 * When this function returns PL_OPT_EOL, or PL_OPT_BAD, the contents of
104 * opt are undefined.
105 *
106 * Notes: It is possible to ignore opt->option, and always look at
107 * opt->longOption instead. opt->longOption will contain the same value
108 * as opt->option for single-character option names, and will contain the
109 * value of longOption from the PLLongOpt structure for long option names.
110 * This means that it is possible to equivalence long option names to
111 * single character names by giving the longOption in the PLLongOpt struct
112 * the same value as the single-character option name.
113 * For long options that are NOT intended to be equivalent to any single-
114 * character option, the longOption value should be chosen to not match
115 * any possible single character name. It might be advisable to choose
116 * longOption values greater than 0xff for such long options.
117 */
118 PR_EXTERN(PLOptStatus) PL_GetNextOpt(PLOptState *opt);
119
120 PR_END_EXTERN_C
121
122 #endif /* defined(PLGETOPT_H_) */
123
124 /* plgetopt.h */
125
This site is hosted by Intevation GmbH (Datenschutzerklärung und Impressum | Privacy Policy and Imprint)