[svn.haxx.se] · SVN Dev · SVN Users · SVN Org · TSVN Dev · TSVN Users · Subclipse Dev · Subclipse Users · this month's index

Re: Check min and max num targets in client args patch.

From: Karl Fogel <kfogel_at_galois.collab.net>
Date: 2001-03-06 16:38:55 CET

Mo DeJong <mdejong@cygnus.com> writes:
> I noticed some problems with the way the command line
> client was checking the user's input before passing
> commands to the actual function. For example, a
> call to `svn delete` should notice that at least
> 1 argument is required and print the help text
> for the delete subcommand. The current code passed
> the args to the delete subcommand anyway and that
> printed the main usage text instead of the delete
> help text. The following patch fixes the problem
> by adding a min and max number of targets field
> to the command struct. Main then checks to see
> if the number of arguments the user passed
> satisfies the (0 to N) or (1 to N) requirement.
> I also have a patch that removes the num
> targets check in the functions, but that can
> wait until after this patch.

Wow, perfect. I think Fitz described a plan exactly like this to me
the other day... and now you've gone and stolen his thunder. :-)

Fitz, another one for your plate. (Let us know if your plate is
getting too full, though; Franklin can do some of it).

[http://subversion.tigris.org/subversion-dev/current/msg01809.html]

-K

> 2001-03-06 Mo DeJong <mdejong@redhat.com>
>
> subversion/client/cl.h: Add svn_cl__num_targets
> enum, rename svn_cl__cmd_desc_t num_args field
> to num_non_target_args, add min_num_target_args
> and max_num_target_args to svn_cl__cmd_desc_t.
> subversion/client/main.c (main): Init min and
> max fields in svn_cl__cmd_desc_t command table.
> Use num_non_target_args instead of num_args.
> If the number of arguments passed by the user
> does not satisfy the min or max requirements
> of the command, print help for that subcommand.
>
> P.S.
> I am also attaching this patch in case it gets hosed
> by my main client.
>
> Mo DeJong
> Red Hat Inc
>
>
> Index: subversion/client/cl.h
> ===================================================================
> RCS file: /cvs/subversion/subversion/client/cl.h,v
> retrieving revision 1.34
> diff -u -r1.34 cl.h
> --- subversion/client/cl.h 2001/03/04 18:36:00 1.34
> +++ subversion/client/cl.h 2001/03/06 17:17:48
> @@ -86,6 +88,16 @@
> apr_pool_t *pool);
>
>
> +
> +/* The min and max number of target arguments supported by a command */
> +
> +enum svn_cl__num_targets {
> + svn_cl__target_args_N = -1,
> + svn_cl__target_args_ZERO = 0,
> + svn_cl__target_args_ONE = 1
> +};
> +
> +
> /* One element of the command dispatch table. */
> typedef struct svn_cl__cmd_desc_t
> {
> @@ -112,11 +124,14 @@
> /* The number of non-filename arguments the command takes. (e.g. 2
> * for propset, 1 for propget, 0 for most other commands). -1 means
> * "just give me all of the arguments" */
> - int num_args;
> + int num_non_target_args;
>
> /* A brief string describing this command, for usage messages. */
> const char *help;
>
> + enum svn_cl__num_targets min_num_target_args; /* ZERO or ONE */
> + enum svn_cl__num_targets max_num_target_args; /* ZERO or N */
> +
> } svn_cl__cmd_desc_t;
>
>
> Index: subversion/client/main.c
> ===================================================================
> RCS file: /cvs/subversion/subversion/client/main.c,v
> retrieving revision 1.62
> diff -u -r1.62 main.c
> --- subversion/client/main.c 2001/03/04 18:23:38 1.62
> +++ subversion/client/main.c 2001/03/06 17:17:48
> @@ -52,32 +52,37 @@
> {
> { "add", FALSE, svn_cl__add_command, svn_cl__add, 0,
> "Add new files and directories to version control.\n"
> - "usage: add [TARGETS]\n" },
> - { "ad", TRUE, 0, NULL, 0, NULL },
> - { "new", TRUE, 0, NULL, 0, NULL },
> + "usage: add [TARGETS]\n",
> + svn_cl__target_args_ONE, svn_cl__target_args_N },
> + { "ad", TRUE, 0, NULL, 0, NULL, 0, 0 },
> + { "new", TRUE, 0, NULL, 0, NULL, 0, 0 },
>
> { "checkout", FALSE, svn_cl__checkout_command, svn_cl__checkout, 0,
> "Check out a working directory from a repository.\n"
> - "usage: checkout REPOSPATH\n" },
> - { "co", TRUE, 0, NULL, 0, NULL },
> + "usage: checkout REPOSPATH\n", /* REPOSPATH passed via op_state not targets */
> + svn_cl__target_args_ZERO, svn_cl__target_args_ZERO },
> + { "co", TRUE, 0, NULL, 0, NULL, 0, 0 },
>
> { "commit", FALSE, svn_cl__commit_command, svn_cl__commit, 0,
> "Commit changes from your working copy to the repository.\n"
> - "usage: commit [TARGETS]\n" },
> - { "ci", TRUE, 0, NULL, 0, NULL },
> + "usage: commit [TARGETS]\n",
> + svn_cl__target_args_ZERO, svn_cl__target_args_N },
> + { "ci", TRUE, 0, NULL, 0, NULL, 0, 0 },
>
> { "delete", FALSE, svn_cl__delete_command, svn_cl__delete, 0,
> "Remove files and directories from version control.\n"
> - "usage: delete [TARGETS]\n" },
> - { "del", TRUE, 0, NULL, 0, NULL },
> - { "remove", TRUE, 0, NULL, 0, NULL },
> - { "rm", TRUE, 0, NULL, 0, NULL },
> + "usage: delete [TARGETS]\n",
> + svn_cl__target_args_ONE, svn_cl__target_args_N },
> + { "del", TRUE, 0, NULL, 0, NULL, 0, 0 },
> + { "remove", TRUE, 0, NULL, 0, NULL, 0, 0 },
> + { "rm", TRUE, 0, NULL, 0, NULL, 0, 0 },
>
> { "help", FALSE, svn_cl__help_command, svn_cl__help, 0,
> "Display this usage message.\n"
> - "usage: help [SUBCOMMAND1 [SUBCOMMAND2] ...]\n" },
> - { "?", TRUE, 0, NULL, 0, NULL },
> - { "h", TRUE, 0, NULL, 0, NULL },
> + "usage: help [SUBCOMMAND1 [SUBCOMMAND2] ...]\n",
> + svn_cl__target_args_ZERO, svn_cl__target_args_N },
> + { "?", TRUE, 0, NULL, 0, NULL, 0, 0 },
> + { "h", TRUE, 0, NULL, 0, NULL, 0, 0 },
> /* We need to support "--help", "-?", and all that good stuff, of
> course. But those options, since unknown, will result in the
> help message being printed out anyway, so there's no need to
> @@ -85,39 +90,46 @@
>
> { "proplist", FALSE, svn_cl__proplist_command, svn_cl__proplist, 0,
> "List all properties for given files and directories.\n"
> - "usage: proplist [TARGETS]\n" },
> - { "plist", TRUE, 0, NULL, 0, NULL },
> - { "pl", TRUE, 0, NULL, 0, NULL },
> + "usage: proplist [TARGETS]\n",
> + svn_cl__target_args_ZERO, svn_cl__target_args_N },
> + { "plist", TRUE, 0, NULL, 0, NULL, 0, 0 },
> + { "pl", TRUE, 0, NULL, 0, NULL, 0, 0 },
>
> { "propget", FALSE, svn_cl__propget_command, svn_cl__propget, 1,
> "Get the value of property PROPNAME on files and directories.\n"
> - "usage: propget PROPNAME [TARGETS]\n" },
> - { "pget", TRUE, 0, NULL, 1, NULL },
> - { "pg", TRUE, 0, NULL, 1, NULL },
> + "usage: propget PROPNAME [TARGETS]\n",
> + svn_cl__target_args_ZERO, svn_cl__target_args_N },
> + { "pget", TRUE, 0, NULL, 1, NULL, 0, 0 },
> + { "pg", TRUE, 0, NULL, 1, NULL, 0, 0 },
>
> { "propset", FALSE, svn_cl__propset_command, svn_cl__propset, 2,
> "Set property PROPNAME to PROPVAL on the named files and directories.\n"
> "usage: propset PROPNAME [PROPVAL | --valfile VALFILE] "
> - "[TARGET1 [TARGET2] ...]\n"},
> - { "pset", TRUE, 0, NULL, 2, NULL },
> - { "ps", TRUE, 0, NULL, 2, NULL },
> + "[TARGET1 [TARGET2] ...]\n",
> + svn_cl__target_args_ONE, svn_cl__target_args_N }, /* FIXME 0 args allowed ?? */
> + { "pset", TRUE, 0, NULL, 2, NULL, 0, 0 },
> + { "ps", TRUE, 0, NULL, 2, NULL, 0, 0 },
>
> { "status", FALSE, svn_cl__status_command, svn_cl__status, 0,
> "Print the status of working copy files and directories.\n"
> - "usage: status [TARGETS]\n" },
> - { "stat", TRUE, 0, NULL, 0, NULL },
> - { "st", TRUE, 0, NULL, 0, NULL },
> + "usage: status [TARGETS]\n",
> + svn_cl__target_args_ZERO, svn_cl__target_args_N },
> + { "stat", TRUE, 0, NULL, 0, NULL, 0, 0 },
> + { "st", TRUE, 0, NULL, 0, NULL, 0, 0 },
>
> { "diff", FALSE, svn_cl__diff_command, svn_cl__diff, 0,
> "Display local file changes as contextual diffs.\n"
> - "usage: diff [TARGETS]\n" },
> - { "df", TRUE, 0, NULL, 0, NULL },
> + "usage: diff [TARGETS]\n",
> + svn_cl__target_args_ZERO, svn_cl__target_args_N },
> + { "df", TRUE, 0, NULL, 0, NULL, 0, 0 },
> + { "di", TRUE, 0, NULL, 0, NULL, 0, 0 },
>
> { "update", FALSE, svn_cl__update_command, svn_cl__update, 0,
> "Bring changes from the repository into the working copy.\n"
> - "usage: update [TARGETS]\n" },
> - { "up", TRUE, 0, NULL, 0, NULL },
> - { NULL, FALSE, 0, NULL, 0, NULL }
> + "usage: update [TARGETS]\n",
> + svn_cl__target_args_ZERO, svn_cl__target_args_N },
> + { "up", TRUE, 0, NULL, 0, NULL, 0, 0 },
> + { NULL, FALSE, 0, NULL, 0, NULL, 0, 0 }
> };
>
>
> @@ -358,16 +370,17 @@
> * addition. */
> opt_state.args = apr_array_make (pool, 0, sizeof (svn_string_t *));
>
> - if (subcommand->num_args > 0) {
> + if (subcommand->num_non_target_args > 0) {
> const char *this_arg;
> int i;
> - /* loop for num_args and add each arg to the args array */
> - for (i = 0; i < subcommand->num_args; i++) {
> + /* loop for num_non_target_args and add each arg to the args array */
> + for (i = 0; i < subcommand->num_non_target_args; i++) {
> if (os->ind >= os->argc) {
> const char *plural = "s";
> fprintf (stderr, "ERROR: The %s command requires %i argument%s\n",
> - subcommand->name, subcommand->num_args,
> - (subcommand->num_args == 1) ? "" : plural);
> + subcommand->name,
> + subcommand->num_non_target_args,
> + (subcommand->num_non_target_args == 1) ? "" : plural);
> fprintf (stderr, "Help for %s:\n%s", subcommand->name, subcommand->help);
> /* svn_cl__help (NULL, targets, pool); */
> /* TODO Do we have to print out the WHOLE help thing every
> @@ -381,8 +394,8 @@
>
> }
> }
> - /* greedily suck up all args if num_args is a negative number. */
> - else if (subcommand->num_args == -1) {
> + /* greedily suck up all args if num_non_target_args is a negative number. */
> + else if (subcommand->num_non_target_args == -1) {
> /* TODO. This is currently not used by any subcommand, so I'm not
> writing it right now. -Fitz */
> fprintf (stderr, "unimplemented function. -1 args not written yet\n");
> @@ -390,12 +403,37 @@
> return EXIT_FAILURE;
> }
>
> - /* Do the regular arguments (target files and target dirs). */
> - for (; os->ind < os->argc; os->ind++)
> + /* Do the regular arguments (target files and target dirs) */
> +
> + /* Each commands knows the min and max number of target *
> + * args that it accepts. If the min is 1 and the user *
> + * passes 0 arguments, print help for cmd. If the user *
> + * passed more arguments than the max and the max is not *
> + * N, then print help for cmd. */
> +
> + if ((subcommand->min_num_target_args == svn_cl__target_args_ONE
> + && (os->argc - 2) == 0) ||
> + (subcommand->max_num_target_args != svn_cl__target_args_N
> + && (os->argc - 2) > subcommand->max_num_target_args))
> {
> - const char *this_arg = os->argv[os->ind];
> (*((svn_string_t **) apr_array_push (targets)))
> - = svn_string_create (this_arg, pool);
> + = svn_string_create (subcommand->name, pool);
> +
> + subcommand = svn_cl__get_canonical_command ("help");
> +
> + err = (*subcommand->cmd_func) (&opt_state, targets, pool);
> + if (err)
> + svn_handle_error (err, stdout, 0);
> + return EXIT_FAILURE;
> + }
> + else
> + {
> + for (; os->ind < os->argc; os->ind++)
> + {
> + const char *this_arg = os->argv[os->ind];
> + (*((svn_string_t **) apr_array_push (targets)))
> + = svn_string_create (this_arg, pool);
> + }
> }
>
> /* Certain commands have an implied `.' as argument, if nothing else
>
>
>
> ---559023410-851401618-983900964=:27344
> Content-Type: TEXT/PLAIN; charset=US-ASCII; name=patch
> Content-Transfer-Encoding: BASE64
> Content-ID: <Pine.SOL.3.91.1010306094924.27344A@cse.cygnus.com>
> Content-Description:
>
> SW5kZXg6IHN1YnZlcnNpb24vY2xpZW50L2NsLmgNCj09PT09PT09PT09PT09
> PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
> PT09PT09PT0NClJDUyBmaWxlOiAvY3ZzL3N1YnZlcnNpb24vc3VidmVyc2lv
> bi9jbGllbnQvY2wuaCx2DQpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMzQNCmRp
> ZmYgLXUgLXIxLjM0IGNsLmgNCi0tLSBzdWJ2ZXJzaW9uL2NsaWVudC9jbC5o
> CTIwMDEvMDMvMDQgMTg6MzY6MDAJMS4zNA0KKysrIHN1YnZlcnNpb24vY2xp
> ZW50L2NsLmgJMjAwMS8wMy8wNiAxNzoxNzo0OA0KQEAgLTg2LDYgKzg4LDE2
> IEBADQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
> ICAgIGFwcl9wb29sX3QgKnBvb2wpOw0KIA0KIA0KKw0KKy8qIFRoZSBtaW4g
> YW5kIG1heCBudW1iZXIgb2YgdGFyZ2V0IGFyZ3VtZW50cyBzdXBwb3J0ZWQg
> YnkgYSBjb21tYW5kICovDQorDQorZW51bSBzdm5fY2xfX251bV90YXJnZXRz
> IHsNCisgIHN2bl9jbF9fdGFyZ2V0X2FyZ3NfTiA9IC0xLA0KKyAgc3ZuX2Ns
> X190YXJnZXRfYXJnc19aRVJPID0gMCwNCisgIHN2bl9jbF9fdGFyZ2V0X2Fy
> Z3NfT05FID0gMQ0KK307DQorDQorDQogLyogT25lIGVsZW1lbnQgb2YgdGhl
> IGNvbW1hbmQgZGlzcGF0Y2ggdGFibGUuICovDQogdHlwZWRlZiBzdHJ1Y3Qg
> c3ZuX2NsX19jbWRfZGVzY190DQogew0KQEAgLTExMiwxMSArMTI0LDE0IEBA
> DQogICAvKiBUaGUgbnVtYmVyIG9mIG5vbi1maWxlbmFtZSBhcmd1bWVudHMg
> dGhlIGNvbW1hbmQgdGFrZXMuIChlLmcuIDINCiAgICAqIGZvciBwcm9wc2V0
> LCAxIGZvciBwcm9wZ2V0LCAwIGZvciBtb3N0IG90aGVyIGNvbW1hbmRzKS4g
> LTEgbWVhbnMNCiAgICAqICJqdXN0IGdpdmUgbWUgYWxsIG9mIHRoZSBhcmd1
> bWVudHMiICovDQotICBpbnQgbnVtX2FyZ3M7DQorICBpbnQgbnVtX25vbl90
> YXJnZXRfYXJnczsNCiANCiAgIC8qIEEgYnJpZWYgc3RyaW5nIGRlc2NyaWJp
> bmcgdGhpcyBjb21tYW5kLCBmb3IgdXNhZ2UgbWVzc2FnZXMuICovDQogICBj
> b25zdCBjaGFyICpoZWxwOw0KIA0KKyAgZW51bSBzdm5fY2xfX251bV90YXJn
> ZXRzIG1pbl9udW1fdGFyZ2V0X2FyZ3M7IC8qIFpFUk8gb3IgT05FICovDQor
> ICBlbnVtIHN2bl9jbF9fbnVtX3RhcmdldHMgbWF4X251bV90YXJnZXRfYXJn
> czsgLyogWkVSTyBvciBOICovDQorDQogfSBzdm5fY2xfX2NtZF9kZXNjX3Q7
> DQogDQogDQpJbmRleDogc3VidmVyc2lvbi9jbGllbnQvbWFpbi5jDQo9PT09
> PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
> PT09PT09PT09PT09PT09PT09DQpSQ1MgZmlsZTogL2N2cy9zdWJ2ZXJzaW9u
> L3N1YnZlcnNpb24vY2xpZW50L21haW4uYyx2DQpyZXRyaWV2aW5nIHJldmlz
> aW9uIDEuNjINCmRpZmYgLXUgLXIxLjYyIG1haW4uYw0KLS0tIHN1YnZlcnNp
> b24vY2xpZW50L21haW4uYwkyMDAxLzAzLzA0IDE4OjIzOjM4CTEuNjINCisr
> KyBzdWJ2ZXJzaW9uL2NsaWVudC9tYWluLmMJMjAwMS8wMy8wNiAxNzoxNzo0
> OA0KQEAgLTUyLDMyICs1MiwzNyBAQA0KIHsNCiAgIHsgImFkZCIsICAgICAg
> ICBGQUxTRSwgIHN2bl9jbF9fYWRkX2NvbW1hbmQsICAgICAgc3ZuX2NsX19h
> ZGQsIDAsDQogICAgICJBZGQgbmV3IGZpbGVzIGFuZCBkaXJlY3RvcmllcyB0
> byB2ZXJzaW9uIGNvbnRyb2wuXG4iDQotICAgICJ1c2FnZTogYWRkIFtUQVJH
> RVRTXVxuIiB9LA0KLSAgeyAiYWQiLCAgICAgICAgIFRSVUUsIDAsIE5VTEws
> IDAsIE5VTEwgfSwNCi0gIHsgIm5ldyIsICAgICAgICBUUlVFLCAwLCBOVUxM
> LCAwLCBOVUxMIH0sDQorICAgICJ1c2FnZTogYWRkIFtUQVJHRVRTXVxuIiwN
> CisgICAgc3ZuX2NsX190YXJnZXRfYXJnc19PTkUsIHN2bl9jbF9fdGFyZ2V0
> X2FyZ3NfTiB9LA0KKyAgeyAiYWQiLCAgICAgICAgIFRSVUUsIDAsIE5VTEws
> IDAsIE5VTEwsIDAsIDAgfSwNCisgIHsgIm5ldyIsICAgICAgICBUUlVFLCAw
> LCBOVUxMLCAwLCBOVUxMLCAwLCAwIH0sDQogDQogICB7ICJjaGVja291dCIs
> ICAgRkFMU0UsICBzdm5fY2xfX2NoZWNrb3V0X2NvbW1hbmQsIHN2bl9jbF9f
> Y2hlY2tvdXQsIDAsDQogICAgICJDaGVjayBvdXQgYSB3b3JraW5nIGRpcmVj
> dG9yeSBmcm9tIGEgcmVwb3NpdG9yeS5cbiINCi0gICAgInVzYWdlOiBjaGVj
> a291dCBSRVBPU1BBVEhcbiIgfSwNCi0gIHsgImNvIiwgICAgICAgICBUUlVF
> LCAwLCBOVUxMLCAwLCBOVUxMIH0sDQorICAgICJ1c2FnZTogY2hlY2tvdXQg
> UkVQT1NQQVRIXG4iLCAvKiBSRVBPU1BBVEggcGFzc2VkIHZpYSBvcF9zdGF0
> ZSBub3QgdGFyZ2V0cyAqLw0KKyAgICBzdm5fY2xfX3RhcmdldF9hcmdzX1pF
> Uk8sIHN2bl9jbF9fdGFyZ2V0X2FyZ3NfWkVSTyB9LA0KKyAgeyAiY28iLCAg
> ICAgICAgIFRSVUUsIDAsIE5VTEwsIDAsIE5VTEwsIDAsIDAgfSwNCiANCiAg
> IHsgImNvbW1pdCIsICAgICBGQUxTRSwgIHN2bl9jbF9fY29tbWl0X2NvbW1h
> bmQsICAgc3ZuX2NsX19jb21taXQsIDAsDQogICAgICJDb21taXQgY2hhbmdl
> cyBmcm9tIHlvdXIgd29ya2luZyBjb3B5IHRvIHRoZSByZXBvc2l0b3J5Llxu
> Ig0KLSAgICAidXNhZ2U6IGNvbW1pdCBbVEFSR0VUU11cbiIgfSwNCi0gIHsg
> ImNpIiwgICAgICAgICBUUlVFLCAwLCBOVUxMLCAwLCBOVUxMIH0sDQorICAg
> ICJ1c2FnZTogY29tbWl0IFtUQVJHRVRTXVxuIiwNCisgICAgc3ZuX2NsX190
> YXJnZXRfYXJnc19aRVJPLCBzdm5fY2xfX3RhcmdldF9hcmdzX04gfSwNCisg
> IHsgImNpIiwgICAgICAgICBUUlVFLCAwLCBOVUxMLCAwLCBOVUxMLCAwLCAw
> IH0sDQogDQogICB7ICJkZWxldGUiLCAgICAgRkFMU0UsICBzdm5fY2xfX2Rl
> bGV0ZV9jb21tYW5kLCAgIHN2bl9jbF9fZGVsZXRlLCAwLA0KICAgICAiUmVt
> b3ZlIGZpbGVzIGFuZCBkaXJlY3RvcmllcyBmcm9tIHZlcnNpb24gY29udHJv
> bC5cbiINCi0gICAgInVzYWdlOiBkZWxldGUgW1RBUkdFVFNdXG4iIH0sDQot
> ICB7ICJkZWwiLCAgICAgICAgVFJVRSwgMCwgTlVMTCwgMCwgTlVMTCB9LA0K
> LSAgeyAicmVtb3ZlIiwgICAgIFRSVUUsIDAsIE5VTEwsIDAsIE5VTEwgfSwN
> Ci0gIHsgInJtIiwgICAgICAgICBUUlVFLCAwLCBOVUxMLCAwLCBOVUxMIH0s
> DQorICAgICJ1c2FnZTogZGVsZXRlIFtUQVJHRVRTXVxuIiwNCisgICAgc3Zu
> X2NsX190YXJnZXRfYXJnc19PTkUsIHN2bl9jbF9fdGFyZ2V0X2FyZ3NfTiB9
> LA0KKyAgeyAiZGVsIiwgICAgICAgIFRSVUUsIDAsIE5VTEwsIDAsIE5VTEws
> IDAsIDAgfSwNCisgIHsgInJlbW92ZSIsICAgICBUUlVFLCAwLCBOVUxMLCAw
> LCBOVUxMLCAwLCAwIH0sDQorICB7ICJybSIsICAgICAgICAgVFJVRSwgMCwg
> TlVMTCwgMCwgTlVMTCwgMCwgMCB9LA0KIA0KICAgeyAiaGVscCIsICAgICAg
> IEZBTFNFLCAgc3ZuX2NsX19oZWxwX2NvbW1hbmQsICAgc3ZuX2NsX19oZWxw
> LCAwLA0KICAgICAiRGlzcGxheSB0aGlzIHVzYWdlIG1lc3NhZ2UuXG4iDQot
> ICAgICJ1c2FnZTogaGVscCBbU1VCQ09NTUFORDEgW1NVQkNPTU1BTkQyXSAu
> Li5dXG4iIH0sDQotICB7ICI/IiwgICAgICAgICAgVFJVRSwgMCwgTlVMTCwg
> MCwgTlVMTCB9LA0KLSAgeyAiaCIsICAgICAgICAgIFRSVUUsIDAsIE5VTEws
> IDAsIE5VTEwgfSwNCisgICAgInVzYWdlOiBoZWxwIFtTVUJDT01NQU5EMSBb
> U1VCQ09NTUFORDJdIC4uLl1cbiIsDQorICAgIHN2bl9jbF9fdGFyZ2V0X2Fy
> Z3NfWkVSTywgc3ZuX2NsX190YXJnZXRfYXJnc19OIH0sDQorICB7ICI/Iiwg
> ICAgICAgICAgVFJVRSwgMCwgTlVMTCwgMCwgTlVMTCwgMCwgMCB9LA0KKyAg
> eyAiaCIsICAgICAgICAgIFRSVUUsIDAsIE5VTEwsIDAsIE5VTEwsIDAsIDAg
> fSwNCiAgIC8qIFdlIG5lZWQgdG8gc3VwcG9ydCAiLS1oZWxwIiwgIi0/Iiwg
> YW5kIGFsbCB0aGF0IGdvb2Qgc3R1ZmYsIG9mDQogICAgICBjb3Vyc2UuICBC
> dXQgdGhvc2Ugb3B0aW9ucywgc2luY2UgdW5rbm93biwgd2lsbCByZXN1bHQg
> aW4gdGhlDQogICAgICBoZWxwIG1lc3NhZ2UgYmVpbmcgcHJpbnRlZCBvdXQg
> YW55d2F5LCBzbyB0aGVyZSdzIG5vIG5lZWQgdG8NCkBAIC04NSwzOSArOTAs
> NDYgQEANCiANCiAgIHsgInByb3BsaXN0IiwgICBGQUxTRSwgIHN2bl9jbF9f
> cHJvcGxpc3RfY29tbWFuZCwgc3ZuX2NsX19wcm9wbGlzdCwgMCwNCiAgICAg
> Ikxpc3QgYWxsIHByb3BlcnRpZXMgZm9yIGdpdmVuIGZpbGVzIGFuZCBkaXJl
> Y3Rvcmllcy5cbiINCi0gICAgInVzYWdlOiBwcm9wbGlzdCBbVEFSR0VUU11c
> biIgfSwNCi0gIHsgInBsaXN0IiwgICAgICBUUlVFLCAwLCBOVUxMLCAwLCBO
> VUxMIH0sDQotICB7ICJwbCIsICAgICAgICAgVFJVRSwgMCwgTlVMTCwgMCwg
> TlVMTCB9LA0KKyAgICAidXNhZ2U6IHByb3BsaXN0IFtUQVJHRVRTXVxuIiwN
> CisgICAgc3ZuX2NsX190YXJnZXRfYXJnc19aRVJPLCBzdm5fY2xfX3Rhcmdl
> dF9hcmdzX04gfSwNCisgIHsgInBsaXN0IiwgICAgICBUUlVFLCAwLCBOVUxM
> LCAwLCBOVUxMLCAwLCAwIH0sDQorICB7ICJwbCIsICAgICAgICAgVFJVRSwg
> MCwgTlVMTCwgMCwgTlVMTCwgMCwgMCB9LA0KIA0KICAgeyAicHJvcGdldCIs
> ICAgIEZBTFNFLCAgc3ZuX2NsX19wcm9wZ2V0X2NvbW1hbmQsICBzdm5fY2xf
> X3Byb3BnZXQsIDEsDQogICAgICJHZXQgdGhlIHZhbHVlIG9mIHByb3BlcnR5
> IFBST1BOQU1FIG9uIGZpbGVzIGFuZCBkaXJlY3Rvcmllcy5cbiINCi0gICAg
> InVzYWdlOiBwcm9wZ2V0IFBST1BOQU1FIFtUQVJHRVRTXVxuIiB9LA0KLSAg
> eyAicGdldCIsICAgICAgIFRSVUUsICAgMCwgIE5VTEwsIDEsIE5VTEwgfSwN
> Ci0gIHsgInBnIiwgICAgICAgICBUUlVFLCAgIDAsICBOVUxMLCAxLCBOVUxM
> IH0sDQorICAgICJ1c2FnZTogcHJvcGdldCBQUk9QTkFNRSBbVEFSR0VUU11c
> biIsDQorICAgIHN2bl9jbF9fdGFyZ2V0X2FyZ3NfWkVSTywgc3ZuX2NsX190
> YXJnZXRfYXJnc19OIH0sDQorICB7ICJwZ2V0IiwgICAgICAgVFJVRSwgICAw
> LCAgTlVMTCwgMSwgTlVMTCwgMCwgMCB9LA0KKyAgeyAicGciLCAgICAgICAg
> IFRSVUUsICAgMCwgIE5VTEwsIDEsIE5VTEwsIDAsIDAgfSwNCiANCiAgIHsg
> InByb3BzZXQiLCAgICBGQUxTRSwgIHN2bl9jbF9fcHJvcHNldF9jb21tYW5k
> LCAgc3ZuX2NsX19wcm9wc2V0LCAyLCANCiAgICAgIlNldCBwcm9wZXJ0eSBQ
> Uk9QTkFNRSB0byBQUk9QVkFMIG9uIHRoZSBuYW1lZCBmaWxlcyBhbmQgZGly
> ZWN0b3JpZXMuXG4iDQogICAgICJ1c2FnZTogcHJvcHNldCBQUk9QTkFNRSBb
> UFJPUFZBTCB8IC0tdmFsZmlsZSBWQUxGSUxFXSAiDQotICAgICJbVEFSR0VU
> MSBbVEFSR0VUMl0gLi4uXVxuIn0sDQotICB7ICJwc2V0IiwgICAgICAgVFJV
> RSwgMCwgTlVMTCwgMiwgTlVMTCB9LA0KLSAgeyAicHMiLCAgICAgICAgIFRS
> VUUsIDAsIE5VTEwsIDIsIE5VTEwgfSwNCisgICAgIltUQVJHRVQxIFtUQVJH
> RVQyXSAuLi5dXG4iLA0KKyAgICBzdm5fY2xfX3RhcmdldF9hcmdzX09ORSwg
> c3ZuX2NsX190YXJnZXRfYXJnc19OIH0sIC8qIEZJWE1FIDAgYXJncyBhbGxv
> d2VkID8/ICovDQorICB7ICJwc2V0IiwgICAgICAgVFJVRSwgMCwgTlVMTCwg
> MiwgTlVMTCwgMCwgMCB9LA0KKyAgeyAicHMiLCAgICAgICAgIFRSVUUsIDAs
> IE5VTEwsIDIsIE5VTEwsIDAsIDAgfSwNCiANCiAgIHsgInN0YXR1cyIsICAg
> ICBGQUxTRSwgIHN2bl9jbF9fc3RhdHVzX2NvbW1hbmQsICAgc3ZuX2NsX19z
> dGF0dXMsIDAsDQogICAgICJQcmludCB0aGUgc3RhdHVzIG9mIHdvcmtpbmcg
> Y29weSBmaWxlcyBhbmQgZGlyZWN0b3JpZXMuXG4iDQotICAgICJ1c2FnZTog
> c3RhdHVzIFtUQVJHRVRTXVxuIiB9LA0KLSAgeyAic3RhdCIsICAgICAgIFRS
> VUUsIDAsIE5VTEwsIDAsIE5VTEwgfSwNCi0gIHsgInN0IiwgICAgICAgICBU
> UlVFLCAwLCBOVUxMLCAwLCBOVUxMIH0sDQorICAgICJ1c2FnZTogc3RhdHVz
> IFtUQVJHRVRTXVxuIiwNCisgICAgc3ZuX2NsX190YXJnZXRfYXJnc19aRVJP
> LCBzdm5fY2xfX3RhcmdldF9hcmdzX04gfSwNCisgIHsgInN0YXQiLCAgICAg
> ICBUUlVFLCAwLCBOVUxMLCAwLCBOVUxMLCAwLCAwIH0sDQorICB7ICJzdCIs
> ICAgICAgICAgVFJVRSwgMCwgTlVMTCwgMCwgTlVMTCwgMCwgMCB9LA0KIA0K
> ICAgeyAiZGlmZiIsICAgICBGQUxTRSwgIHN2bl9jbF9fZGlmZl9jb21tYW5k
> LCAgIHN2bl9jbF9fZGlmZiwgMCwNCiAgICAgIkRpc3BsYXkgbG9jYWwgZmls
> ZSBjaGFuZ2VzIGFzIGNvbnRleHR1YWwgZGlmZnMuXG4iDQotICAgICJ1c2Fn
> ZTogZGlmZiBbVEFSR0VUU11cbiIgfSwNCi0gIHsgImRmIiwgICAgICAgICBU
> UlVFLCAwLCBOVUxMLCAwLCBOVUxMIH0sDQorICAgICJ1c2FnZTogZGlmZiBb
> VEFSR0VUU11cbiIsDQorICAgIHN2bl9jbF9fdGFyZ2V0X2FyZ3NfWkVSTywg
> c3ZuX2NsX190YXJnZXRfYXJnc19OIH0sDQorICB7ICJkZiIsICAgICAgICAg
> VFJVRSwgMCwgTlVMTCwgMCwgTlVMTCwgMCwgMCB9LA0KKyAgeyAiZGkiLCAg
> ICAgICAgIFRSVUUsIDAsIE5VTEwsIDAsIE5VTEwsIDAsIDAgfSwNCiANCiAg
> IHsgInVwZGF0ZSIsICAgICBGQUxTRSwgIHN2bl9jbF9fdXBkYXRlX2NvbW1h
> bmQsICAgc3ZuX2NsX191cGRhdGUsIDAsDQogICAgICJCcmluZyBjaGFuZ2Vz
> IGZyb20gdGhlIHJlcG9zaXRvcnkgaW50byB0aGUgd29ya2luZyBjb3B5Llxu
> Ig0KLSAgICAidXNhZ2U6IHVwZGF0ZSBbVEFSR0VUU11cbiIgfSwNCi0gIHsg
> InVwIiwgICAgICAgICBUUlVFLCAwLCBOVUxMLCAwLCBOVUxMIH0sDQotICB7
> IE5VTEwsICAgICAgICAgRkFMU0UsICAwLCBOVUxMLCAwLCBOVUxMIH0NCisg
> ICAgInVzYWdlOiB1cGRhdGUgW1RBUkdFVFNdXG4iLA0KKyAgICBzdm5fY2xf
> X3RhcmdldF9hcmdzX1pFUk8sIHN2bl9jbF9fdGFyZ2V0X2FyZ3NfTiB9LA0K
> KyAgeyAidXAiLCAgICAgICAgIFRSVUUsIDAsIE5VTEwsIDAsIE5VTEwsIDAs
> IDAgfSwNCisgIHsgTlVMTCwgICAgICAgICBGQUxTRSwgIDAsIE5VTEwsIDAs
> IE5VTEwsIDAsIDAgfQ0KIH07DQogDQogDQpAQCAtMzU4LDE2ICszNzAsMTcg
> QEANCiAgICAqIGFkZGl0aW9uLiAqLw0KICAgb3B0X3N0YXRlLmFyZ3MgPSBh
> cHJfYXJyYXlfbWFrZSAocG9vbCwgMCwgc2l6ZW9mIChzdm5fc3RyaW5nX3Qg
> KikpOw0KIA0KLSAgaWYgKHN1YmNvbW1hbmQtPm51bV9hcmdzID4gMCkgew0K
> KyAgaWYgKHN1YmNvbW1hbmQtPm51bV9ub25fdGFyZ2V0X2FyZ3MgPiAwKSB7
> DQogICAgIGNvbnN0IGNoYXIgKnRoaXNfYXJnOw0KICAgICBpbnQgaTsNCi0g
> ICAgLyogbG9vcCBmb3IgbnVtX2FyZ3MgYW5kIGFkZCBlYWNoIGFyZyB0byB0
> aGUgYXJncyBhcnJheSAqLw0KLSAgICBmb3IgKGkgPSAwOyBpIDwgc3ViY29t
> bWFuZC0+bnVtX2FyZ3M7IGkrKykgew0KKyAgICAvKiBsb29wIGZvciBudW1f
> bm9uX3RhcmdldF9hcmdzIGFuZCBhZGQgZWFjaCBhcmcgdG8gdGhlIGFyZ3Mg
> YXJyYXkgKi8NCisgICAgZm9yIChpID0gMDsgaSA8IHN1YmNvbW1hbmQtPm51
> bV9ub25fdGFyZ2V0X2FyZ3M7IGkrKykgew0KICAgICAgIGlmIChvcy0+aW5k
> ID49IG9zLT5hcmdjKSB7DQogICAgICAgICBjb25zdCBjaGFyICpwbHVyYWwg
> PSAicyI7IA0KICAgICAgICAgZnByaW50ZiAoc3RkZXJyLCAiRVJST1I6IFRo
> ZSAlcyBjb21tYW5kIHJlcXVpcmVzICVpIGFyZ3VtZW50JXNcbiIsDQotICAg
> ICAgICAgICAgICAgICBzdWJjb21tYW5kLT5uYW1lLCBzdWJjb21tYW5kLT5u
> dW1fYXJncywgDQotICAgICAgICAgICAgICAgICAoc3ViY29tbWFuZC0+bnVt
> X2FyZ3MgPT0gMSkgPyAiIiA6IHBsdXJhbCk7DQorICAgICAgICAgICAgICAg
> ICBzdWJjb21tYW5kLT5uYW1lLA0KKyAgICAgICAgICAgICAgICAgc3ViY29t
> bWFuZC0+bnVtX25vbl90YXJnZXRfYXJncywgDQorICAgICAgICAgICAgICAg
> ICAoc3ViY29tbWFuZC0+bnVtX25vbl90YXJnZXRfYXJncyA9PSAxKSA/ICIi
> IDogcGx1cmFsKTsNCiAgICAgICAgIGZwcmludGYgKHN0ZGVyciwgIkhlbHAg
> Zm9yICVzOlxuJXMiLCBzdWJjb21tYW5kLT5uYW1lLCBzdWJjb21tYW5kLT5o
> ZWxwKTsNCiAgICAgICAgIC8qIHN2bl9jbF9faGVscCAoTlVMTCwgdGFyZ2V0
> cywgcG9vbCk7ICovDQogICAgICAgICAvKiBUT0RPIERvIHdlIGhhdmUgdG8g
> cHJpbnQgb3V0IHRoZSBXSE9MRSBoZWxwIHRoaW5nIGV2ZXJ5DQpAQCAtMzgx
> LDggKzM5NCw4IEBADQogDQogICAgIH0NCiAgIH0NCi0gIC8qIGdyZWVkaWx5
> IHN1Y2sgdXAgYWxsIGFyZ3MgaWYgbnVtX2FyZ3MgaXMgYSBuZWdhdGl2ZSBu
> dW1iZXIuICovDQotICBlbHNlIGlmIChzdWJjb21tYW5kLT5udW1fYXJncyA9
> PSAtMSkgew0KKyAgLyogZ3JlZWRpbHkgc3VjayB1cCBhbGwgYXJncyBpZiBu
> dW1fbm9uX3RhcmdldF9hcmdzIGlzIGEgbmVnYXRpdmUgbnVtYmVyLiAqLw0K
> KyAgZWxzZSBpZiAoc3ViY29tbWFuZC0+bnVtX25vbl90YXJnZXRfYXJncyA9
> PSAtMSkgew0KICAgICAvKiBUT0RPLiBUaGlzIGlzIGN1cnJlbnRseSBub3Qg
> dXNlZCBieSBhbnkgc3ViY29tbWFuZCwgc28gSSdtIG5vdA0KICAgICAgICB3
> cml0aW5nIGl0IHJpZ2h0IG5vdy4gLUZpdHogKi8NCiAgICAgZnByaW50ZiAo
> c3RkZXJyLCAidW5pbXBsZW1lbnRlZCBmdW5jdGlvbi4gLTEgYXJncyBub3Qg
> d3JpdHRlbiB5ZXRcbiIpOw0KQEAgLTM5MCwxMiArNDAzLDM3IEBADQogICAg
> IHJldHVybiBFWElUX0ZBSUxVUkU7DQogICB9DQogDQotICAvKiBEbyB0aGUg
> cmVndWxhciBhcmd1bWVudHMgKHRhcmdldCBmaWxlcyBhbmQgdGFyZ2V0IGRp
> cnMpLiAqLw0KLSAgZm9yICg7IG9zLT5pbmQgPCBvcy0+YXJnYzsgb3MtPmlu
> ZCsrKQ0KKyAgLyogRG8gdGhlIHJlZ3VsYXIgYXJndW1lbnRzICh0YXJnZXQg
> ZmlsZXMgYW5kIHRhcmdldCBkaXJzKSAqLw0KKyAgDQorICAvKiBFYWNoIGNv
> bW1hbmRzIGtub3dzIHRoZSBtaW4gYW5kIG1heCBudW1iZXIgb2YgdGFyZ2V0
> ICAgICoNCisgICAqIGFyZ3MgdGhhdCBpdCBhY2NlcHRzLiBJZiB0aGUgbWlu
> IGlzIDEgYW5kIHRoZSB1c2VyICAgICAgKg0KKyAgICogcGFzc2VzIDAgYXJn
> dW1lbnRzLCBwcmludCBoZWxwIGZvciBjbWQuIElmIHRoZSB1c2VyICAgICAq
> DQorICAgKiBwYXNzZWQgbW9yZSBhcmd1bWVudHMgdGhhbiB0aGUgbWF4IGFu
> ZCB0aGUgbWF4IGlzIG5vdCAgICoNCisgICAqIE4sIHRoZW4gcHJpbnQgaGVs
> cCBmb3IgY21kLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisN
> CisgIGlmICgoc3ViY29tbWFuZC0+bWluX251bV90YXJnZXRfYXJncyA9PSBz
> dm5fY2xfX3RhcmdldF9hcmdzX09ORQ0KKyAgICAmJiAob3MtPmFyZ2MgLSAy
> KSA9PSAwKSB8fA0KKyAgICAgIChzdWJjb21tYW5kLT5tYXhfbnVtX3Rhcmdl
> dF9hcmdzICE9IHN2bl9jbF9fdGFyZ2V0X2FyZ3NfTg0KKyAgICAmJiAob3Mt
> PmFyZ2MgLSAyKSA+IHN1YmNvbW1hbmQtPm1heF9udW1fdGFyZ2V0X2FyZ3Mp
> KQ0KICAgICB7DQotICAgICAgY29uc3QgY2hhciAqdGhpc19hcmcgPSBvcy0+
> YXJndltvcy0+aW5kXTsNCiAgICAgICAoKigoc3ZuX3N0cmluZ190ICoqKSBh
> cHJfYXJyYXlfcHVzaCAodGFyZ2V0cykpKQ0KLSAgICAgICAgPSBzdm5fc3Ry
> aW5nX2NyZWF0ZSAodGhpc19hcmcsIHBvb2wpOw0KKyAgICAgICAgPSBzdm5f
> c3RyaW5nX2NyZWF0ZSAoc3ViY29tbWFuZC0+bmFtZSwgcG9vbCk7DQorDQor
> ICAgICAgc3ViY29tbWFuZCA9IHN2bl9jbF9fZ2V0X2Nhbm9uaWNhbF9jb21t
> YW5kICgiaGVscCIpOw0KKyAgICAgIA0KKyAgICAgIGVyciA9ICgqc3ViY29t
> bWFuZC0+Y21kX2Z1bmMpICgmb3B0X3N0YXRlLCB0YXJnZXRzLCBwb29sKTsN
> CisgICAgICBpZiAoZXJyKQ0KKyAgICAgICAgc3ZuX2hhbmRsZV9lcnJvciAo
> ZXJyLCBzdGRvdXQsIDApOw0KKyAgICAgIHJldHVybiBFWElUX0ZBSUxVUkU7
> DQorICAgIH0NCisgIGVsc2UNCisgICAgew0KKyAgICAgIGZvciAoOyBvcy0+
> aW5kIDwgb3MtPmFyZ2M7IG9zLT5pbmQrKykNCisgICAgICAgIHsNCisgICAg
> ICAgICAgY29uc3QgY2hhciAqdGhpc19hcmcgPSBvcy0+YXJndltvcy0+aW5k
> XTsNCisgICAgICAgICAgKCooKHN2bl9zdHJpbmdfdCAqKikgYXByX2FycmF5
> X3B1c2ggKHRhcmdldHMpKSkNCisgICAgICAgICAgICA9IHN2bl9zdHJpbmdf
> Y3JlYXRlICh0aGlzX2FyZywgcG9vbCk7DQorICAgICAgICB9DQogICAgIH0N
> CiANCiAgIC8qIENlcnRhaW4gY29tbWFuZHMgaGF2ZSBhbiBpbXBsaWVkIGAu
> JyBhcyBhcmd1bWVudCwgaWYgbm90aGluZyBlbHNlDQoNCg==
> ---559023410-851401618-983900964=:27344--
Received on Sat Oct 21 14:36:25 2006

This is an archived mail posted to the Subversion Dev mailing list.