1/* 2 * deprecated.c: holding file for all deprecated APIs. 3 * "we can't lose 'em, but we can shun 'em!" 4 * 5 * ==================================================================== 6 * Licensed to the Apache Software Foundation (ASF) under one 7 * or more contributor license agreements. See the NOTICE file 8 * distributed with this work for additional information 9 * regarding copyright ownership. The ASF licenses this file 10 * to you under the Apache License, Version 2.0 (the 11 * "License"); you may not use this file except in compliance 12 * with the License. You may obtain a copy of the License at 13 * 14 * http://www.apache.org/licenses/LICENSE-2.0 15 * 16 * Unless required by applicable law or agreed to in writing, 17 * software distributed under the License is distributed on an 18 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 19 * KIND, either express or implied. See the License for the 20 * specific language governing permissions and limitations 21 * under the License. 22 * ==================================================================== 23 */ 24 25/* ==================================================================== */ 26 27 28 29#include <assert.h> 30 31#include <apr_md5.h> 32 33/* We define this here to remove any further warnings about the usage of 34 deprecated functions in this file. */ 35#define SVN_DEPRECATED 36 37#include "svn_hash.h" 38#include "svn_subst.h" 39#include "svn_path.h" 40#include "svn_opt.h" 41#include "svn_cmdline.h" 42#include "svn_version.h" 43#include "svn_pools.h" 44#include "svn_dso.h" 45#include "svn_mergeinfo.h" 46#include "svn_utf.h" 47#include "svn_xml.h" 48#include "svn_auth.h" 49 50#include "opt.h" 51#include "auth.h" 52#include "private/svn_opt_private.h" 53#include "private/svn_mergeinfo_private.h" 54 55#include "svn_private_config.h" 56 57 58 59 60/*** Code. ***/ 61 62/*** From subst.c ***/ 63/* Convert an old-style svn_subst_keywords_t struct * into a new-style 64 * keywords hash. Keyword values are shallow copies, so the produced 65 * hash must not be assumed to have lifetime longer than the struct it 66 * is based on. A NULL input causes a NULL output. */ 67static apr_hash_t * 68kwstruct_to_kwhash(const svn_subst_keywords_t *kwstruct, 69 apr_pool_t *pool) 70{ 71 apr_hash_t *kwhash; 72 73 if (kwstruct == NULL) 74 return NULL; 75 76 kwhash = apr_hash_make(pool); 77 78 if (kwstruct->revision) 79 { 80 svn_hash_sets(kwhash, SVN_KEYWORD_REVISION_LONG, kwstruct->revision); 81 svn_hash_sets(kwhash, SVN_KEYWORD_REVISION_MEDIUM, kwstruct->revision); 82 svn_hash_sets(kwhash, SVN_KEYWORD_REVISION_SHORT, kwstruct->revision); 83 } 84 if (kwstruct->date) 85 { 86 svn_hash_sets(kwhash, SVN_KEYWORD_DATE_LONG, kwstruct->date); 87 svn_hash_sets(kwhash, SVN_KEYWORD_DATE_SHORT, kwstruct->date); 88 } 89 if (kwstruct->author) 90 { 91 svn_hash_sets(kwhash, SVN_KEYWORD_AUTHOR_LONG, kwstruct->author); 92 svn_hash_sets(kwhash, SVN_KEYWORD_AUTHOR_SHORT, kwstruct->author); 93 } 94 if (kwstruct->url) 95 { 96 svn_hash_sets(kwhash, SVN_KEYWORD_URL_LONG, kwstruct->url); 97 svn_hash_sets(kwhash, SVN_KEYWORD_URL_SHORT, kwstruct->url); 98 } 99 if (kwstruct->id) 100 { 101 svn_hash_sets(kwhash, SVN_KEYWORD_ID, kwstruct->id); 102 } 103 104 return kwhash; 105} 106 107 108svn_error_t * 109svn_subst_translate_stream3(svn_stream_t *src_stream, 110 svn_stream_t *dst_stream, 111 const char *eol_str, 112 svn_boolean_t repair, 113 apr_hash_t *keywords, 114 svn_boolean_t expand, 115 apr_pool_t *pool) 116{ 117 /* The docstring requires that *some* translation be requested. */ 118 SVN_ERR_ASSERT(eol_str || keywords); 119 120 /* We don't want the copy3 to close the provided streams. */ 121 src_stream = svn_stream_disown(src_stream, pool); 122 dst_stream = svn_stream_disown(dst_stream, pool); 123 124 /* Wrap the destination stream with our translation stream. It is more 125 efficient than wrapping the source stream. */ 126 dst_stream = svn_subst_stream_translated(dst_stream, eol_str, repair, 127 keywords, expand, pool); 128 129 return svn_error_trace(svn_stream_copy3(src_stream, dst_stream, 130 NULL, NULL, pool)); 131} 132 133svn_error_t * 134svn_subst_translate_stream2(svn_stream_t *s, /* src stream */ 135 svn_stream_t *d, /* dst stream */ 136 const char *eol_str, 137 svn_boolean_t repair, 138 const svn_subst_keywords_t *keywords, 139 svn_boolean_t expand, 140 apr_pool_t *pool) 141{ 142 apr_hash_t *kh = kwstruct_to_kwhash(keywords, pool); 143 144 return svn_error_trace(svn_subst_translate_stream3(s, d, eol_str, repair, 145 kh, expand, pool)); 146} 147 148svn_error_t * 149svn_subst_translate_stream(svn_stream_t *s, /* src stream */ 150 svn_stream_t *d, /* dst stream */ 151 const char *eol_str, 152 svn_boolean_t repair, 153 const svn_subst_keywords_t *keywords, 154 svn_boolean_t expand) 155{ 156 apr_pool_t *pool = svn_pool_create(NULL); 157 svn_error_t *err = svn_subst_translate_stream2(s, d, eol_str, repair, 158 keywords, expand, pool); 159 svn_pool_destroy(pool); 160 return svn_error_trace(err); 161} 162 163svn_error_t * 164svn_subst_translate_cstring(const char *src, 165 const char **dst, 166 const char *eol_str, 167 svn_boolean_t repair, 168 const svn_subst_keywords_t *keywords, 169 svn_boolean_t expand, 170 apr_pool_t *pool) 171{ 172 apr_hash_t *kh = kwstruct_to_kwhash(keywords, pool); 173 174 return svn_error_trace(svn_subst_translate_cstring2(src, dst, eol_str, 175 repair, kh, expand, 176 pool)); 177} 178 179svn_error_t * 180svn_subst_copy_and_translate(const char *src, 181 const char *dst, 182 const char *eol_str, 183 svn_boolean_t repair, 184 const svn_subst_keywords_t *keywords, 185 svn_boolean_t expand, 186 apr_pool_t *pool) 187{ 188 return svn_error_trace(svn_subst_copy_and_translate2(src, dst, eol_str, 189 repair, keywords, 190 expand, FALSE, pool)); 191} 192 193svn_error_t * 194svn_subst_copy_and_translate2(const char *src, 195 const char *dst, 196 const char *eol_str, 197 svn_boolean_t repair, 198 const svn_subst_keywords_t *keywords, 199 svn_boolean_t expand, 200 svn_boolean_t special, 201 apr_pool_t *pool) 202{ 203 apr_hash_t *kh = kwstruct_to_kwhash(keywords, pool); 204 205 return svn_error_trace(svn_subst_copy_and_translate3(src, dst, eol_str, 206 repair, kh, expand, 207 special, pool)); 208} 209 210svn_error_t * 211svn_subst_copy_and_translate3(const char *src, 212 const char *dst, 213 const char *eol_str, 214 svn_boolean_t repair, 215 apr_hash_t *keywords, 216 svn_boolean_t expand, 217 svn_boolean_t special, 218 apr_pool_t *pool) 219{ 220 return svn_error_trace(svn_subst_copy_and_translate4(src, dst, eol_str, 221 repair, keywords, 222 expand, special, 223 NULL, NULL, 224 pool)); 225} 226 227 228svn_error_t * 229svn_subst_stream_translated_to_normal_form(svn_stream_t **stream, 230 svn_stream_t *source, 231 svn_subst_eol_style_t eol_style, 232 const char *eol_str, 233 svn_boolean_t always_repair_eols, 234 apr_hash_t *keywords, 235 apr_pool_t *pool) 236{ 237 if (eol_style == svn_subst_eol_style_native) 238 eol_str = SVN_SUBST_NATIVE_EOL_STR; 239 else if (! (eol_style == svn_subst_eol_style_fixed 240 || eol_style == svn_subst_eol_style_none)) 241 return svn_error_create(SVN_ERR_IO_UNKNOWN_EOL, NULL, NULL); 242 243 *stream = svn_subst_stream_translated(source, eol_str, 244 eol_style == svn_subst_eol_style_fixed 245 || always_repair_eols, 246 keywords, FALSE, pool); 247 248 return SVN_NO_ERROR; 249} 250 251svn_error_t * 252svn_subst_translate_string(svn_string_t **new_value, 253 const svn_string_t *value, 254 const char *encoding, 255 apr_pool_t *pool) 256{ 257 return svn_subst_translate_string2(new_value, NULL, NULL, value, 258 encoding, FALSE, pool, pool); 259} 260 261svn_error_t * 262svn_subst_stream_detranslated(svn_stream_t **stream_p, 263 const char *src, 264 svn_subst_eol_style_t eol_style, 265 const char *eol_str, 266 svn_boolean_t always_repair_eols, 267 apr_hash_t *keywords, 268 svn_boolean_t special, 269 apr_pool_t *pool) 270{ 271 svn_stream_t *src_stream; 272 273 if (special) 274 return svn_subst_read_specialfile(stream_p, src, pool, pool); 275 276 /* This will be closed by svn_subst_stream_translated_to_normal_form 277 when the returned stream is closed. */ 278 SVN_ERR(svn_stream_open_readonly(&src_stream, src, pool, pool)); 279 280 return svn_error_trace(svn_subst_stream_translated_to_normal_form( 281 stream_p, src_stream, 282 eol_style, eol_str, 283 always_repair_eols, 284 keywords, pool)); 285} 286 287svn_error_t * 288svn_subst_translate_to_normal_form(const char *src, 289 const char *dst, 290 svn_subst_eol_style_t eol_style, 291 const char *eol_str, 292 svn_boolean_t always_repair_eols, 293 apr_hash_t *keywords, 294 svn_boolean_t special, 295 apr_pool_t *pool) 296{ 297 298 if (eol_style == svn_subst_eol_style_native) 299 eol_str = SVN_SUBST_NATIVE_EOL_STR; 300 else if (! (eol_style == svn_subst_eol_style_fixed 301 || eol_style == svn_subst_eol_style_none)) 302 return svn_error_create(SVN_ERR_IO_UNKNOWN_EOL, NULL, NULL); 303 304 return svn_error_trace(svn_subst_copy_and_translate3( 305 src, dst, eol_str, 306 eol_style == svn_subst_eol_style_fixed 307 || always_repair_eols, 308 keywords, 309 FALSE /* contract keywords */, 310 special, 311 pool)); 312} 313 314 315/*** From opt.c ***/ 316/* Same as print_command_info2(), but with deprecated struct revision. */ 317static svn_error_t * 318print_command_info(const svn_opt_subcommand_desc_t *cmd, 319 const apr_getopt_option_t *options_table, 320 svn_boolean_t help, 321 apr_pool_t *pool, 322 FILE *stream) 323{ 324 svn_boolean_t first_time; 325 apr_size_t i; 326 327 /* Print the canonical command name. */ 328 SVN_ERR(svn_cmdline_fputs(cmd->name, stream, pool)); 329 330 /* Print the list of aliases. */ 331 first_time = TRUE; 332 for (i = 0; i < SVN_OPT_MAX_ALIASES; i++) 333 { 334 if (cmd->aliases[i] == NULL) 335 break; 336 337 if (first_time) { 338 SVN_ERR(svn_cmdline_fputs(" (", stream, pool)); 339 first_time = FALSE; 340 } 341 else 342 SVN_ERR(svn_cmdline_fputs(", ", stream, pool)); 343 344 SVN_ERR(svn_cmdline_fputs(cmd->aliases[i], stream, pool)); 345 } 346 347 if (! first_time) 348 SVN_ERR(svn_cmdline_fputs(")", stream, pool)); 349 350 if (help) 351 { 352 const apr_getopt_option_t *option; 353 svn_boolean_t have_options = FALSE; 354 355 SVN_ERR(svn_cmdline_fprintf(stream, pool, ": %s", _(cmd->help))); 356 357 /* Loop over all valid option codes attached to the subcommand */ 358 for (i = 0; i < SVN_OPT_MAX_OPTIONS; i++) 359 { 360 if (cmd->valid_options[i]) 361 { 362 if (!have_options) 363 { 364 SVN_ERR(svn_cmdline_fputs(_("\nValid options:\n"), 365 stream, pool)); 366 have_options = TRUE; 367 } 368 369 /* convert each option code into an option */ 370 option = 371 svn_opt_get_option_from_code2(cmd->valid_options[i], 372 options_table, NULL, pool); 373 374 /* print the option's docstring */ 375 if (option && option->description) 376 { 377 const char *optstr; 378 svn_opt_format_option(&optstr, option, TRUE, pool); 379 SVN_ERR(svn_cmdline_fprintf(stream, pool, " %s\n", 380 optstr)); 381 } 382 } 383 } 384 385 if (have_options) 386 SVN_ERR(svn_cmdline_fprintf(stream, pool, "\n")); 387 } 388 389 return SVN_NO_ERROR; 390} 391 392const svn_opt_subcommand_desc_t * 393svn_opt_get_canonical_subcommand(const svn_opt_subcommand_desc_t *table, 394 const char *cmd_name) 395{ 396 int i = 0; 397 398 if (cmd_name == NULL) 399 return NULL; 400 401 while (table[i].name) { 402 int j; 403 if (strcmp(cmd_name, table[i].name) == 0) 404 return table + i; 405 for (j = 0; (j < SVN_OPT_MAX_ALIASES) && table[i].aliases[j]; j++) 406 if (strcmp(cmd_name, table[i].aliases[j]) == 0) 407 return table + i; 408 409 i++; 410 } 411 412 /* If we get here, there was no matching subcommand name or alias. */ 413 return NULL; 414} 415 416void 417svn_opt_subcommand_help2(const char *subcommand, 418 const svn_opt_subcommand_desc2_t *table, 419 const apr_getopt_option_t *options_table, 420 apr_pool_t *pool) 421{ 422 svn_opt_subcommand_help3(subcommand, table, options_table, 423 NULL, pool); 424} 425 426void 427svn_opt_subcommand_help(const char *subcommand, 428 const svn_opt_subcommand_desc_t *table, 429 const apr_getopt_option_t *options_table, 430 apr_pool_t *pool) 431{ 432 const svn_opt_subcommand_desc_t *cmd = 433 svn_opt_get_canonical_subcommand(table, subcommand); 434 svn_error_t *err; 435 436 if (cmd) 437 err = print_command_info(cmd, options_table, TRUE, pool, stdout); 438 else 439 err = svn_cmdline_fprintf(stderr, pool, 440 _("\"%s\": unknown command.\n\n"), subcommand); 441 442 if (err) { 443 svn_handle_error2(err, stderr, FALSE, "svn: "); 444 svn_error_clear(err); 445 } 446} 447 448svn_error_t * 449svn_opt_args_to_target_array3(apr_array_header_t **targets_p, 450 apr_getopt_t *os, 451 const apr_array_header_t *known_targets, 452 apr_pool_t *pool) 453{ 454 return svn_error_trace(svn_opt__args_to_target_array(targets_p, os, 455 known_targets, pool)); 456} 457 458svn_error_t * 459svn_opt_args_to_target_array2(apr_array_header_t **targets_p, 460 apr_getopt_t *os, 461 const apr_array_header_t *known_targets, 462 apr_pool_t *pool) 463{ 464 svn_error_t *err = svn_opt_args_to_target_array3(targets_p, os, 465 known_targets, pool); 466 467 if (err && err->apr_err == SVN_ERR_RESERVED_FILENAME_SPECIFIED) 468 { 469 svn_error_clear(err); 470 return SVN_NO_ERROR; 471 } 472 473 return err; 474} 475 476svn_error_t * 477svn_opt_args_to_target_array(apr_array_header_t **targets_p, 478 apr_getopt_t *os, 479 const apr_array_header_t *known_targets, 480 svn_opt_revision_t *start_revision, 481 svn_opt_revision_t *end_revision, 482 svn_boolean_t extract_revisions, 483 apr_pool_t *pool) 484{ 485 apr_array_header_t *output_targets; 486 487 SVN_ERR(svn_opt_args_to_target_array2(&output_targets, os, 488 known_targets, pool)); 489 490 if (extract_revisions) 491 { 492 svn_opt_revision_t temprev; 493 const char *path; 494 495 if (output_targets->nelts > 0) 496 { 497 path = APR_ARRAY_IDX(output_targets, 0, const char *); 498 SVN_ERR(svn_opt_parse_path(&temprev, &path, path, pool)); 499 if (temprev.kind != svn_opt_revision_unspecified) 500 { 501 APR_ARRAY_IDX(output_targets, 0, const char *) = path; 502 start_revision->kind = temprev.kind; 503 start_revision->value = temprev.value; 504 } 505 } 506 if (output_targets->nelts > 1) 507 { 508 path = APR_ARRAY_IDX(output_targets, 1, const char *); 509 SVN_ERR(svn_opt_parse_path(&temprev, &path, path, pool)); 510 if (temprev.kind != svn_opt_revision_unspecified) 511 { 512 APR_ARRAY_IDX(output_targets, 1, const char *) = path; 513 end_revision->kind = temprev.kind; 514 end_revision->value = temprev.value; 515 } 516 } 517 } 518 519 *targets_p = output_targets; 520 return SVN_NO_ERROR; 521} 522 523svn_error_t * 524svn_opt_print_help3(apr_getopt_t *os, 525 const char *pgm_name, 526 svn_boolean_t print_version, 527 svn_boolean_t quiet, 528 const char *version_footer, 529 const char *header, 530 const svn_opt_subcommand_desc2_t *cmd_table, 531 const apr_getopt_option_t *option_table, 532 const int *global_options, 533 const char *footer, 534 apr_pool_t *pool) 535{ 536 return svn_error_trace(svn_opt_print_help4(os, 537 pgm_name, 538 print_version, 539 quiet, 540 FALSE, 541 version_footer, 542 header, 543 cmd_table, 544 option_table, 545 global_options, 546 footer, 547 pool)); 548} 549 550svn_error_t * 551svn_opt_print_help2(apr_getopt_t *os, 552 const char *pgm_name, 553 svn_boolean_t print_version, 554 svn_boolean_t quiet, 555 const char *version_footer, 556 const char *header, 557 const svn_opt_subcommand_desc2_t *cmd_table, 558 const apr_getopt_option_t *option_table, 559 const char *footer, 560 apr_pool_t *pool) 561{ 562 return svn_error_trace(svn_opt_print_help4(os, 563 pgm_name, 564 print_version, 565 quiet, 566 FALSE, 567 version_footer, 568 header, 569 cmd_table, 570 option_table, 571 NULL, 572 footer, 573 pool)); 574} 575 576svn_error_t * 577svn_opt_print_help(apr_getopt_t *os, 578 const char *pgm_name, 579 svn_boolean_t print_version, 580 svn_boolean_t quiet, 581 const char *version_footer, 582 const char *header, 583 const svn_opt_subcommand_desc_t *cmd_table, 584 const apr_getopt_option_t *option_table, 585 const char *footer, 586 apr_pool_t *pool) 587{ 588 apr_array_header_t *targets = NULL; 589 590 if (os) 591 SVN_ERR(svn_opt_parse_all_args(&targets, os, pool)); 592 593 if (os && targets->nelts) /* help on subcommand(s) requested */ 594 { 595 int i; 596 597 for (i = 0; i < targets->nelts; i++) 598 { 599 svn_opt_subcommand_help(APR_ARRAY_IDX(targets, i, const char *), 600 cmd_table, option_table, pool); 601 } 602 } 603 else if (print_version) /* just --version */ 604 { 605 SVN_ERR(svn_opt__print_version_info(pgm_name, version_footer, 606 svn_version_extended(FALSE, pool), 607 quiet, FALSE, pool)); 608 } 609 else if (os && !targets->nelts) /* `-h', `--help', or `help' */ 610 svn_opt_print_generic_help(header, 611 cmd_table, 612 option_table, 613 footer, 614 pool, 615 stdout); 616 else /* unknown option or cmd */ 617 SVN_ERR(svn_cmdline_fprintf(stderr, pool, 618 _("Type '%s help' for usage.\n"), pgm_name)); 619 620 return SVN_NO_ERROR; 621} 622 623void 624svn_opt_print_generic_help(const char *header, 625 const svn_opt_subcommand_desc_t *cmd_table, 626 const apr_getopt_option_t *opt_table, 627 const char *footer, 628 apr_pool_t *pool, FILE *stream) 629{ 630 int i = 0; 631 svn_error_t *err; 632 633 if (header) 634 if ((err = svn_cmdline_fputs(header, stream, pool))) 635 goto print_error; 636 637 while (cmd_table[i].name) 638 { 639 if ((err = svn_cmdline_fputs(" ", stream, pool)) 640 || (err = print_command_info(cmd_table + i, opt_table, FALSE, 641 pool, stream)) 642 || (err = svn_cmdline_fputs("\n", stream, pool))) 643 goto print_error; 644 i++; 645 } 646 647 if ((err = svn_cmdline_fputs("\n", stream, pool))) 648 goto print_error; 649 650 if (footer) 651 if ((err = svn_cmdline_fputs(footer, stream, pool))) 652 goto print_error; 653 654 return; 655 656 print_error: 657 svn_handle_error2(err, stderr, FALSE, "svn: "); 658 svn_error_clear(err); 659} 660 661/*** From io.c ***/ 662svn_error_t * 663svn_io_open_unique_file2(apr_file_t **file, 664 const char **temp_path, 665 const char *path, 666 const char *suffix, 667 svn_io_file_del_t delete_when, 668 apr_pool_t *pool) 669{ 670 const char *dirpath; 671 const char *filename; 672 673 svn_path_split(path, &dirpath, &filename, pool); 674 return svn_error_trace(svn_io_open_uniquely_named(file, temp_path, 675 dirpath, filename, suffix, 676 delete_when, 677 pool, pool)); 678} 679 680svn_error_t * 681svn_io_open_unique_file(apr_file_t **file, 682 const char **temp_path, 683 const char *path, 684 const char *suffix, 685 svn_boolean_t delete_on_close, 686 apr_pool_t *pool) 687{ 688 return svn_error_trace(svn_io_open_unique_file2(file, temp_path, 689 path, suffix, 690 delete_on_close 691 ? svn_io_file_del_on_close 692 : svn_io_file_del_none, 693 pool)); 694} 695 696svn_error_t * 697svn_io_run_diff(const char *dir, 698 const char *const *user_args, 699 int num_user_args, 700 const char *label1, 701 const char *label2, 702 const char *from, 703 const char *to, 704 int *pexitcode, 705 apr_file_t *outfile, 706 apr_file_t *errfile, 707 const char *diff_cmd, 708 apr_pool_t *pool) 709{ 710 SVN_ERR(svn_path_cstring_to_utf8(&diff_cmd, diff_cmd, pool)); 711 712 return svn_error_trace(svn_io_run_diff2(dir, user_args, num_user_args, 713 label1, label2, 714 from, to, pexitcode, 715 outfile, errfile, diff_cmd, 716 pool)); 717} 718 719svn_error_t * 720svn_io_run_diff3_2(int *exitcode, 721 const char *dir, 722 const char *mine, 723 const char *older, 724 const char *yours, 725 const char *mine_label, 726 const char *older_label, 727 const char *yours_label, 728 apr_file_t *merged, 729 const char *diff3_cmd, 730 const apr_array_header_t *user_args, 731 apr_pool_t *pool) 732{ 733 SVN_ERR(svn_path_cstring_to_utf8(&diff3_cmd, diff3_cmd, pool)); 734 735 return svn_error_trace(svn_io_run_diff3_3(exitcode, dir, 736 mine, older, yours, 737 mine_label, older_label, 738 yours_label, merged, 739 diff3_cmd, user_args, pool)); 740} 741 742svn_error_t * 743svn_io_run_diff3(const char *dir, 744 const char *mine, 745 const char *older, 746 const char *yours, 747 const char *mine_label, 748 const char *older_label, 749 const char *yours_label, 750 apr_file_t *merged, 751 int *exitcode, 752 const char *diff3_cmd, 753 apr_pool_t *pool) 754{ 755 return svn_error_trace(svn_io_run_diff3_2(exitcode, dir, mine, older, yours, 756 mine_label, older_label, 757 yours_label, 758 merged, diff3_cmd, NULL, pool)); 759} 760 761svn_error_t * 762svn_io_remove_file(const char *path, 763 apr_pool_t *scratch_pool) 764{ 765 return svn_error_trace(svn_io_remove_file2(path, FALSE, scratch_pool)); 766} 767 768svn_error_t *svn_io_file_lock(const char *lock_file, 769 svn_boolean_t exclusive, 770 apr_pool_t *pool) 771{ 772 return svn_io_file_lock2(lock_file, exclusive, FALSE, pool); 773} 774 775svn_error_t * 776svn_io_get_dirents2(apr_hash_t **dirents, 777 const char *path, 778 apr_pool_t *pool) 779{ 780 /* Note that the first part of svn_io_dirent2_t is identical 781 to svn_io_dirent_t to allow this construct */ 782 return svn_error_trace( 783 svn_io_get_dirents3(dirents, path, FALSE, pool, pool)); 784} 785 786svn_error_t * 787svn_io_get_dirents(apr_hash_t **dirents, 788 const char *path, 789 apr_pool_t *pool) 790{ 791 /* Note that in C, padding is not allowed at the beginning of structs, 792 so this is actually portable, since the kind field of svn_io_dirent_t 793 is first in that struct. */ 794 return svn_io_get_dirents2(dirents, path, pool); 795} 796 797svn_error_t * 798svn_io_start_cmd2(apr_proc_t *cmd_proc, 799 const char *path, 800 const char *cmd, 801 const char *const *args, 802 svn_boolean_t inherit, 803 svn_boolean_t infile_pipe, 804 apr_file_t *infile, 805 svn_boolean_t outfile_pipe, 806 apr_file_t *outfile, 807 svn_boolean_t errfile_pipe, 808 apr_file_t *errfile, 809 apr_pool_t *pool) 810{ 811 return svn_io_start_cmd3(cmd_proc, path, cmd, args, NULL, inherit, 812 infile_pipe, infile, outfile_pipe, outfile, 813 errfile_pipe, errfile, pool); 814} 815 816svn_error_t * 817svn_io_start_cmd(apr_proc_t *cmd_proc, 818 const char *path, 819 const char *cmd, 820 const char *const *args, 821 svn_boolean_t inherit, 822 apr_file_t *infile, 823 apr_file_t *outfile, 824 apr_file_t *errfile, 825 apr_pool_t *pool) 826{ 827 return svn_io_start_cmd2(cmd_proc, path, cmd, args, inherit, FALSE, 828 infile, FALSE, outfile, FALSE, errfile, pool); 829} 830 831svn_error_t * 832svn_io_file_read_full(apr_file_t *file, void *buf, 833 apr_size_t nbytes, apr_size_t *bytes_read, 834 apr_pool_t *pool) 835{ 836 return svn_io_file_read_full2(file, buf, nbytes, bytes_read, NULL, pool); 837} 838 839struct walk_func_filter_baton_t 840{ 841 svn_io_walk_func_t walk_func; 842 void *walk_baton; 843}; 844 845/* Implements svn_io_walk_func_t, but only allows APR_DIR and APR_REG 846 finfo types through to the wrapped function/baton. */ 847static svn_error_t * 848walk_func_filter_func(void *baton, 849 const char *path, 850 const apr_finfo_t *finfo, 851 apr_pool_t *pool) 852{ 853 struct walk_func_filter_baton_t *b = baton; 854 855 if (finfo->filetype == APR_DIR || finfo->filetype == APR_REG) 856 SVN_ERR(b->walk_func(b->walk_baton, path, finfo, pool)); 857 858 return SVN_NO_ERROR; 859} 860 861svn_error_t * 862svn_io_dir_walk(const char *dirname, 863 apr_int32_t wanted, 864 svn_io_walk_func_t walk_func, 865 void *walk_baton, 866 apr_pool_t *pool) 867{ 868 struct walk_func_filter_baton_t baton; 869 baton.walk_func = walk_func; 870 baton.walk_baton = walk_baton; 871 return svn_error_trace(svn_io_dir_walk2(dirname, wanted, 872 walk_func_filter_func, 873 &baton, pool)); 874} 875 876svn_error_t * 877svn_io_stat_dirent(const svn_io_dirent2_t **dirent_p, 878 const char *path, 879 svn_boolean_t ignore_enoent, 880 apr_pool_t *result_pool, 881 apr_pool_t *scratch_pool) 882{ 883 return svn_error_trace( 884 svn_io_stat_dirent2(dirent_p, 885 path, 886 FALSE, 887 ignore_enoent, 888 result_pool, 889 scratch_pool)); 890} 891 892/*** From constructors.c ***/ 893svn_log_changed_path_t * 894svn_log_changed_path_dup(const svn_log_changed_path_t *changed_path, 895 apr_pool_t *pool) 896{ 897 svn_log_changed_path_t *new_changed_path 898 = apr_palloc(pool, sizeof(*new_changed_path)); 899 900 *new_changed_path = *changed_path; 901 902 if (new_changed_path->copyfrom_path) 903 new_changed_path->copyfrom_path = 904 apr_pstrdup(pool, new_changed_path->copyfrom_path); 905 906 return new_changed_path; 907} 908 909/*** From cmdline.c ***/ 910svn_error_t * 911svn_cmdline_prompt_user(const char **result, 912 const char *prompt_str, 913 apr_pool_t *pool) 914{ 915 return svn_error_trace(svn_cmdline_prompt_user2(result, prompt_str, NULL, 916 pool)); 917} 918 919svn_error_t * 920svn_cmdline_setup_auth_baton(svn_auth_baton_t **ab, 921 svn_boolean_t non_interactive, 922 const char *auth_username, 923 const char *auth_password, 924 const char *config_dir, 925 svn_boolean_t no_auth_cache, 926 svn_config_t *cfg, 927 svn_cancel_func_t cancel_func, 928 void *cancel_baton, 929 apr_pool_t *pool) 930{ 931 return svn_error_trace(svn_cmdline_create_auth_baton( 932 ab, non_interactive, 933 auth_username, auth_password, 934 config_dir, no_auth_cache, FALSE, 935 cfg, cancel_func, cancel_baton, pool)); 936} 937 938/*** From dso.c ***/ 939void 940svn_dso_initialize(void) 941{ 942 svn_error_t *err = svn_dso_initialize2(); 943 if (err) 944 { 945 svn_error_clear(err); 946 abort(); 947 } 948} 949 950/*** From simple_providers.c ***/ 951void 952svn_auth_get_simple_provider(svn_auth_provider_object_t **provider, 953 apr_pool_t *pool) 954{ 955 svn_auth_get_simple_provider2(provider, NULL, NULL, pool); 956} 957 958/*** From ssl_client_cert_pw_providers.c ***/ 959void 960svn_auth_get_ssl_client_cert_pw_file_provider 961 (svn_auth_provider_object_t **provider, 962 apr_pool_t *pool) 963{ 964 svn_auth_get_ssl_client_cert_pw_file_provider2(provider, NULL, NULL, pool); 965} 966 967/*** From path.c ***/ 968 969#define SVN_EMPTY_PATH "" 970 971const char * 972svn_path_url_add_component(const char *url, 973 const char *component, 974 apr_pool_t *pool) 975{ 976 /* URL can have trailing '/' */ 977 url = svn_path_canonicalize(url, pool); 978 979 return svn_path_url_add_component2(url, component, pool); 980} 981 982void 983svn_path_split(const char *path, 984 const char **dirpath, 985 const char **base_name, 986 apr_pool_t *pool) 987{ 988 assert(dirpath != base_name); 989 990 if (dirpath) 991 *dirpath = svn_path_dirname(path, pool); 992 993 if (base_name) 994 *base_name = svn_path_basename(path, pool); 995} 996 997 998svn_error_t * 999svn_path_split_if_file(const char *path, 1000 const char **pdirectory, 1001 const char **pfile, 1002 apr_pool_t *pool) 1003{ 1004 apr_finfo_t finfo; 1005 svn_error_t *err; 1006 1007 SVN_ERR_ASSERT(svn_path_is_canonical(path, pool)); 1008 1009 err = svn_io_stat(&finfo, path, APR_FINFO_TYPE, pool); 1010 if (err && ! APR_STATUS_IS_ENOENT(err->apr_err)) 1011 return err; 1012 1013 if (err || finfo.filetype == APR_REG) 1014 { 1015 svn_error_clear(err); 1016 svn_path_split(path, pdirectory, pfile, pool); 1017 } 1018 else if (finfo.filetype == APR_DIR) 1019 { 1020 *pdirectory = path; 1021 *pfile = SVN_EMPTY_PATH; 1022 } 1023 else 1024 { 1025 return svn_error_createf(SVN_ERR_BAD_FILENAME, NULL, 1026 _("'%s' is neither a file nor a directory name"), 1027 svn_path_local_style(path, pool)); 1028 } 1029 1030 return SVN_NO_ERROR; 1031} 1032 1033/*** From stream.c ***/ 1034svn_error_t *svn_stream_copy2(svn_stream_t *from, svn_stream_t *to, 1035 svn_cancel_func_t cancel_func, 1036 void *cancel_baton, 1037 apr_pool_t *scratch_pool) 1038{ 1039 return svn_error_trace(svn_stream_copy3( 1040 svn_stream_disown(from, scratch_pool), 1041 svn_stream_disown(to, scratch_pool), 1042 cancel_func, cancel_baton, scratch_pool)); 1043} 1044 1045svn_error_t *svn_stream_copy(svn_stream_t *from, svn_stream_t *to, 1046 apr_pool_t *scratch_pool) 1047{ 1048 return svn_error_trace(svn_stream_copy3( 1049 svn_stream_disown(from, scratch_pool), 1050 svn_stream_disown(to, scratch_pool), 1051 NULL, NULL, scratch_pool)); 1052} 1053 1054svn_stream_t * 1055svn_stream_from_aprfile(apr_file_t *file, apr_pool_t *pool) 1056{ 1057 return svn_stream_from_aprfile2(file, TRUE, pool); 1058} 1059 1060svn_error_t * 1061svn_stream_contents_same(svn_boolean_t *same, 1062 svn_stream_t *stream1, 1063 svn_stream_t *stream2, 1064 apr_pool_t *pool) 1065{ 1066 return svn_error_trace(svn_stream_contents_same2( 1067 same, 1068 svn_stream_disown(stream1, pool), 1069 svn_stream_disown(stream2, pool), 1070 pool)); 1071} 1072 1073void 1074svn_stream_set_read(svn_stream_t *stream, 1075 svn_read_fn_t read_fn) 1076{ 1077 svn_stream_set_read2(stream, NULL /* only full read support */, 1078 read_fn); 1079} 1080 1081svn_error_t * 1082svn_stream_read(svn_stream_t *stream, 1083 char *buffer, 1084 apr_size_t *len) 1085{ 1086 return svn_error_trace(svn_stream_read_full(stream, buffer, len)); 1087} 1088 1089struct md5_stream_baton 1090{ 1091 const unsigned char **read_digest; 1092 const unsigned char **write_digest; 1093 svn_checksum_t *read_checksum; 1094 svn_checksum_t *write_checksum; 1095 svn_stream_t *proxy; 1096 apr_pool_t *pool; 1097}; 1098 1099static svn_error_t * 1100read_handler_md5(void *baton, char *buffer, apr_size_t *len) 1101{ 1102 struct md5_stream_baton *btn = baton; 1103 return svn_error_trace(svn_stream_read2(btn->proxy, buffer, len)); 1104} 1105 1106static svn_error_t * 1107read_full_handler_md5(void *baton, char *buffer, apr_size_t *len) 1108{ 1109 struct md5_stream_baton *btn = baton; 1110 return svn_error_trace(svn_stream_read_full(btn->proxy, buffer, len)); 1111} 1112 1113static svn_error_t * 1114skip_handler_md5(void *baton, apr_size_t len) 1115{ 1116 struct md5_stream_baton *btn = baton; 1117 return svn_error_trace(svn_stream_skip(btn->proxy, len)); 1118} 1119 1120static svn_error_t * 1121write_handler_md5(void *baton, const char *buffer, apr_size_t *len) 1122{ 1123 struct md5_stream_baton *btn = baton; 1124 return svn_error_trace(svn_stream_write(btn->proxy, buffer, len)); 1125} 1126 1127static svn_error_t * 1128close_handler_md5(void *baton) 1129{ 1130 struct md5_stream_baton *btn = baton; 1131 1132 SVN_ERR(svn_stream_close(btn->proxy)); 1133 1134 if (btn->read_digest) 1135 *btn->read_digest 1136 = apr_pmemdup(btn->pool, btn->read_checksum->digest, 1137 APR_MD5_DIGESTSIZE); 1138 1139 if (btn->write_digest) 1140 *btn->write_digest 1141 = apr_pmemdup(btn->pool, btn->write_checksum->digest, 1142 APR_MD5_DIGESTSIZE); 1143 1144 return SVN_NO_ERROR; 1145} 1146 1147 1148svn_stream_t * 1149svn_stream_checksummed(svn_stream_t *stream, 1150 const unsigned char **read_digest, 1151 const unsigned char **write_digest, 1152 svn_boolean_t read_all, 1153 apr_pool_t *pool) 1154{ 1155 svn_stream_t *s; 1156 struct md5_stream_baton *baton; 1157 1158 if (! read_digest && ! write_digest) 1159 return stream; 1160 1161 baton = apr_palloc(pool, sizeof(*baton)); 1162 baton->read_digest = read_digest; 1163 baton->write_digest = write_digest; 1164 baton->pool = pool; 1165 1166 /* Set BATON->proxy to a stream that will fill in BATON->read_checksum 1167 * and BATON->write_checksum (if we want them) when it is closed. */ 1168 baton->proxy 1169 = svn_stream_checksummed2(stream, 1170 read_digest ? &baton->read_checksum : NULL, 1171 write_digest ? &baton->write_checksum : NULL, 1172 svn_checksum_md5, 1173 read_all, pool); 1174 1175 /* Create a stream that will forward its read/write/close operations to 1176 * BATON->proxy and will fill in *READ_DIGEST and *WRITE_DIGEST (if we 1177 * want them) after it closes BATON->proxy. */ 1178 s = svn_stream_create(baton, pool); 1179 svn_stream_set_read2(s, read_handler_md5, read_full_handler_md5); 1180 svn_stream_set_skip(s, skip_handler_md5); 1181 svn_stream_set_write(s, write_handler_md5); 1182 svn_stream_set_close(s, close_handler_md5); 1183 return s; 1184} 1185 1186/*** From path.c ***/ 1187 1188const char * 1189svn_path_internal_style(const char *path, apr_pool_t *pool) 1190{ 1191 if (svn_path_is_url(path)) 1192 return svn_uri_canonicalize(path, pool); 1193 else 1194 return svn_dirent_internal_style(path, pool); 1195} 1196 1197 1198const char * 1199svn_path_local_style(const char *path, apr_pool_t *pool) 1200{ 1201 if (svn_path_is_url(path)) 1202 return apr_pstrdup(pool, path); 1203 else 1204 return svn_dirent_local_style(path, pool); 1205} 1206 1207const char * 1208svn_path_canonicalize(const char *path, apr_pool_t *pool) 1209{ 1210 if (svn_path_is_url(path)) 1211 return svn_uri_canonicalize(path, pool); 1212 else 1213 return svn_dirent_canonicalize(path, pool); 1214} 1215 1216 1217/*** From mergeinfo.c ***/ 1218 1219svn_error_t * 1220svn_mergeinfo_inheritable(svn_mergeinfo_t *output, 1221 svn_mergeinfo_t mergeinfo, 1222 const char *path, 1223 svn_revnum_t start, 1224 svn_revnum_t end, 1225 apr_pool_t *pool) 1226{ 1227 return svn_error_trace(svn_mergeinfo_inheritable2(output, mergeinfo, path, 1228 start, end, 1229 TRUE, pool, pool)); 1230} 1231 1232svn_error_t * 1233svn_rangelist_inheritable(svn_rangelist_t **inheritable_rangelist, 1234 const svn_rangelist_t *rangelist, 1235 svn_revnum_t start, 1236 svn_revnum_t end, 1237 apr_pool_t *pool) 1238{ 1239 return svn_error_trace(svn_rangelist_inheritable2(inheritable_rangelist, 1240 rangelist, 1241 start, end, TRUE, 1242 pool, pool)); 1243} 1244 1245svn_error_t * 1246svn_rangelist_merge(svn_rangelist_t **rangelist, 1247 const svn_rangelist_t *changes, 1248 apr_pool_t *pool) 1249{ 1250 SVN_ERR(svn_rangelist_merge2(*rangelist, changes, 1251 pool, pool)); 1252 1253 return svn_error_trace( 1254 svn_rangelist__combine_adjacent_ranges(*rangelist, pool)); 1255} 1256 1257svn_error_t * 1258svn_mergeinfo_diff(svn_mergeinfo_t *deleted, svn_mergeinfo_t *added, 1259 svn_mergeinfo_t from, svn_mergeinfo_t to, 1260 svn_boolean_t consider_inheritance, 1261 apr_pool_t *pool) 1262{ 1263 return svn_error_trace(svn_mergeinfo_diff2(deleted, added, from, to, 1264 consider_inheritance, pool, 1265 pool)); 1266} 1267 1268svn_error_t * 1269svn_mergeinfo_merge(svn_mergeinfo_t mergeinfo, 1270 svn_mergeinfo_t changes, 1271 apr_pool_t *pool) 1272{ 1273 return svn_error_trace(svn_mergeinfo_merge2(mergeinfo, changes, pool, 1274 pool)); 1275} 1276 1277svn_error_t * 1278svn_mergeinfo_remove(svn_mergeinfo_t *mergeinfo, svn_mergeinfo_t eraser, 1279 svn_mergeinfo_t whiteboard, apr_pool_t *pool) 1280{ 1281 return svn_mergeinfo_remove2(mergeinfo, eraser, whiteboard, TRUE, pool, 1282 pool); 1283} 1284 1285svn_error_t * 1286svn_mergeinfo_intersect(svn_mergeinfo_t *mergeinfo, 1287 svn_mergeinfo_t mergeinfo1, 1288 svn_mergeinfo_t mergeinfo2, 1289 apr_pool_t *pool) 1290{ 1291 return svn_mergeinfo_intersect2(mergeinfo, mergeinfo1, mergeinfo2, 1292 TRUE, pool, pool); 1293} 1294 1295/*** From config.c ***/ 1296svn_error_t * 1297svn_config_create(svn_config_t **cfgp, 1298 svn_boolean_t section_names_case_sensitive, 1299 apr_pool_t *result_pool) 1300{ 1301 return svn_error_trace(svn_config_create2(cfgp, 1302 section_names_case_sensitive, 1303 FALSE, 1304 result_pool)); 1305} 1306 1307svn_error_t * 1308svn_config_read2(svn_config_t **cfgp, const char *file, 1309 svn_boolean_t must_exist, 1310 svn_boolean_t section_names_case_sensitive, 1311 apr_pool_t *result_pool) 1312{ 1313 return svn_error_trace(svn_config_read3(cfgp, file, 1314 must_exist, 1315 section_names_case_sensitive, 1316 FALSE, 1317 result_pool)); 1318} 1319 1320svn_error_t * 1321svn_config_read(svn_config_t **cfgp, const char *file, 1322 svn_boolean_t must_exist, 1323 apr_pool_t *result_pool) 1324{ 1325 return svn_error_trace(svn_config_read3(cfgp, file, 1326 must_exist, 1327 FALSE, FALSE, 1328 result_pool)); 1329} 1330 1331#ifdef SVN_DISABLE_FULL_VERSION_MATCH 1332/* This double underscore name is used by the 1.6 command line client. 1333 Keeping this name is sufficient for the 1.6 client to use the 1.7 1334 libraries at runtime. */ 1335svn_error_t * 1336svn_opt__eat_peg_revisions(apr_array_header_t **true_targets_p, 1337 apr_array_header_t *targets, 1338 apr_pool_t *pool); 1339svn_error_t * 1340svn_opt__eat_peg_revisions(apr_array_header_t **true_targets_p, 1341 apr_array_header_t *targets, 1342 apr_pool_t *pool) 1343{ 1344 unsigned int i; 1345 apr_array_header_t *true_targets; 1346 1347 true_targets = apr_array_make(pool, 5, sizeof(const char *)); 1348 1349 for (i = 0; i < targets->nelts; i++) 1350 { 1351 const char *target = APR_ARRAY_IDX(targets, i, const char *); 1352 const char *true_target; 1353 1354 SVN_ERR(svn_opt__split_arg_at_peg_revision(&true_target, NULL, 1355 target, pool)); 1356 APR_ARRAY_PUSH(true_targets, const char *) = true_target; 1357 } 1358 1359 SVN_ERR_ASSERT(true_targets_p); 1360 *true_targets_p = true_targets; 1361 1362 return SVN_NO_ERROR; 1363} 1364#endif 1365 1366void 1367svn_xml_make_header(svn_stringbuf_t **str, apr_pool_t *pool) 1368{ 1369 svn_xml_make_header2(str, NULL, pool); 1370} 1371 1372 1373/*** From utf.c ***/ 1374void 1375svn_utf_initialize(apr_pool_t *pool) 1376{ 1377 svn_utf_initialize2(FALSE, pool); 1378} 1379 1380svn_error_t * 1381svn_utf_cstring_from_utf8_ex(const char **dest, 1382 const char *src, 1383 const char *topage, 1384 const char *convset_key, 1385 apr_pool_t *pool) 1386{ 1387 return svn_utf_cstring_from_utf8_ex2(dest, src, topage, pool); 1388} 1389 1390/*** From error.c ***/ 1391void 1392svn_handle_error(svn_error_t *err, FILE *stream, svn_boolean_t fatal) 1393{ 1394 svn_handle_error2(err, stream, fatal, "svn: "); 1395} 1396 1397void 1398svn_handle_warning(FILE *stream, svn_error_t *err) 1399{ 1400 svn_handle_warning2(stream, err, "svn: "); 1401} 1402 1403 1404/*** From subst.c ***/ 1405svn_error_t * 1406svn_subst_build_keywords(svn_subst_keywords_t *kw, 1407 const char *keywords_val, 1408 const char *rev, 1409 const char *url, 1410 apr_time_t date, 1411 const char *author, 1412 apr_pool_t *pool) 1413{ 1414 apr_hash_t *kwhash; 1415 const svn_string_t *val; 1416 1417 SVN_ERR(svn_subst_build_keywords2(&kwhash, keywords_val, rev, 1418 url, date, author, pool)); 1419 1420 /* The behaviour of pre-1.3 svn_subst_build_keywords, which we are 1421 * replicating here, is to write to a slot in the svn_subst_keywords_t 1422 * only if the relevant keyword was present in keywords_val, otherwise 1423 * leaving that slot untouched. */ 1424 1425 val = svn_hash_gets(kwhash, SVN_KEYWORD_REVISION_LONG); 1426 if (val) 1427 kw->revision = val; 1428 1429 val = svn_hash_gets(kwhash, SVN_KEYWORD_DATE_LONG); 1430 if (val) 1431 kw->date = val; 1432 1433 val = svn_hash_gets(kwhash, SVN_KEYWORD_AUTHOR_LONG); 1434 if (val) 1435 kw->author = val; 1436 1437 val = svn_hash_gets(kwhash, SVN_KEYWORD_URL_LONG); 1438 if (val) 1439 kw->url = val; 1440 1441 val = svn_hash_gets(kwhash, SVN_KEYWORD_ID); 1442 if (val) 1443 kw->id = val; 1444 1445 return SVN_NO_ERROR; 1446} 1447 1448/*** From version.c ***/ 1449svn_error_t * 1450svn_ver_check_list(const svn_version_t *my_version, 1451 const svn_version_checklist_t *checklist) 1452{ 1453 return svn_ver_check_list2(my_version, checklist, svn_ver_compatible); 1454} 1455 1456/*** From win32_crypto.c ***/ 1457#if defined(WIN32) && !defined(__MINGW32__) 1458void 1459svn_auth_get_windows_simple_provider(svn_auth_provider_object_t **provider, 1460 apr_pool_t *pool) 1461{ 1462 svn_auth__get_windows_simple_provider(provider, pool); 1463} 1464 1465void 1466svn_auth_get_windows_ssl_client_cert_pw_provider 1467 (svn_auth_provider_object_t **provider, 1468 apr_pool_t *pool) 1469{ 1470 svn_auth__get_windows_ssl_client_cert_pw_provider(provider, pool); 1471} 1472 1473void 1474svn_auth_get_windows_ssl_server_trust_provider 1475 (svn_auth_provider_object_t **provider, apr_pool_t *pool) 1476{ 1477 svn_auth__get_windows_ssl_server_trust_provider(provider, pool); 1478} 1479#endif /* WIN32 && !__MINGW32__ */ 1480 1481/*** From macos_keychain.c ***/ 1482#if defined(DARWIN) 1483void 1484svn_auth_get_keychain_simple_provider(svn_auth_provider_object_t **provider, 1485 apr_pool_t *pool) 1486{ 1487#ifdef SVN_HAVE_KEYCHAIN_SERVICES 1488 svn_auth__get_keychain_simple_provider(provider, pool); 1489#else 1490 svn_auth__get_dummmy_simple_provider(provider, pool); 1491#endif 1492} 1493 1494void 1495svn_auth_get_keychain_ssl_client_cert_pw_provider 1496 (svn_auth_provider_object_t **provider, 1497 apr_pool_t *pool) 1498{ 1499#ifdef SVN_HAVE_KEYCHAIN_SERVICES 1500 svn_auth__get_keychain_ssl_client_cert_pw_provider(provider, pool); 1501#else 1502 /* Not really the right type of dummy provider, but doesn't throw NULL 1503 errors as just returning NULL would */ 1504 svn_auth__get_dummmy_simple_provider(provider, pool); 1505#endif 1506} 1507#endif /* DARWIN */ 1508 1509#if !defined(WIN32) 1510void 1511svn_auth_get_gpg_agent_simple_provider(svn_auth_provider_object_t **provider, 1512 apr_pool_t *pool) 1513{ 1514#ifdef SVN_HAVE_GPG_AGENT 1515 svn_auth__get_gpg_agent_simple_provider(provider, pool); 1516#else 1517 svn_auth__get_dummmy_simple_provider(provider, pool); 1518#endif /* SVN_HAVE_GPG_AGENT */ 1519} 1520#endif /* !WIN32 */ 1521 1522svn_error_t * 1523svn_cmdline_create_auth_baton(svn_auth_baton_t **ab, 1524 svn_boolean_t non_interactive, 1525 const char *auth_username, 1526 const char *auth_password, 1527 const char *config_dir, 1528 svn_boolean_t no_auth_cache, 1529 svn_boolean_t trust_server_cert, 1530 svn_config_t *cfg, 1531 svn_cancel_func_t cancel_func, 1532 void *cancel_baton, 1533 apr_pool_t *pool) 1534{ 1535 return svn_error_trace(svn_cmdline_create_auth_baton2(ab, 1536 non_interactive, 1537 auth_username, 1538 auth_password, 1539 config_dir, 1540 no_auth_cache, 1541 trust_server_cert, 1542 FALSE, 1543 FALSE, 1544 FALSE, 1545 FALSE, 1546 cfg, 1547 cancel_func, 1548 cancel_baton, 1549 pool)); 1550} 1551