deprecated.c revision 309511
1251881Speter/* 2251881Speter * deprecated.c: holding file for all deprecated APIs. 3251881Speter * "we can't lose 'em, but we can shun 'em!" 4251881Speter * 5251881Speter * ==================================================================== 6251881Speter * Licensed to the Apache Software Foundation (ASF) under one 7251881Speter * or more contributor license agreements. See the NOTICE file 8251881Speter * distributed with this work for additional information 9251881Speter * regarding copyright ownership. The ASF licenses this file 10251881Speter * to you under the Apache License, Version 2.0 (the 11251881Speter * "License"); you may not use this file except in compliance 12251881Speter * with the License. You may obtain a copy of the License at 13251881Speter * 14251881Speter * http://www.apache.org/licenses/LICENSE-2.0 15251881Speter * 16251881Speter * Unless required by applicable law or agreed to in writing, 17251881Speter * software distributed under the License is distributed on an 18251881Speter * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 19251881Speter * KIND, either express or implied. See the License for the 20251881Speter * specific language governing permissions and limitations 21251881Speter * under the License. 22251881Speter * ==================================================================== 23251881Speter */ 24251881Speter 25251881Speter/* ==================================================================== */ 26251881Speter 27251881Speter 28251881Speter 29251881Speter#include <assert.h> 30251881Speter 31289180Speter#include <apr_md5.h> 32289180Speter 33251881Speter/* We define this here to remove any further warnings about the usage of 34251881Speter deprecated functions in this file. */ 35251881Speter#define SVN_DEPRECATED 36251881Speter 37251881Speter#include "svn_hash.h" 38251881Speter#include "svn_subst.h" 39251881Speter#include "svn_path.h" 40251881Speter#include "svn_opt.h" 41251881Speter#include "svn_cmdline.h" 42251881Speter#include "svn_version.h" 43251881Speter#include "svn_pools.h" 44251881Speter#include "svn_dso.h" 45251881Speter#include "svn_mergeinfo.h" 46251881Speter#include "svn_utf.h" 47251881Speter#include "svn_xml.h" 48289180Speter#include "svn_auth.h" 49251881Speter 50251881Speter#include "opt.h" 51289180Speter#include "auth.h" 52251881Speter#include "private/svn_opt_private.h" 53251881Speter#include "private/svn_mergeinfo_private.h" 54251881Speter 55251881Speter#include "svn_private_config.h" 56251881Speter 57251881Speter 58251881Speter 59251881Speter 60251881Speter/*** Code. ***/ 61251881Speter 62251881Speter/*** From subst.c ***/ 63251881Speter/* Convert an old-style svn_subst_keywords_t struct * into a new-style 64251881Speter * keywords hash. Keyword values are shallow copies, so the produced 65251881Speter * hash must not be assumed to have lifetime longer than the struct it 66251881Speter * is based on. A NULL input causes a NULL output. */ 67251881Speterstatic apr_hash_t * 68251881Speterkwstruct_to_kwhash(const svn_subst_keywords_t *kwstruct, 69251881Speter apr_pool_t *pool) 70251881Speter{ 71251881Speter apr_hash_t *kwhash; 72251881Speter 73251881Speter if (kwstruct == NULL) 74251881Speter return NULL; 75251881Speter 76251881Speter kwhash = apr_hash_make(pool); 77251881Speter 78251881Speter if (kwstruct->revision) 79251881Speter { 80251881Speter svn_hash_sets(kwhash, SVN_KEYWORD_REVISION_LONG, kwstruct->revision); 81251881Speter svn_hash_sets(kwhash, SVN_KEYWORD_REVISION_MEDIUM, kwstruct->revision); 82251881Speter svn_hash_sets(kwhash, SVN_KEYWORD_REVISION_SHORT, kwstruct->revision); 83251881Speter } 84251881Speter if (kwstruct->date) 85251881Speter { 86251881Speter svn_hash_sets(kwhash, SVN_KEYWORD_DATE_LONG, kwstruct->date); 87251881Speter svn_hash_sets(kwhash, SVN_KEYWORD_DATE_SHORT, kwstruct->date); 88251881Speter } 89251881Speter if (kwstruct->author) 90251881Speter { 91251881Speter svn_hash_sets(kwhash, SVN_KEYWORD_AUTHOR_LONG, kwstruct->author); 92251881Speter svn_hash_sets(kwhash, SVN_KEYWORD_AUTHOR_SHORT, kwstruct->author); 93251881Speter } 94251881Speter if (kwstruct->url) 95251881Speter { 96251881Speter svn_hash_sets(kwhash, SVN_KEYWORD_URL_LONG, kwstruct->url); 97251881Speter svn_hash_sets(kwhash, SVN_KEYWORD_URL_SHORT, kwstruct->url); 98251881Speter } 99251881Speter if (kwstruct->id) 100251881Speter { 101251881Speter svn_hash_sets(kwhash, SVN_KEYWORD_ID, kwstruct->id); 102251881Speter } 103251881Speter 104251881Speter return kwhash; 105251881Speter} 106251881Speter 107251881Speter 108251881Spetersvn_error_t * 109251881Spetersvn_subst_translate_stream3(svn_stream_t *src_stream, 110251881Speter svn_stream_t *dst_stream, 111251881Speter const char *eol_str, 112251881Speter svn_boolean_t repair, 113251881Speter apr_hash_t *keywords, 114251881Speter svn_boolean_t expand, 115251881Speter apr_pool_t *pool) 116251881Speter{ 117251881Speter /* The docstring requires that *some* translation be requested. */ 118251881Speter SVN_ERR_ASSERT(eol_str || keywords); 119251881Speter 120251881Speter /* We don't want the copy3 to close the provided streams. */ 121251881Speter src_stream = svn_stream_disown(src_stream, pool); 122251881Speter dst_stream = svn_stream_disown(dst_stream, pool); 123251881Speter 124251881Speter /* Wrap the destination stream with our translation stream. It is more 125251881Speter efficient than wrapping the source stream. */ 126251881Speter dst_stream = svn_subst_stream_translated(dst_stream, eol_str, repair, 127251881Speter keywords, expand, pool); 128251881Speter 129251881Speter return svn_error_trace(svn_stream_copy3(src_stream, dst_stream, 130251881Speter NULL, NULL, pool)); 131251881Speter} 132251881Speter 133251881Spetersvn_error_t * 134251881Spetersvn_subst_translate_stream2(svn_stream_t *s, /* src stream */ 135251881Speter svn_stream_t *d, /* dst stream */ 136251881Speter const char *eol_str, 137251881Speter svn_boolean_t repair, 138251881Speter const svn_subst_keywords_t *keywords, 139251881Speter svn_boolean_t expand, 140251881Speter apr_pool_t *pool) 141251881Speter{ 142251881Speter apr_hash_t *kh = kwstruct_to_kwhash(keywords, pool); 143251881Speter 144251881Speter return svn_error_trace(svn_subst_translate_stream3(s, d, eol_str, repair, 145251881Speter kh, expand, pool)); 146251881Speter} 147251881Speter 148251881Spetersvn_error_t * 149251881Spetersvn_subst_translate_stream(svn_stream_t *s, /* src stream */ 150251881Speter svn_stream_t *d, /* dst stream */ 151251881Speter const char *eol_str, 152251881Speter svn_boolean_t repair, 153251881Speter const svn_subst_keywords_t *keywords, 154251881Speter svn_boolean_t expand) 155251881Speter{ 156251881Speter apr_pool_t *pool = svn_pool_create(NULL); 157251881Speter svn_error_t *err = svn_subst_translate_stream2(s, d, eol_str, repair, 158251881Speter keywords, expand, pool); 159251881Speter svn_pool_destroy(pool); 160251881Speter return svn_error_trace(err); 161251881Speter} 162251881Speter 163251881Spetersvn_error_t * 164251881Spetersvn_subst_translate_cstring(const char *src, 165251881Speter const char **dst, 166251881Speter const char *eol_str, 167251881Speter svn_boolean_t repair, 168251881Speter const svn_subst_keywords_t *keywords, 169251881Speter svn_boolean_t expand, 170251881Speter apr_pool_t *pool) 171251881Speter{ 172251881Speter apr_hash_t *kh = kwstruct_to_kwhash(keywords, pool); 173251881Speter 174251881Speter return svn_error_trace(svn_subst_translate_cstring2(src, dst, eol_str, 175251881Speter repair, kh, expand, 176251881Speter pool)); 177251881Speter} 178251881Speter 179251881Spetersvn_error_t * 180251881Spetersvn_subst_copy_and_translate(const char *src, 181251881Speter const char *dst, 182251881Speter const char *eol_str, 183251881Speter svn_boolean_t repair, 184251881Speter const svn_subst_keywords_t *keywords, 185251881Speter svn_boolean_t expand, 186251881Speter apr_pool_t *pool) 187251881Speter{ 188251881Speter return svn_error_trace(svn_subst_copy_and_translate2(src, dst, eol_str, 189251881Speter repair, keywords, 190251881Speter expand, FALSE, pool)); 191251881Speter} 192251881Speter 193251881Spetersvn_error_t * 194251881Spetersvn_subst_copy_and_translate2(const char *src, 195251881Speter const char *dst, 196251881Speter const char *eol_str, 197251881Speter svn_boolean_t repair, 198251881Speter const svn_subst_keywords_t *keywords, 199251881Speter svn_boolean_t expand, 200251881Speter svn_boolean_t special, 201251881Speter apr_pool_t *pool) 202251881Speter{ 203251881Speter apr_hash_t *kh = kwstruct_to_kwhash(keywords, pool); 204251881Speter 205251881Speter return svn_error_trace(svn_subst_copy_and_translate3(src, dst, eol_str, 206251881Speter repair, kh, expand, 207251881Speter special, pool)); 208251881Speter} 209251881Speter 210251881Spetersvn_error_t * 211251881Spetersvn_subst_copy_and_translate3(const char *src, 212251881Speter const char *dst, 213251881Speter const char *eol_str, 214251881Speter svn_boolean_t repair, 215251881Speter apr_hash_t *keywords, 216251881Speter svn_boolean_t expand, 217251881Speter svn_boolean_t special, 218251881Speter apr_pool_t *pool) 219251881Speter{ 220251881Speter return svn_error_trace(svn_subst_copy_and_translate4(src, dst, eol_str, 221251881Speter repair, keywords, 222251881Speter expand, special, 223251881Speter NULL, NULL, 224251881Speter pool)); 225251881Speter} 226251881Speter 227251881Speter 228251881Spetersvn_error_t * 229251881Spetersvn_subst_stream_translated_to_normal_form(svn_stream_t **stream, 230251881Speter svn_stream_t *source, 231251881Speter svn_subst_eol_style_t eol_style, 232251881Speter const char *eol_str, 233251881Speter svn_boolean_t always_repair_eols, 234251881Speter apr_hash_t *keywords, 235251881Speter apr_pool_t *pool) 236251881Speter{ 237251881Speter if (eol_style == svn_subst_eol_style_native) 238251881Speter eol_str = SVN_SUBST_NATIVE_EOL_STR; 239251881Speter else if (! (eol_style == svn_subst_eol_style_fixed 240251881Speter || eol_style == svn_subst_eol_style_none)) 241251881Speter return svn_error_create(SVN_ERR_IO_UNKNOWN_EOL, NULL, NULL); 242251881Speter 243251881Speter *stream = svn_subst_stream_translated(source, eol_str, 244251881Speter eol_style == svn_subst_eol_style_fixed 245251881Speter || always_repair_eols, 246251881Speter keywords, FALSE, pool); 247251881Speter 248251881Speter return SVN_NO_ERROR; 249251881Speter} 250251881Speter 251251881Spetersvn_error_t * 252251881Spetersvn_subst_translate_string(svn_string_t **new_value, 253251881Speter const svn_string_t *value, 254251881Speter const char *encoding, 255251881Speter apr_pool_t *pool) 256251881Speter{ 257251881Speter return svn_subst_translate_string2(new_value, NULL, NULL, value, 258251881Speter encoding, FALSE, pool, pool); 259251881Speter} 260251881Speter 261251881Spetersvn_error_t * 262251881Spetersvn_subst_stream_detranslated(svn_stream_t **stream_p, 263251881Speter const char *src, 264251881Speter svn_subst_eol_style_t eol_style, 265251881Speter const char *eol_str, 266251881Speter svn_boolean_t always_repair_eols, 267251881Speter apr_hash_t *keywords, 268251881Speter svn_boolean_t special, 269251881Speter apr_pool_t *pool) 270251881Speter{ 271251881Speter svn_stream_t *src_stream; 272251881Speter 273251881Speter if (special) 274251881Speter return svn_subst_read_specialfile(stream_p, src, pool, pool); 275251881Speter 276251881Speter /* This will be closed by svn_subst_stream_translated_to_normal_form 277251881Speter when the returned stream is closed. */ 278251881Speter SVN_ERR(svn_stream_open_readonly(&src_stream, src, pool, pool)); 279251881Speter 280251881Speter return svn_error_trace(svn_subst_stream_translated_to_normal_form( 281251881Speter stream_p, src_stream, 282251881Speter eol_style, eol_str, 283251881Speter always_repair_eols, 284251881Speter keywords, pool)); 285251881Speter} 286251881Speter 287251881Spetersvn_error_t * 288251881Spetersvn_subst_translate_to_normal_form(const char *src, 289251881Speter const char *dst, 290251881Speter svn_subst_eol_style_t eol_style, 291251881Speter const char *eol_str, 292251881Speter svn_boolean_t always_repair_eols, 293251881Speter apr_hash_t *keywords, 294251881Speter svn_boolean_t special, 295251881Speter apr_pool_t *pool) 296251881Speter{ 297251881Speter 298251881Speter if (eol_style == svn_subst_eol_style_native) 299251881Speter eol_str = SVN_SUBST_NATIVE_EOL_STR; 300251881Speter else if (! (eol_style == svn_subst_eol_style_fixed 301251881Speter || eol_style == svn_subst_eol_style_none)) 302251881Speter return svn_error_create(SVN_ERR_IO_UNKNOWN_EOL, NULL, NULL); 303251881Speter 304251881Speter return svn_error_trace(svn_subst_copy_and_translate3( 305251881Speter src, dst, eol_str, 306251881Speter eol_style == svn_subst_eol_style_fixed 307251881Speter || always_repair_eols, 308251881Speter keywords, 309251881Speter FALSE /* contract keywords */, 310251881Speter special, 311251881Speter pool)); 312251881Speter} 313251881Speter 314251881Speter 315251881Speter/*** From opt.c ***/ 316251881Speter/* Same as print_command_info2(), but with deprecated struct revision. */ 317251881Speterstatic svn_error_t * 318251881Speterprint_command_info(const svn_opt_subcommand_desc_t *cmd, 319251881Speter const apr_getopt_option_t *options_table, 320251881Speter svn_boolean_t help, 321251881Speter apr_pool_t *pool, 322251881Speter FILE *stream) 323251881Speter{ 324251881Speter svn_boolean_t first_time; 325251881Speter apr_size_t i; 326251881Speter 327251881Speter /* Print the canonical command name. */ 328251881Speter SVN_ERR(svn_cmdline_fputs(cmd->name, stream, pool)); 329251881Speter 330251881Speter /* Print the list of aliases. */ 331251881Speter first_time = TRUE; 332251881Speter for (i = 0; i < SVN_OPT_MAX_ALIASES; i++) 333251881Speter { 334251881Speter if (cmd->aliases[i] == NULL) 335251881Speter break; 336251881Speter 337251881Speter if (first_time) { 338251881Speter SVN_ERR(svn_cmdline_fputs(" (", stream, pool)); 339251881Speter first_time = FALSE; 340251881Speter } 341251881Speter else 342251881Speter SVN_ERR(svn_cmdline_fputs(", ", stream, pool)); 343251881Speter 344251881Speter SVN_ERR(svn_cmdline_fputs(cmd->aliases[i], stream, pool)); 345251881Speter } 346251881Speter 347251881Speter if (! first_time) 348251881Speter SVN_ERR(svn_cmdline_fputs(")", stream, pool)); 349251881Speter 350251881Speter if (help) 351251881Speter { 352251881Speter const apr_getopt_option_t *option; 353251881Speter svn_boolean_t have_options = FALSE; 354251881Speter 355251881Speter SVN_ERR(svn_cmdline_fprintf(stream, pool, ": %s", _(cmd->help))); 356251881Speter 357251881Speter /* Loop over all valid option codes attached to the subcommand */ 358251881Speter for (i = 0; i < SVN_OPT_MAX_OPTIONS; i++) 359251881Speter { 360251881Speter if (cmd->valid_options[i]) 361251881Speter { 362251881Speter if (!have_options) 363251881Speter { 364251881Speter SVN_ERR(svn_cmdline_fputs(_("\nValid options:\n"), 365251881Speter stream, pool)); 366251881Speter have_options = TRUE; 367251881Speter } 368251881Speter 369251881Speter /* convert each option code into an option */ 370251881Speter option = 371251881Speter svn_opt_get_option_from_code2(cmd->valid_options[i], 372251881Speter options_table, NULL, pool); 373251881Speter 374251881Speter /* print the option's docstring */ 375251881Speter if (option && option->description) 376251881Speter { 377251881Speter const char *optstr; 378251881Speter svn_opt_format_option(&optstr, option, TRUE, pool); 379251881Speter SVN_ERR(svn_cmdline_fprintf(stream, pool, " %s\n", 380251881Speter optstr)); 381251881Speter } 382251881Speter } 383251881Speter } 384251881Speter 385251881Speter if (have_options) 386251881Speter SVN_ERR(svn_cmdline_fprintf(stream, pool, "\n")); 387251881Speter } 388251881Speter 389251881Speter return SVN_NO_ERROR; 390251881Speter} 391251881Speter 392251881Speterconst svn_opt_subcommand_desc_t * 393251881Spetersvn_opt_get_canonical_subcommand(const svn_opt_subcommand_desc_t *table, 394251881Speter const char *cmd_name) 395251881Speter{ 396251881Speter int i = 0; 397251881Speter 398251881Speter if (cmd_name == NULL) 399251881Speter return NULL; 400251881Speter 401251881Speter while (table[i].name) { 402251881Speter int j; 403251881Speter if (strcmp(cmd_name, table[i].name) == 0) 404251881Speter return table + i; 405251881Speter for (j = 0; (j < SVN_OPT_MAX_ALIASES) && table[i].aliases[j]; j++) 406251881Speter if (strcmp(cmd_name, table[i].aliases[j]) == 0) 407251881Speter return table + i; 408251881Speter 409251881Speter i++; 410251881Speter } 411251881Speter 412251881Speter /* If we get here, there was no matching subcommand name or alias. */ 413251881Speter return NULL; 414251881Speter} 415251881Speter 416251881Spetervoid 417251881Spetersvn_opt_subcommand_help2(const char *subcommand, 418251881Speter const svn_opt_subcommand_desc2_t *table, 419251881Speter const apr_getopt_option_t *options_table, 420251881Speter apr_pool_t *pool) 421251881Speter{ 422251881Speter svn_opt_subcommand_help3(subcommand, table, options_table, 423251881Speter NULL, pool); 424251881Speter} 425251881Speter 426251881Spetervoid 427251881Spetersvn_opt_subcommand_help(const char *subcommand, 428251881Speter const svn_opt_subcommand_desc_t *table, 429251881Speter const apr_getopt_option_t *options_table, 430251881Speter apr_pool_t *pool) 431251881Speter{ 432251881Speter const svn_opt_subcommand_desc_t *cmd = 433251881Speter svn_opt_get_canonical_subcommand(table, subcommand); 434251881Speter svn_error_t *err; 435251881Speter 436251881Speter if (cmd) 437251881Speter err = print_command_info(cmd, options_table, TRUE, pool, stdout); 438251881Speter else 439251881Speter err = svn_cmdline_fprintf(stderr, pool, 440251881Speter _("\"%s\": unknown command.\n\n"), subcommand); 441251881Speter 442251881Speter if (err) { 443251881Speter svn_handle_error2(err, stderr, FALSE, "svn: "); 444251881Speter svn_error_clear(err); 445251881Speter } 446251881Speter} 447251881Speter 448251881Spetersvn_error_t * 449251881Spetersvn_opt_args_to_target_array3(apr_array_header_t **targets_p, 450251881Speter apr_getopt_t *os, 451251881Speter const apr_array_header_t *known_targets, 452251881Speter apr_pool_t *pool) 453251881Speter{ 454251881Speter return svn_error_trace(svn_opt__args_to_target_array(targets_p, os, 455251881Speter known_targets, pool)); 456251881Speter} 457251881Speter 458251881Spetersvn_error_t * 459251881Spetersvn_opt_args_to_target_array2(apr_array_header_t **targets_p, 460251881Speter apr_getopt_t *os, 461251881Speter const apr_array_header_t *known_targets, 462251881Speter apr_pool_t *pool) 463251881Speter{ 464251881Speter svn_error_t *err = svn_opt_args_to_target_array3(targets_p, os, 465251881Speter known_targets, pool); 466251881Speter 467251881Speter if (err && err->apr_err == SVN_ERR_RESERVED_FILENAME_SPECIFIED) 468251881Speter { 469251881Speter svn_error_clear(err); 470251881Speter return SVN_NO_ERROR; 471251881Speter } 472251881Speter 473251881Speter return err; 474251881Speter} 475251881Speter 476251881Spetersvn_error_t * 477251881Spetersvn_opt_args_to_target_array(apr_array_header_t **targets_p, 478251881Speter apr_getopt_t *os, 479251881Speter const apr_array_header_t *known_targets, 480251881Speter svn_opt_revision_t *start_revision, 481251881Speter svn_opt_revision_t *end_revision, 482251881Speter svn_boolean_t extract_revisions, 483251881Speter apr_pool_t *pool) 484251881Speter{ 485251881Speter apr_array_header_t *output_targets; 486251881Speter 487251881Speter SVN_ERR(svn_opt_args_to_target_array2(&output_targets, os, 488251881Speter known_targets, pool)); 489251881Speter 490251881Speter if (extract_revisions) 491251881Speter { 492251881Speter svn_opt_revision_t temprev; 493251881Speter const char *path; 494251881Speter 495251881Speter if (output_targets->nelts > 0) 496251881Speter { 497251881Speter path = APR_ARRAY_IDX(output_targets, 0, const char *); 498251881Speter SVN_ERR(svn_opt_parse_path(&temprev, &path, path, pool)); 499251881Speter if (temprev.kind != svn_opt_revision_unspecified) 500251881Speter { 501251881Speter APR_ARRAY_IDX(output_targets, 0, const char *) = path; 502251881Speter start_revision->kind = temprev.kind; 503251881Speter start_revision->value = temprev.value; 504251881Speter } 505251881Speter } 506251881Speter if (output_targets->nelts > 1) 507251881Speter { 508251881Speter path = APR_ARRAY_IDX(output_targets, 1, const char *); 509251881Speter SVN_ERR(svn_opt_parse_path(&temprev, &path, path, pool)); 510251881Speter if (temprev.kind != svn_opt_revision_unspecified) 511251881Speter { 512251881Speter APR_ARRAY_IDX(output_targets, 1, const char *) = path; 513251881Speter end_revision->kind = temprev.kind; 514251881Speter end_revision->value = temprev.value; 515251881Speter } 516251881Speter } 517251881Speter } 518251881Speter 519251881Speter *targets_p = output_targets; 520251881Speter return SVN_NO_ERROR; 521251881Speter} 522251881Speter 523251881Spetersvn_error_t * 524251881Spetersvn_opt_print_help3(apr_getopt_t *os, 525251881Speter const char *pgm_name, 526251881Speter svn_boolean_t print_version, 527251881Speter svn_boolean_t quiet, 528251881Speter const char *version_footer, 529251881Speter const char *header, 530251881Speter const svn_opt_subcommand_desc2_t *cmd_table, 531251881Speter const apr_getopt_option_t *option_table, 532251881Speter const int *global_options, 533251881Speter const char *footer, 534251881Speter apr_pool_t *pool) 535251881Speter{ 536251881Speter return svn_error_trace(svn_opt_print_help4(os, 537251881Speter pgm_name, 538251881Speter print_version, 539251881Speter quiet, 540251881Speter FALSE, 541251881Speter version_footer, 542251881Speter header, 543251881Speter cmd_table, 544251881Speter option_table, 545251881Speter global_options, 546251881Speter footer, 547251881Speter pool)); 548251881Speter} 549251881Speter 550251881Spetersvn_error_t * 551251881Spetersvn_opt_print_help2(apr_getopt_t *os, 552251881Speter const char *pgm_name, 553251881Speter svn_boolean_t print_version, 554251881Speter svn_boolean_t quiet, 555251881Speter const char *version_footer, 556251881Speter const char *header, 557251881Speter const svn_opt_subcommand_desc2_t *cmd_table, 558251881Speter const apr_getopt_option_t *option_table, 559251881Speter const char *footer, 560251881Speter apr_pool_t *pool) 561251881Speter{ 562251881Speter return svn_error_trace(svn_opt_print_help4(os, 563251881Speter pgm_name, 564251881Speter print_version, 565251881Speter quiet, 566251881Speter FALSE, 567251881Speter version_footer, 568251881Speter header, 569251881Speter cmd_table, 570251881Speter option_table, 571251881Speter NULL, 572251881Speter footer, 573251881Speter pool)); 574251881Speter} 575251881Speter 576251881Spetersvn_error_t * 577251881Spetersvn_opt_print_help(apr_getopt_t *os, 578251881Speter const char *pgm_name, 579251881Speter svn_boolean_t print_version, 580251881Speter svn_boolean_t quiet, 581251881Speter const char *version_footer, 582251881Speter const char *header, 583251881Speter const svn_opt_subcommand_desc_t *cmd_table, 584251881Speter const apr_getopt_option_t *option_table, 585251881Speter const char *footer, 586251881Speter apr_pool_t *pool) 587251881Speter{ 588251881Speter apr_array_header_t *targets = NULL; 589251881Speter 590251881Speter if (os) 591251881Speter SVN_ERR(svn_opt_parse_all_args(&targets, os, pool)); 592251881Speter 593251881Speter if (os && targets->nelts) /* help on subcommand(s) requested */ 594251881Speter { 595251881Speter int i; 596251881Speter 597251881Speter for (i = 0; i < targets->nelts; i++) 598251881Speter { 599251881Speter svn_opt_subcommand_help(APR_ARRAY_IDX(targets, i, const char *), 600251881Speter cmd_table, option_table, pool); 601251881Speter } 602251881Speter } 603251881Speter else if (print_version) /* just --version */ 604251881Speter { 605251881Speter SVN_ERR(svn_opt__print_version_info(pgm_name, version_footer, 606251881Speter svn_version_extended(FALSE, pool), 607251881Speter quiet, FALSE, pool)); 608251881Speter } 609251881Speter else if (os && !targets->nelts) /* `-h', `--help', or `help' */ 610251881Speter svn_opt_print_generic_help(header, 611251881Speter cmd_table, 612251881Speter option_table, 613251881Speter footer, 614251881Speter pool, 615251881Speter stdout); 616251881Speter else /* unknown option or cmd */ 617251881Speter SVN_ERR(svn_cmdline_fprintf(stderr, pool, 618251881Speter _("Type '%s help' for usage.\n"), pgm_name)); 619251881Speter 620251881Speter return SVN_NO_ERROR; 621251881Speter} 622251881Speter 623251881Spetervoid 624251881Spetersvn_opt_print_generic_help(const char *header, 625251881Speter const svn_opt_subcommand_desc_t *cmd_table, 626251881Speter const apr_getopt_option_t *opt_table, 627251881Speter const char *footer, 628251881Speter apr_pool_t *pool, FILE *stream) 629251881Speter{ 630251881Speter int i = 0; 631251881Speter svn_error_t *err; 632251881Speter 633251881Speter if (header) 634251881Speter if ((err = svn_cmdline_fputs(header, stream, pool))) 635251881Speter goto print_error; 636251881Speter 637251881Speter while (cmd_table[i].name) 638251881Speter { 639251881Speter if ((err = svn_cmdline_fputs(" ", stream, pool)) 640251881Speter || (err = print_command_info(cmd_table + i, opt_table, FALSE, 641251881Speter pool, stream)) 642251881Speter || (err = svn_cmdline_fputs("\n", stream, pool))) 643251881Speter goto print_error; 644251881Speter i++; 645251881Speter } 646251881Speter 647251881Speter if ((err = svn_cmdline_fputs("\n", stream, pool))) 648251881Speter goto print_error; 649251881Speter 650251881Speter if (footer) 651251881Speter if ((err = svn_cmdline_fputs(footer, stream, pool))) 652251881Speter goto print_error; 653251881Speter 654251881Speter return; 655251881Speter 656251881Speter print_error: 657251881Speter svn_handle_error2(err, stderr, FALSE, "svn: "); 658251881Speter svn_error_clear(err); 659251881Speter} 660251881Speter 661251881Speter/*** From io.c ***/ 662251881Spetersvn_error_t * 663251881Spetersvn_io_open_unique_file2(apr_file_t **file, 664251881Speter const char **temp_path, 665251881Speter const char *path, 666251881Speter const char *suffix, 667251881Speter svn_io_file_del_t delete_when, 668251881Speter apr_pool_t *pool) 669251881Speter{ 670251881Speter const char *dirpath; 671251881Speter const char *filename; 672251881Speter 673251881Speter svn_path_split(path, &dirpath, &filename, pool); 674251881Speter return svn_error_trace(svn_io_open_uniquely_named(file, temp_path, 675251881Speter dirpath, filename, suffix, 676251881Speter delete_when, 677251881Speter pool, pool)); 678251881Speter} 679251881Speter 680251881Spetersvn_error_t * 681251881Spetersvn_io_open_unique_file(apr_file_t **file, 682251881Speter const char **temp_path, 683251881Speter const char *path, 684251881Speter const char *suffix, 685251881Speter svn_boolean_t delete_on_close, 686251881Speter apr_pool_t *pool) 687251881Speter{ 688251881Speter return svn_error_trace(svn_io_open_unique_file2(file, temp_path, 689251881Speter path, suffix, 690251881Speter delete_on_close 691251881Speter ? svn_io_file_del_on_close 692251881Speter : svn_io_file_del_none, 693251881Speter pool)); 694251881Speter} 695251881Speter 696251881Spetersvn_error_t * 697251881Spetersvn_io_run_diff(const char *dir, 698251881Speter const char *const *user_args, 699251881Speter int num_user_args, 700251881Speter const char *label1, 701251881Speter const char *label2, 702251881Speter const char *from, 703251881Speter const char *to, 704251881Speter int *pexitcode, 705251881Speter apr_file_t *outfile, 706251881Speter apr_file_t *errfile, 707251881Speter const char *diff_cmd, 708251881Speter apr_pool_t *pool) 709251881Speter{ 710251881Speter SVN_ERR(svn_path_cstring_to_utf8(&diff_cmd, diff_cmd, pool)); 711251881Speter 712251881Speter return svn_error_trace(svn_io_run_diff2(dir, user_args, num_user_args, 713251881Speter label1, label2, 714251881Speter from, to, pexitcode, 715251881Speter outfile, errfile, diff_cmd, 716251881Speter pool)); 717251881Speter} 718251881Speter 719251881Spetersvn_error_t * 720251881Spetersvn_io_run_diff3_2(int *exitcode, 721251881Speter const char *dir, 722251881Speter const char *mine, 723251881Speter const char *older, 724251881Speter const char *yours, 725251881Speter const char *mine_label, 726251881Speter const char *older_label, 727251881Speter const char *yours_label, 728251881Speter apr_file_t *merged, 729251881Speter const char *diff3_cmd, 730251881Speter const apr_array_header_t *user_args, 731251881Speter apr_pool_t *pool) 732251881Speter{ 733251881Speter SVN_ERR(svn_path_cstring_to_utf8(&diff3_cmd, diff3_cmd, pool)); 734251881Speter 735251881Speter return svn_error_trace(svn_io_run_diff3_3(exitcode, dir, 736251881Speter mine, older, yours, 737251881Speter mine_label, older_label, 738251881Speter yours_label, merged, 739251881Speter diff3_cmd, user_args, pool)); 740251881Speter} 741251881Speter 742251881Spetersvn_error_t * 743251881Spetersvn_io_run_diff3(const char *dir, 744251881Speter const char *mine, 745251881Speter const char *older, 746251881Speter const char *yours, 747251881Speter const char *mine_label, 748251881Speter const char *older_label, 749251881Speter const char *yours_label, 750251881Speter apr_file_t *merged, 751251881Speter int *exitcode, 752251881Speter const char *diff3_cmd, 753251881Speter apr_pool_t *pool) 754251881Speter{ 755251881Speter return svn_error_trace(svn_io_run_diff3_2(exitcode, dir, mine, older, yours, 756251881Speter mine_label, older_label, 757251881Speter yours_label, 758251881Speter merged, diff3_cmd, NULL, pool)); 759251881Speter} 760251881Speter 761251881Spetersvn_error_t * 762251881Spetersvn_io_remove_file(const char *path, 763251881Speter apr_pool_t *scratch_pool) 764251881Speter{ 765251881Speter return svn_error_trace(svn_io_remove_file2(path, FALSE, scratch_pool)); 766251881Speter} 767251881Speter 768251881Spetersvn_error_t *svn_io_file_lock(const char *lock_file, 769251881Speter svn_boolean_t exclusive, 770251881Speter apr_pool_t *pool) 771251881Speter{ 772251881Speter return svn_io_file_lock2(lock_file, exclusive, FALSE, pool); 773251881Speter} 774251881Speter 775251881Spetersvn_error_t * 776251881Spetersvn_io_get_dirents2(apr_hash_t **dirents, 777251881Speter const char *path, 778251881Speter apr_pool_t *pool) 779251881Speter{ 780251881Speter /* Note that the first part of svn_io_dirent2_t is identical 781251881Speter to svn_io_dirent_t to allow this construct */ 782251881Speter return svn_error_trace( 783251881Speter svn_io_get_dirents3(dirents, path, FALSE, pool, pool)); 784251881Speter} 785251881Speter 786251881Spetersvn_error_t * 787251881Spetersvn_io_get_dirents(apr_hash_t **dirents, 788251881Speter const char *path, 789251881Speter apr_pool_t *pool) 790251881Speter{ 791251881Speter /* Note that in C, padding is not allowed at the beginning of structs, 792251881Speter so this is actually portable, since the kind field of svn_io_dirent_t 793251881Speter is first in that struct. */ 794251881Speter return svn_io_get_dirents2(dirents, path, pool); 795251881Speter} 796251881Speter 797251881Spetersvn_error_t * 798251881Spetersvn_io_start_cmd2(apr_proc_t *cmd_proc, 799251881Speter const char *path, 800251881Speter const char *cmd, 801251881Speter const char *const *args, 802251881Speter svn_boolean_t inherit, 803251881Speter svn_boolean_t infile_pipe, 804251881Speter apr_file_t *infile, 805251881Speter svn_boolean_t outfile_pipe, 806251881Speter apr_file_t *outfile, 807251881Speter svn_boolean_t errfile_pipe, 808251881Speter apr_file_t *errfile, 809251881Speter apr_pool_t *pool) 810251881Speter{ 811251881Speter return svn_io_start_cmd3(cmd_proc, path, cmd, args, NULL, inherit, 812251881Speter infile_pipe, infile, outfile_pipe, outfile, 813251881Speter errfile_pipe, errfile, pool); 814251881Speter} 815251881Speter 816251881Spetersvn_error_t * 817251881Spetersvn_io_start_cmd(apr_proc_t *cmd_proc, 818251881Speter const char *path, 819251881Speter const char *cmd, 820251881Speter const char *const *args, 821251881Speter svn_boolean_t inherit, 822251881Speter apr_file_t *infile, 823251881Speter apr_file_t *outfile, 824251881Speter apr_file_t *errfile, 825251881Speter apr_pool_t *pool) 826251881Speter{ 827251881Speter return svn_io_start_cmd2(cmd_proc, path, cmd, args, inherit, FALSE, 828251881Speter infile, FALSE, outfile, FALSE, errfile, pool); 829251881Speter} 830251881Speter 831251881Spetersvn_error_t * 832251881Spetersvn_io_file_read_full(apr_file_t *file, void *buf, 833251881Speter apr_size_t nbytes, apr_size_t *bytes_read, 834251881Speter apr_pool_t *pool) 835251881Speter{ 836251881Speter return svn_io_file_read_full2(file, buf, nbytes, bytes_read, NULL, pool); 837251881Speter} 838251881Speter 839251881Speterstruct walk_func_filter_baton_t 840251881Speter{ 841251881Speter svn_io_walk_func_t walk_func; 842251881Speter void *walk_baton; 843251881Speter}; 844251881Speter 845251881Speter/* Implements svn_io_walk_func_t, but only allows APR_DIR and APR_REG 846251881Speter finfo types through to the wrapped function/baton. */ 847251881Speterstatic svn_error_t * 848251881Speterwalk_func_filter_func(void *baton, 849251881Speter const char *path, 850251881Speter const apr_finfo_t *finfo, 851251881Speter apr_pool_t *pool) 852251881Speter{ 853251881Speter struct walk_func_filter_baton_t *b = baton; 854251881Speter 855251881Speter if (finfo->filetype == APR_DIR || finfo->filetype == APR_REG) 856251881Speter SVN_ERR(b->walk_func(b->walk_baton, path, finfo, pool)); 857251881Speter 858251881Speter return SVN_NO_ERROR; 859251881Speter} 860251881Speter 861251881Spetersvn_error_t * 862251881Spetersvn_io_dir_walk(const char *dirname, 863251881Speter apr_int32_t wanted, 864251881Speter svn_io_walk_func_t walk_func, 865251881Speter void *walk_baton, 866251881Speter apr_pool_t *pool) 867251881Speter{ 868251881Speter struct walk_func_filter_baton_t baton; 869251881Speter baton.walk_func = walk_func; 870251881Speter baton.walk_baton = walk_baton; 871251881Speter return svn_error_trace(svn_io_dir_walk2(dirname, wanted, 872251881Speter walk_func_filter_func, 873251881Speter &baton, pool)); 874251881Speter} 875251881Speter 876251881Spetersvn_error_t * 877251881Spetersvn_io_stat_dirent(const svn_io_dirent2_t **dirent_p, 878251881Speter const char *path, 879251881Speter svn_boolean_t ignore_enoent, 880251881Speter apr_pool_t *result_pool, 881251881Speter apr_pool_t *scratch_pool) 882251881Speter{ 883251881Speter return svn_error_trace( 884251881Speter svn_io_stat_dirent2(dirent_p, 885251881Speter path, 886251881Speter FALSE, 887251881Speter ignore_enoent, 888251881Speter result_pool, 889251881Speter scratch_pool)); 890251881Speter} 891251881Speter 892251881Speter/*** From constructors.c ***/ 893251881Spetersvn_log_changed_path_t * 894251881Spetersvn_log_changed_path_dup(const svn_log_changed_path_t *changed_path, 895251881Speter apr_pool_t *pool) 896251881Speter{ 897251881Speter svn_log_changed_path_t *new_changed_path 898251881Speter = apr_palloc(pool, sizeof(*new_changed_path)); 899251881Speter 900251881Speter *new_changed_path = *changed_path; 901251881Speter 902251881Speter if (new_changed_path->copyfrom_path) 903251881Speter new_changed_path->copyfrom_path = 904251881Speter apr_pstrdup(pool, new_changed_path->copyfrom_path); 905251881Speter 906251881Speter return new_changed_path; 907251881Speter} 908251881Speter 909251881Speter/*** From cmdline.c ***/ 910251881Spetersvn_error_t * 911251881Spetersvn_cmdline_prompt_user(const char **result, 912251881Speter const char *prompt_str, 913251881Speter apr_pool_t *pool) 914251881Speter{ 915251881Speter return svn_error_trace(svn_cmdline_prompt_user2(result, prompt_str, NULL, 916251881Speter pool)); 917251881Speter} 918251881Speter 919251881Spetersvn_error_t * 920251881Spetersvn_cmdline_setup_auth_baton(svn_auth_baton_t **ab, 921251881Speter svn_boolean_t non_interactive, 922251881Speter const char *auth_username, 923251881Speter const char *auth_password, 924251881Speter const char *config_dir, 925251881Speter svn_boolean_t no_auth_cache, 926251881Speter svn_config_t *cfg, 927251881Speter svn_cancel_func_t cancel_func, 928251881Speter void *cancel_baton, 929251881Speter apr_pool_t *pool) 930251881Speter{ 931251881Speter return svn_error_trace(svn_cmdline_create_auth_baton( 932251881Speter ab, non_interactive, 933251881Speter auth_username, auth_password, 934251881Speter config_dir, no_auth_cache, FALSE, 935251881Speter cfg, cancel_func, cancel_baton, pool)); 936251881Speter} 937251881Speter 938251881Speter/*** From dso.c ***/ 939251881Spetervoid 940251881Spetersvn_dso_initialize(void) 941251881Speter{ 942251881Speter svn_error_t *err = svn_dso_initialize2(); 943251881Speter if (err) 944251881Speter { 945251881Speter svn_error_clear(err); 946251881Speter abort(); 947251881Speter } 948251881Speter} 949251881Speter 950251881Speter/*** From simple_providers.c ***/ 951251881Spetervoid 952251881Spetersvn_auth_get_simple_provider(svn_auth_provider_object_t **provider, 953251881Speter apr_pool_t *pool) 954251881Speter{ 955251881Speter svn_auth_get_simple_provider2(provider, NULL, NULL, pool); 956251881Speter} 957251881Speter 958251881Speter/*** From ssl_client_cert_pw_providers.c ***/ 959251881Spetervoid 960251881Spetersvn_auth_get_ssl_client_cert_pw_file_provider 961251881Speter (svn_auth_provider_object_t **provider, 962251881Speter apr_pool_t *pool) 963251881Speter{ 964251881Speter svn_auth_get_ssl_client_cert_pw_file_provider2(provider, NULL, NULL, pool); 965251881Speter} 966251881Speter 967251881Speter/*** From path.c ***/ 968251881Speter 969251881Speter#define SVN_EMPTY_PATH "" 970251881Speter 971251881Speterconst char * 972251881Spetersvn_path_url_add_component(const char *url, 973251881Speter const char *component, 974251881Speter apr_pool_t *pool) 975251881Speter{ 976251881Speter /* URL can have trailing '/' */ 977251881Speter url = svn_path_canonicalize(url, pool); 978251881Speter 979251881Speter return svn_path_url_add_component2(url, component, pool); 980251881Speter} 981251881Speter 982251881Spetervoid 983251881Spetersvn_path_split(const char *path, 984251881Speter const char **dirpath, 985251881Speter const char **base_name, 986251881Speter apr_pool_t *pool) 987251881Speter{ 988251881Speter assert(dirpath != base_name); 989251881Speter 990251881Speter if (dirpath) 991251881Speter *dirpath = svn_path_dirname(path, pool); 992251881Speter 993251881Speter if (base_name) 994251881Speter *base_name = svn_path_basename(path, pool); 995251881Speter} 996251881Speter 997251881Speter 998251881Spetersvn_error_t * 999251881Spetersvn_path_split_if_file(const char *path, 1000251881Speter const char **pdirectory, 1001251881Speter const char **pfile, 1002251881Speter apr_pool_t *pool) 1003251881Speter{ 1004251881Speter apr_finfo_t finfo; 1005251881Speter svn_error_t *err; 1006251881Speter 1007251881Speter SVN_ERR_ASSERT(svn_path_is_canonical(path, pool)); 1008251881Speter 1009251881Speter err = svn_io_stat(&finfo, path, APR_FINFO_TYPE, pool); 1010251881Speter if (err && ! APR_STATUS_IS_ENOENT(err->apr_err)) 1011251881Speter return err; 1012251881Speter 1013251881Speter if (err || finfo.filetype == APR_REG) 1014251881Speter { 1015251881Speter svn_error_clear(err); 1016251881Speter svn_path_split(path, pdirectory, pfile, pool); 1017251881Speter } 1018251881Speter else if (finfo.filetype == APR_DIR) 1019251881Speter { 1020251881Speter *pdirectory = path; 1021251881Speter *pfile = SVN_EMPTY_PATH; 1022251881Speter } 1023251881Speter else 1024251881Speter { 1025251881Speter return svn_error_createf(SVN_ERR_BAD_FILENAME, NULL, 1026251881Speter _("'%s' is neither a file nor a directory name"), 1027251881Speter svn_path_local_style(path, pool)); 1028251881Speter } 1029251881Speter 1030251881Speter return SVN_NO_ERROR; 1031251881Speter} 1032251881Speter 1033251881Speter/*** From stream.c ***/ 1034251881Spetersvn_error_t *svn_stream_copy2(svn_stream_t *from, svn_stream_t *to, 1035251881Speter svn_cancel_func_t cancel_func, 1036251881Speter void *cancel_baton, 1037251881Speter apr_pool_t *scratch_pool) 1038251881Speter{ 1039251881Speter return svn_error_trace(svn_stream_copy3( 1040251881Speter svn_stream_disown(from, scratch_pool), 1041251881Speter svn_stream_disown(to, scratch_pool), 1042251881Speter cancel_func, cancel_baton, scratch_pool)); 1043251881Speter} 1044251881Speter 1045251881Spetersvn_error_t *svn_stream_copy(svn_stream_t *from, svn_stream_t *to, 1046251881Speter apr_pool_t *scratch_pool) 1047251881Speter{ 1048251881Speter return svn_error_trace(svn_stream_copy3( 1049251881Speter svn_stream_disown(from, scratch_pool), 1050251881Speter svn_stream_disown(to, scratch_pool), 1051251881Speter NULL, NULL, scratch_pool)); 1052251881Speter} 1053251881Speter 1054251881Spetersvn_stream_t * 1055251881Spetersvn_stream_from_aprfile(apr_file_t *file, apr_pool_t *pool) 1056251881Speter{ 1057251881Speter return svn_stream_from_aprfile2(file, TRUE, pool); 1058251881Speter} 1059251881Speter 1060251881Spetersvn_error_t * 1061251881Spetersvn_stream_contents_same(svn_boolean_t *same, 1062251881Speter svn_stream_t *stream1, 1063251881Speter svn_stream_t *stream2, 1064251881Speter apr_pool_t *pool) 1065251881Speter{ 1066251881Speter return svn_error_trace(svn_stream_contents_same2( 1067251881Speter same, 1068251881Speter svn_stream_disown(stream1, pool), 1069251881Speter svn_stream_disown(stream2, pool), 1070251881Speter pool)); 1071251881Speter} 1072251881Speter 1073289180Spetervoid 1074289180Spetersvn_stream_set_read(svn_stream_t *stream, 1075289180Speter svn_read_fn_t read_fn) 1076289180Speter{ 1077289180Speter svn_stream_set_read2(stream, NULL /* only full read support */, 1078289180Speter read_fn); 1079289180Speter} 1080289180Speter 1081289180Spetersvn_error_t * 1082289180Spetersvn_stream_read(svn_stream_t *stream, 1083289180Speter char *buffer, 1084289180Speter apr_size_t *len) 1085289180Speter{ 1086289180Speter return svn_error_trace(svn_stream_read_full(stream, buffer, len)); 1087289180Speter} 1088289180Speter 1089289180Speterstruct md5_stream_baton 1090289180Speter{ 1091289180Speter const unsigned char **read_digest; 1092289180Speter const unsigned char **write_digest; 1093289180Speter svn_checksum_t *read_checksum; 1094289180Speter svn_checksum_t *write_checksum; 1095289180Speter svn_stream_t *proxy; 1096289180Speter apr_pool_t *pool; 1097289180Speter}; 1098289180Speter 1099289180Speterstatic svn_error_t * 1100289180Speterread_handler_md5(void *baton, char *buffer, apr_size_t *len) 1101289180Speter{ 1102289180Speter struct md5_stream_baton *btn = baton; 1103289180Speter return svn_error_trace(svn_stream_read2(btn->proxy, buffer, len)); 1104289180Speter} 1105289180Speter 1106289180Speterstatic svn_error_t * 1107289180Speterread_full_handler_md5(void *baton, char *buffer, apr_size_t *len) 1108289180Speter{ 1109289180Speter struct md5_stream_baton *btn = baton; 1110289180Speter return svn_error_trace(svn_stream_read_full(btn->proxy, buffer, len)); 1111289180Speter} 1112289180Speter 1113289180Speterstatic svn_error_t * 1114289180Speterskip_handler_md5(void *baton, apr_size_t len) 1115289180Speter{ 1116289180Speter struct md5_stream_baton *btn = baton; 1117289180Speter return svn_error_trace(svn_stream_skip(btn->proxy, len)); 1118289180Speter} 1119289180Speter 1120289180Speterstatic svn_error_t * 1121289180Speterwrite_handler_md5(void *baton, const char *buffer, apr_size_t *len) 1122289180Speter{ 1123289180Speter struct md5_stream_baton *btn = baton; 1124289180Speter return svn_error_trace(svn_stream_write(btn->proxy, buffer, len)); 1125289180Speter} 1126289180Speter 1127289180Speterstatic svn_error_t * 1128289180Speterclose_handler_md5(void *baton) 1129289180Speter{ 1130289180Speter struct md5_stream_baton *btn = baton; 1131289180Speter 1132289180Speter SVN_ERR(svn_stream_close(btn->proxy)); 1133289180Speter 1134289180Speter if (btn->read_digest) 1135289180Speter *btn->read_digest 1136289180Speter = apr_pmemdup(btn->pool, btn->read_checksum->digest, 1137289180Speter APR_MD5_DIGESTSIZE); 1138289180Speter 1139289180Speter if (btn->write_digest) 1140289180Speter *btn->write_digest 1141289180Speter = apr_pmemdup(btn->pool, btn->write_checksum->digest, 1142289180Speter APR_MD5_DIGESTSIZE); 1143289180Speter 1144289180Speter return SVN_NO_ERROR; 1145289180Speter} 1146289180Speter 1147289180Speter 1148289180Spetersvn_stream_t * 1149289180Spetersvn_stream_checksummed(svn_stream_t *stream, 1150289180Speter const unsigned char **read_digest, 1151289180Speter const unsigned char **write_digest, 1152289180Speter svn_boolean_t read_all, 1153289180Speter apr_pool_t *pool) 1154289180Speter{ 1155289180Speter svn_stream_t *s; 1156289180Speter struct md5_stream_baton *baton; 1157289180Speter 1158289180Speter if (! read_digest && ! write_digest) 1159289180Speter return stream; 1160289180Speter 1161289180Speter baton = apr_palloc(pool, sizeof(*baton)); 1162289180Speter baton->read_digest = read_digest; 1163289180Speter baton->write_digest = write_digest; 1164289180Speter baton->pool = pool; 1165289180Speter 1166289180Speter /* Set BATON->proxy to a stream that will fill in BATON->read_checksum 1167289180Speter * and BATON->write_checksum (if we want them) when it is closed. */ 1168289180Speter baton->proxy 1169289180Speter = svn_stream_checksummed2(stream, 1170289180Speter read_digest ? &baton->read_checksum : NULL, 1171289180Speter write_digest ? &baton->write_checksum : NULL, 1172289180Speter svn_checksum_md5, 1173289180Speter read_all, pool); 1174289180Speter 1175289180Speter /* Create a stream that will forward its read/write/close operations to 1176289180Speter * BATON->proxy and will fill in *READ_DIGEST and *WRITE_DIGEST (if we 1177289180Speter * want them) after it closes BATON->proxy. */ 1178289180Speter s = svn_stream_create(baton, pool); 1179289180Speter svn_stream_set_read2(s, read_handler_md5, read_full_handler_md5); 1180289180Speter svn_stream_set_skip(s, skip_handler_md5); 1181289180Speter svn_stream_set_write(s, write_handler_md5); 1182289180Speter svn_stream_set_close(s, close_handler_md5); 1183289180Speter return s; 1184289180Speter} 1185289180Speter 1186251881Speter/*** From path.c ***/ 1187251881Speter 1188251881Speterconst char * 1189251881Spetersvn_path_internal_style(const char *path, apr_pool_t *pool) 1190251881Speter{ 1191251881Speter if (svn_path_is_url(path)) 1192251881Speter return svn_uri_canonicalize(path, pool); 1193251881Speter else 1194251881Speter return svn_dirent_internal_style(path, pool); 1195251881Speter} 1196251881Speter 1197251881Speter 1198251881Speterconst char * 1199251881Spetersvn_path_local_style(const char *path, apr_pool_t *pool) 1200251881Speter{ 1201251881Speter if (svn_path_is_url(path)) 1202251881Speter return apr_pstrdup(pool, path); 1203251881Speter else 1204251881Speter return svn_dirent_local_style(path, pool); 1205251881Speter} 1206251881Speter 1207251881Speterconst char * 1208251881Spetersvn_path_canonicalize(const char *path, apr_pool_t *pool) 1209251881Speter{ 1210251881Speter if (svn_path_is_url(path)) 1211251881Speter return svn_uri_canonicalize(path, pool); 1212251881Speter else 1213251881Speter return svn_dirent_canonicalize(path, pool); 1214251881Speter} 1215251881Speter 1216251881Speter 1217251881Speter/*** From mergeinfo.c ***/ 1218251881Speter 1219251881Spetersvn_error_t * 1220251881Spetersvn_mergeinfo_inheritable(svn_mergeinfo_t *output, 1221251881Speter svn_mergeinfo_t mergeinfo, 1222251881Speter const char *path, 1223251881Speter svn_revnum_t start, 1224251881Speter svn_revnum_t end, 1225251881Speter apr_pool_t *pool) 1226251881Speter{ 1227251881Speter return svn_error_trace(svn_mergeinfo_inheritable2(output, mergeinfo, path, 1228251881Speter start, end, 1229251881Speter TRUE, pool, pool)); 1230251881Speter} 1231251881Speter 1232251881Spetersvn_error_t * 1233251881Spetersvn_rangelist_inheritable(svn_rangelist_t **inheritable_rangelist, 1234251881Speter const svn_rangelist_t *rangelist, 1235251881Speter svn_revnum_t start, 1236251881Speter svn_revnum_t end, 1237251881Speter apr_pool_t *pool) 1238251881Speter{ 1239251881Speter return svn_error_trace(svn_rangelist_inheritable2(inheritable_rangelist, 1240251881Speter rangelist, 1241251881Speter start, end, TRUE, 1242251881Speter pool, pool)); 1243251881Speter} 1244251881Speter 1245251881Spetersvn_error_t * 1246251881Spetersvn_rangelist_merge(svn_rangelist_t **rangelist, 1247251881Speter const svn_rangelist_t *changes, 1248251881Speter apr_pool_t *pool) 1249251881Speter{ 1250251881Speter SVN_ERR(svn_rangelist_merge2(*rangelist, changes, 1251251881Speter pool, pool)); 1252251881Speter 1253251881Speter return svn_error_trace( 1254251881Speter svn_rangelist__combine_adjacent_ranges(*rangelist, pool)); 1255251881Speter} 1256251881Speter 1257251881Spetersvn_error_t * 1258251881Spetersvn_mergeinfo_diff(svn_mergeinfo_t *deleted, svn_mergeinfo_t *added, 1259251881Speter svn_mergeinfo_t from, svn_mergeinfo_t to, 1260251881Speter svn_boolean_t consider_inheritance, 1261251881Speter apr_pool_t *pool) 1262251881Speter{ 1263251881Speter return svn_error_trace(svn_mergeinfo_diff2(deleted, added, from, to, 1264251881Speter consider_inheritance, pool, 1265251881Speter pool)); 1266251881Speter} 1267251881Speter 1268251881Spetersvn_error_t * 1269251881Spetersvn_mergeinfo_merge(svn_mergeinfo_t mergeinfo, 1270251881Speter svn_mergeinfo_t changes, 1271251881Speter apr_pool_t *pool) 1272251881Speter{ 1273251881Speter return svn_error_trace(svn_mergeinfo_merge2(mergeinfo, changes, pool, 1274251881Speter pool)); 1275251881Speter} 1276251881Speter 1277251881Spetersvn_error_t * 1278251881Spetersvn_mergeinfo_remove(svn_mergeinfo_t *mergeinfo, svn_mergeinfo_t eraser, 1279251881Speter svn_mergeinfo_t whiteboard, apr_pool_t *pool) 1280251881Speter{ 1281251881Speter return svn_mergeinfo_remove2(mergeinfo, eraser, whiteboard, TRUE, pool, 1282251881Speter pool); 1283251881Speter} 1284251881Speter 1285251881Spetersvn_error_t * 1286251881Spetersvn_mergeinfo_intersect(svn_mergeinfo_t *mergeinfo, 1287251881Speter svn_mergeinfo_t mergeinfo1, 1288251881Speter svn_mergeinfo_t mergeinfo2, 1289251881Speter apr_pool_t *pool) 1290251881Speter{ 1291251881Speter return svn_mergeinfo_intersect2(mergeinfo, mergeinfo1, mergeinfo2, 1292251881Speter TRUE, pool, pool); 1293251881Speter} 1294251881Speter 1295251881Speter/*** From config.c ***/ 1296251881Spetersvn_error_t * 1297251881Spetersvn_config_create(svn_config_t **cfgp, 1298251881Speter svn_boolean_t section_names_case_sensitive, 1299251881Speter apr_pool_t *result_pool) 1300251881Speter{ 1301251881Speter return svn_error_trace(svn_config_create2(cfgp, 1302251881Speter section_names_case_sensitive, 1303251881Speter FALSE, 1304251881Speter result_pool)); 1305251881Speter} 1306251881Speter 1307251881Spetersvn_error_t * 1308251881Spetersvn_config_read2(svn_config_t **cfgp, const char *file, 1309251881Speter svn_boolean_t must_exist, 1310251881Speter svn_boolean_t section_names_case_sensitive, 1311251881Speter apr_pool_t *result_pool) 1312251881Speter{ 1313251881Speter return svn_error_trace(svn_config_read3(cfgp, file, 1314251881Speter must_exist, 1315251881Speter section_names_case_sensitive, 1316251881Speter FALSE, 1317251881Speter result_pool)); 1318251881Speter} 1319251881Speter 1320251881Spetersvn_error_t * 1321251881Spetersvn_config_read(svn_config_t **cfgp, const char *file, 1322251881Speter svn_boolean_t must_exist, 1323251881Speter apr_pool_t *result_pool) 1324251881Speter{ 1325251881Speter return svn_error_trace(svn_config_read3(cfgp, file, 1326251881Speter must_exist, 1327251881Speter FALSE, FALSE, 1328251881Speter result_pool)); 1329251881Speter} 1330251881Speter 1331251881Speter#ifdef SVN_DISABLE_FULL_VERSION_MATCH 1332251881Speter/* This double underscore name is used by the 1.6 command line client. 1333251881Speter Keeping this name is sufficient for the 1.6 client to use the 1.7 1334251881Speter libraries at runtime. */ 1335251881Spetersvn_error_t * 1336251881Spetersvn_opt__eat_peg_revisions(apr_array_header_t **true_targets_p, 1337251881Speter apr_array_header_t *targets, 1338251881Speter apr_pool_t *pool); 1339251881Spetersvn_error_t * 1340251881Spetersvn_opt__eat_peg_revisions(apr_array_header_t **true_targets_p, 1341251881Speter apr_array_header_t *targets, 1342251881Speter apr_pool_t *pool) 1343251881Speter{ 1344251881Speter unsigned int i; 1345251881Speter apr_array_header_t *true_targets; 1346251881Speter 1347251881Speter true_targets = apr_array_make(pool, 5, sizeof(const char *)); 1348251881Speter 1349251881Speter for (i = 0; i < targets->nelts; i++) 1350251881Speter { 1351251881Speter const char *target = APR_ARRAY_IDX(targets, i, const char *); 1352251881Speter const char *true_target; 1353251881Speter 1354251881Speter SVN_ERR(svn_opt__split_arg_at_peg_revision(&true_target, NULL, 1355251881Speter target, pool)); 1356251881Speter APR_ARRAY_PUSH(true_targets, const char *) = true_target; 1357251881Speter } 1358251881Speter 1359251881Speter SVN_ERR_ASSERT(true_targets_p); 1360251881Speter *true_targets_p = true_targets; 1361251881Speter 1362251881Speter return SVN_NO_ERROR; 1363251881Speter} 1364251881Speter#endif 1365251881Speter 1366251881Spetervoid 1367251881Spetersvn_xml_make_header(svn_stringbuf_t **str, apr_pool_t *pool) 1368251881Speter{ 1369251881Speter svn_xml_make_header2(str, NULL, pool); 1370251881Speter} 1371251881Speter 1372289180Speter 1373289180Speter/*** From utf.c ***/ 1374251881Spetervoid 1375251881Spetersvn_utf_initialize(apr_pool_t *pool) 1376251881Speter{ 1377251881Speter svn_utf_initialize2(FALSE, pool); 1378251881Speter} 1379251881Speter 1380251881Spetersvn_error_t * 1381289180Spetersvn_utf_cstring_from_utf8_ex(const char **dest, 1382289180Speter const char *src, 1383289180Speter const char *topage, 1384289180Speter const char *convset_key, 1385289180Speter apr_pool_t *pool) 1386289180Speter{ 1387289180Speter return svn_utf_cstring_from_utf8_ex2(dest, src, topage, pool); 1388289180Speter} 1389289180Speter 1390289180Speter/*** From error.c ***/ 1391289180Spetervoid 1392289180Spetersvn_handle_error(svn_error_t *err, FILE *stream, svn_boolean_t fatal) 1393289180Speter{ 1394289180Speter svn_handle_error2(err, stream, fatal, "svn: "); 1395289180Speter} 1396289180Speter 1397289180Spetervoid 1398289180Spetersvn_handle_warning(FILE *stream, svn_error_t *err) 1399289180Speter{ 1400289180Speter svn_handle_warning2(stream, err, "svn: "); 1401289180Speter} 1402289180Speter 1403289180Speter 1404289180Speter/*** From subst.c ***/ 1405289180Spetersvn_error_t * 1406251881Spetersvn_subst_build_keywords(svn_subst_keywords_t *kw, 1407251881Speter const char *keywords_val, 1408251881Speter const char *rev, 1409251881Speter const char *url, 1410251881Speter apr_time_t date, 1411251881Speter const char *author, 1412251881Speter apr_pool_t *pool) 1413251881Speter{ 1414251881Speter apr_hash_t *kwhash; 1415251881Speter const svn_string_t *val; 1416251881Speter 1417251881Speter SVN_ERR(svn_subst_build_keywords2(&kwhash, keywords_val, rev, 1418251881Speter url, date, author, pool)); 1419251881Speter 1420251881Speter /* The behaviour of pre-1.3 svn_subst_build_keywords, which we are 1421251881Speter * replicating here, is to write to a slot in the svn_subst_keywords_t 1422251881Speter * only if the relevant keyword was present in keywords_val, otherwise 1423251881Speter * leaving that slot untouched. */ 1424251881Speter 1425251881Speter val = svn_hash_gets(kwhash, SVN_KEYWORD_REVISION_LONG); 1426251881Speter if (val) 1427251881Speter kw->revision = val; 1428251881Speter 1429251881Speter val = svn_hash_gets(kwhash, SVN_KEYWORD_DATE_LONG); 1430251881Speter if (val) 1431251881Speter kw->date = val; 1432251881Speter 1433251881Speter val = svn_hash_gets(kwhash, SVN_KEYWORD_AUTHOR_LONG); 1434251881Speter if (val) 1435251881Speter kw->author = val; 1436251881Speter 1437251881Speter val = svn_hash_gets(kwhash, SVN_KEYWORD_URL_LONG); 1438251881Speter if (val) 1439251881Speter kw->url = val; 1440251881Speter 1441251881Speter val = svn_hash_gets(kwhash, SVN_KEYWORD_ID); 1442251881Speter if (val) 1443251881Speter kw->id = val; 1444251881Speter 1445251881Speter return SVN_NO_ERROR; 1446251881Speter} 1447251881Speter 1448257936Speter/*** From version.c ***/ 1449257936Spetersvn_error_t * 1450257936Spetersvn_ver_check_list(const svn_version_t *my_version, 1451257936Speter const svn_version_checklist_t *checklist) 1452257936Speter{ 1453257936Speter return svn_ver_check_list2(my_version, checklist, svn_ver_compatible); 1454257936Speter} 1455289180Speter 1456289180Speter/*** From win32_crypto.c ***/ 1457289180Speter#if defined(WIN32) && !defined(__MINGW32__) 1458289180Spetervoid 1459289180Spetersvn_auth_get_windows_simple_provider(svn_auth_provider_object_t **provider, 1460289180Speter apr_pool_t *pool) 1461289180Speter{ 1462289180Speter svn_auth__get_windows_simple_provider(provider, pool); 1463289180Speter} 1464289180Speter 1465289180Spetervoid 1466289180Spetersvn_auth_get_windows_ssl_client_cert_pw_provider 1467289180Speter (svn_auth_provider_object_t **provider, 1468289180Speter apr_pool_t *pool) 1469289180Speter{ 1470289180Speter svn_auth__get_windows_ssl_client_cert_pw_provider(provider, pool); 1471289180Speter} 1472289180Speter 1473289180Spetervoid 1474289180Spetersvn_auth_get_windows_ssl_server_trust_provider 1475289180Speter (svn_auth_provider_object_t **provider, apr_pool_t *pool) 1476289180Speter{ 1477289180Speter svn_auth__get_windows_ssl_server_trust_provider(provider, pool); 1478289180Speter} 1479289180Speter#endif /* WIN32 && !__MINGW32__ */ 1480289180Speter 1481289180Speter/*** From macos_keychain.c ***/ 1482289180Speter#if defined(DARWIN) 1483289180Spetervoid 1484289180Spetersvn_auth_get_keychain_simple_provider(svn_auth_provider_object_t **provider, 1485289180Speter apr_pool_t *pool) 1486289180Speter{ 1487309511Speter#ifdef SVN_HAVE_KEYCHAIN_SERVICES 1488289180Speter svn_auth__get_keychain_simple_provider(provider, pool); 1489309511Speter#else 1490309511Speter svn_auth__get_dummmy_simple_provider(provider, pool); 1491309511Speter#endif 1492289180Speter} 1493289180Speter 1494289180Spetervoid 1495289180Spetersvn_auth_get_keychain_ssl_client_cert_pw_provider 1496289180Speter (svn_auth_provider_object_t **provider, 1497289180Speter apr_pool_t *pool) 1498289180Speter{ 1499309511Speter#ifdef SVN_HAVE_KEYCHAIN_SERVICES 1500289180Speter svn_auth__get_keychain_ssl_client_cert_pw_provider(provider, pool); 1501309511Speter#else 1502309511Speter /* Not really the right type of dummy provider, but doesn't throw NULL 1503309511Speter errors as just returning NULL would */ 1504309511Speter svn_auth__get_dummmy_simple_provider(provider, pool); 1505309511Speter#endif 1506289180Speter} 1507289180Speter#endif /* DARWIN */ 1508289180Speter 1509289180Speter#if !defined(WIN32) 1510289180Spetervoid 1511289180Spetersvn_auth_get_gpg_agent_simple_provider(svn_auth_provider_object_t **provider, 1512289180Speter apr_pool_t *pool) 1513289180Speter{ 1514289180Speter#ifdef SVN_HAVE_GPG_AGENT 1515289180Speter svn_auth__get_gpg_agent_simple_provider(provider, pool); 1516289180Speter#else 1517289180Speter svn_auth__get_dummmy_simple_provider(provider, pool); 1518289180Speter#endif /* SVN_HAVE_GPG_AGENT */ 1519289180Speter} 1520289180Speter#endif /* !WIN32 */ 1521289180Speter 1522289180Spetersvn_error_t * 1523289180Spetersvn_cmdline_create_auth_baton(svn_auth_baton_t **ab, 1524289180Speter svn_boolean_t non_interactive, 1525289180Speter const char *auth_username, 1526289180Speter const char *auth_password, 1527289180Speter const char *config_dir, 1528289180Speter svn_boolean_t no_auth_cache, 1529289180Speter svn_boolean_t trust_server_cert, 1530289180Speter svn_config_t *cfg, 1531289180Speter svn_cancel_func_t cancel_func, 1532289180Speter void *cancel_baton, 1533289180Speter apr_pool_t *pool) 1534289180Speter{ 1535289180Speter return svn_error_trace(svn_cmdline_create_auth_baton2(ab, 1536289180Speter non_interactive, 1537289180Speter auth_username, 1538289180Speter auth_password, 1539289180Speter config_dir, 1540289180Speter no_auth_cache, 1541289180Speter trust_server_cert, 1542289180Speter FALSE, 1543289180Speter FALSE, 1544289180Speter FALSE, 1545289180Speter FALSE, 1546289180Speter cfg, 1547289180Speter cancel_func, 1548289180Speter cancel_baton, 1549289180Speter pool)); 1550289180Speter} 1551