~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to gnulib/getopt1.c

This patch completes the first step in the splitting of
the XA resource manager API from the storage engine API,
as outlined in the specification here:

http://drizzle.org/wiki/XaStorageEngine

* Splits plugin::StorageEngine into a base StorageEngine
  class and two derived classes, TransactionalStorageEngine
  and XaStorageEngine.  XaStorageEngine derives from
  TransactionalStorageEngine and creates the XA Resource
  Manager API for storage engines.

  - The methods moved from StorageEngine to TransactionalStorageEngine
    include releaseTemporaryLatches(), startConsistentSnapshot(), 
    commit(), rollback(), setSavepoint(), releaseSavepoint(),
    rollbackToSavepoint() and hasTwoPhaseCommit()
  - The methods moved from StorageEngine to XaStorageEngine
    include recover(), commitXid(), rollbackXid(), and prepare()

* Places all static "EngineVector"s into their proper
  namespaces (typedefs belong in header files, not implementation files)
  and places all static methods corresponding
  to either only transactional engines or only XA engines
  into their respective files in /drizzled/plugin/

* Modifies the InnoDB "handler" files to extend plugin::XaStorageEngine
  and not plugin::StorageEngine

The next step, as outlined in the wiki spec page above, is to isolate
the XA Resource Manager API into its own plugin class and modify
plugin::XaStorageEngine to implement plugin::XaResourceManager via
composition.  This is necessary to enable building plugins which can
participate in an XA transaction *without having to have that plugin
implement the entire storage engine API*

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/* getopt_long and getopt_long_only entry points for GNU getopt.
 
2
   Copyright (C) 1987,88,89,90,91,92,93,94,96,97,98,2004,2006
 
3
     Free Software Foundation, Inc.
 
4
   This file is part of the GNU C Library.
 
5
 
 
6
   This program is free software: you can redistribute it and/or modify
 
7
   it under the terms of the GNU Lesser General Public License as published by
 
8
   the Free Software Foundation; either version 3 of the License, or
 
9
   (at your option) any later version.
 
10
 
 
11
   This program is distributed in the hope that it will be useful,
 
12
   but WITHOUT ANY WARRANTY; without even the implied warranty of
 
13
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
14
   GNU Lesser General Public License for more details.
 
15
 
 
16
   You should have received a copy of the GNU Lesser General Public License
 
17
   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
18
 
 
19
#ifdef _LIBC
 
20
# include <getopt.h>
 
21
#else
 
22
# include <config.h>
 
23
# include "getopt.h"
 
24
#endif
 
25
#include "getopt_int.h"
 
26
 
 
27
#include <stdio.h>
 
28
 
 
29
/* This needs to come after some library #include
 
30
   to get __GNU_LIBRARY__ defined.  */
 
31
#ifdef __GNU_LIBRARY__
 
32
#include <stdlib.h>
 
33
#endif
 
34
 
 
35
#ifndef NULL
 
36
#define NULL 0
 
37
#endif
 
38
 
 
39
int
 
40
getopt_long (int argc, char *__getopt_argv_const *argv, const char *options,
 
41
             const struct option *long_options, int *opt_index)
 
42
{
 
43
  return _getopt_internal (argc, (char **) argv, options, long_options,
 
44
                           opt_index, 0, 0);
 
45
}
 
46
 
 
47
int
 
48
_getopt_long_r (int argc, char **argv, const char *options,
 
49
                const struct option *long_options, int *opt_index,
 
50
                struct _getopt_data *d)
 
51
{
 
52
  return _getopt_internal_r (argc, argv, options, long_options, opt_index,
 
53
                             0, 0, d);
 
54
}
 
55
 
 
56
/* Like getopt_long, but '-' as well as '--' can indicate a long option.
 
57
   If an option that starts with '-' (not '--') doesn't match a long option,
 
58
   but does match a short option, it is parsed as a short option
 
59
   instead.  */
 
60
 
 
61
int
 
62
getopt_long_only (int argc, char *__getopt_argv_const *argv,
 
63
                  const char *options,
 
64
                  const struct option *long_options, int *opt_index)
 
65
{
 
66
  return _getopt_internal (argc, (char **) argv, options, long_options,
 
67
                           opt_index, 1, 0);
 
68
}
 
69
 
 
70
int
 
71
_getopt_long_only_r (int argc, char **argv, const char *options,
 
72
                     const struct option *long_options, int *opt_index,
 
73
                     struct _getopt_data *d)
 
74
{
 
75
  return _getopt_internal_r (argc, argv, options, long_options, opt_index,
 
76
                             1, 0, d);
 
77
}
 
78
 
 
79
 
 
80
#ifdef TEST
 
81
 
 
82
#include <stdio.h>
 
83
 
 
84
int
 
85
main (int argc, char **argv)
 
86
{
 
87
  int c;
 
88
  int digit_optind = 0;
 
89
 
 
90
  while (1)
 
91
    {
 
92
      int this_option_optind = optind ? optind : 1;
 
93
      int option_index = 0;
 
94
      static struct option long_options[] =
 
95
      {
 
96
        {"add", 1, 0, 0},
 
97
        {"append", 0, 0, 0},
 
98
        {"delete", 1, 0, 0},
 
99
        {"verbose", 0, 0, 0},
 
100
        {"create", 0, 0, 0},
 
101
        {"file", 1, 0, 0},
 
102
        {0, 0, 0, 0}
 
103
      };
 
104
 
 
105
      c = getopt_long (argc, argv, "abc:d:0123456789",
 
106
                       long_options, &option_index);
 
107
      if (c == -1)
 
108
        break;
 
109
 
 
110
      switch (c)
 
111
        {
 
112
        case 0:
 
113
          printf ("option %s", long_options[option_index].name);
 
114
          if (optarg)
 
115
            printf (" with arg %s", optarg);
 
116
          printf ("\n");
 
117
          break;
 
118
 
 
119
        case '0':
 
120
        case '1':
 
121
        case '2':
 
122
        case '3':
 
123
        case '4':
 
124
        case '5':
 
125
        case '6':
 
126
        case '7':
 
127
        case '8':
 
128
        case '9':
 
129
          if (digit_optind != 0 && digit_optind != this_option_optind)
 
130
            printf ("digits occur in two different argv-elements.\n");
 
131
          digit_optind = this_option_optind;
 
132
          printf ("option %c\n", c);
 
133
          break;
 
134
 
 
135
        case 'a':
 
136
          printf ("option a\n");
 
137
          break;
 
138
 
 
139
        case 'b':
 
140
          printf ("option b\n");
 
141
          break;
 
142
 
 
143
        case 'c':
 
144
          printf ("option c with value `%s'\n", optarg);
 
145
          break;
 
146
 
 
147
        case 'd':
 
148
          printf ("option d with value `%s'\n", optarg);
 
149
          break;
 
150
 
 
151
        case '?':
 
152
          break;
 
153
 
 
154
        default:
 
155
          printf ("?? getopt returned character code 0%o ??\n", c);
 
156
        }
 
157
    }
 
158
 
 
159
  if (optind < argc)
 
160
    {
 
161
      printf ("non-option ARGV-elements: ");
 
162
      while (optind < argc)
 
163
        printf ("%s ", argv[optind++]);
 
164
      printf ("\n");
 
165
    }
 
166
 
 
167
  exit (0);
 
168
}
 
169
 
 
170
#endif /* TEST */