#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <getopt.h>
#include <sys/time.h>
#include <time.h>
#include <stdarg.h>
#include <langinfo.h>
#include <locale.h>
#include <apr_pools.h>
#include <subversion-1/svn_error.h>
#include "global.h"
#include "interface.h"
#include "ignore.h"
#include "checksum.h"
#include "helper.h"
#include "waa.h"
#include "options.h"
#include "cp_mv.h"
#include "status.h"
#include "url.h"
#include "warnings.h"
#include "actions.h"
#include "racallback.h"

Go to the source code of this file.
Defines | |
| #define | MAX_DEBUG_LINE_LEN (1024) | 
| This constant is used to determine when to rotate the debug output buffer.   | |
| #define | _STRINGIFY(x) #x | 
| #define | STRINGIFY(x) " " #x "=" _STRINGIFY(x) | 
Functions | |
| void | _DEBUGP_open_output (FILE **output, int *was_popened) | 
| Opens the debug output file or pipe, as specified.   | |
| void | _DEBUGP (const char *file, int line, const char *func, char *format,...) | 
| -.   | |
| int | _STOP (const char *file, int line, const char *function, int errl, const char *format,...) | 
| -.   | |
| const char * | Version (FILE *output) | 
| For keyword expansion - the version string.   | |
| int | ac__Usage (struct estat *root UNUSED, int argc UNUSED, char *argv[]) | 
| -.   | |
| void | sigUSR1 (int num) | 
| -.   | |
| void | sigUSR2 (int num) | 
| -.   | |
| void | sigDebug (int num) | 
| Signal handler for debug binaries.   | |
| void | sigPipe (int num) | 
| Handler for SIGPIPE.   | |
| void * | _do_component_tests (int a) | 
| This function is used for the component tests.   | |
| int | main (int argc, char *args[], char *env[]) | 
| The main function.   | |
Variables | |
| char | parm_dump [] = "dump" | 
| -.   | |
| char | parm_test [] = "test" | 
| char | parm_load [] = "load" | 
| int | debuglevel = 0 | 
| Whether debug messages are wanted.   | |
| int | opt_recursive = 1 | 
| -.   | |
| svn_revnum_t | target_revision | 
| The revision we're getting from the repository.   | |
| svn_revnum_t | opt_target_revision = SVN_INVALID_REVNUM | 
The revision the user wants to get at (-r parameter).   | |
| svn_revnum_t | opt_target_revision2 = SVN_INVALID_REVNUM | 
| The second revision number the user specified.   | |
| int | opt_target_revisions_given = 0 | 
| How many revisions the user specified on the commandline (0, 1 or 2).   | |
| char * | opt_commitmsg | 
| A pointer to the commit message; possibly a mmap()ped file.   | |
| char * | opt_debugprefix | 
| char * | opt_commitmsgfile | 
| The file name of the commit message file.   | |
| int | make_STOP_silent = 0 | 
| -.   | |
| static char * | program_name | 
| Remember how the program was called.   | |
| char * | start_path = NULL | 
| -.   | |
| int | start_path_len = 0 | 
| -.   | |
| char * | local_codeset | 
| The local character encoding, according to LC_ALL or LC_CTYPE).   | |
| apr_pool_t * | global_pool | 
| The first allocated APR pool.   | |
| struct url_t * | current_url | 
| Pointer to current URL.   | |
| char ** | environ = NULL | 
| For Solaris.   | |
Definition in file fsvs.c.
| #define MAX_DEBUG_LINE_LEN (1024) | 
| #define STRINGIFY | ( | x | ) | " " #x "=" _STRINGIFY(x) | 
| void _DEBUGP | ( | const char * | file, | |
| int | line, | |||
| const char * | func, | |||
| char * | format, | |||
| ... | ||||
| ) | 
-.
Never called directly, used only via the macro DEBUGP().
For uninitializing in the use case debug_buffer the line value is misused to show whether an error occured. 
Definition at line 400 of file fsvs.c.
References _DEBUGP_open_output(), debuglevel, DEBUGP, MAX_DEBUG_LINE_LEN, OPT__DEBUG_BUFFER, opt__set_int(), opt_debugprefix, and PRIO_MUSTHAVE.
Referenced by main(), and sigDebug().


| void _DEBUGP_open_output | ( | FILE ** | output, | |
| int * | was_popened | |||
| ) | 
Opens the debug output file or pipe, as specified.
If a debug buffer is given, this is filled first; and only in case of a buffer flush the given file or pipe is opened, to receive the buffer contents.
This function cannot return errors.
Definition at line 366 of file fsvs.c.
References DEBUGP, and OPT__DEBUG_OUTPUT.
Referenced by _DEBUGP().

| void* _do_component_tests | ( | int | a | ) | 
This function is used for the component tests.
When FSVS is run with "-d" as parameter, a call to fileno() is guaranteed to happen here; a single "up" gets into this stack frame, and allows easy setting/quering of some values.
Definition at line 919 of file fsvs.c.
Referenced by main().

| int _STOP | ( | const char * | file, | |
| int | line, | |||
| const char * | function, | |||
| int | errl, | |||
| const char * | format, | |||
| ... | ||||
| ) | 
-.
It checks the given status code, and (depending on the command line flag -v) prints only the first error or the whole call stack. If debuglevel is set, prints some more details - time, file and line. Never called directly; only via some macros.
In case the first character of the format is a "!", it's a user error - here we normally print only the message, without the error code line. The full details are available via -d and -v.
-EPIPE is handled specially, in that it is passed up, but no message is printed. 
Definition at line 537 of file fsvs.c.
References debuglevel, make_STOP_silent, opt__is_verbose(), OPT__VERBOSE, and VERBOSITY_STACKTRACE.

| int ac__Usage | ( | struct estat *root | UNUSED, | |
| int argc | UNUSED, | |||
| char * | argv[] | |||
| ) | 
-.
Prints help for the given action.
Definition at line 722 of file fsvs.c.
References act__find_action_by_name(), action, action_list, action_list_count, DEFAULT_CONF_PATH, DEFAULT_WAA_PATH, actionlist_t::help_text, actionlist_t::name, STOPIF, and Version().

| int main | ( | int | argc, | |
| char * | args[], | |||
| char * | env[] | |||
| ) | 
The main function.
It does the following things (not in that order):
LC_CTYPE)
On entry we have eg. this:
After command line parsing we have:
I'd have liked to keep the url__parm_list in the original args as well; but we cannot easily let it start at the end, and putting it just after the non-parameter arguments
NULL pointers are needed, and only a single one is provided on startup),
Consider the case [fsvs, update, /bin/, -uURLa, -uURLb, /lib, NULL]. That would be transformed to
[update, NULL, /bin/, -uURLa, -uURLb, /lib, NULL][update, /bin/, NULL, -uURLa, -uURLb, /lib, NULL][update, /bin/, NULL, -uURLa, NULL, -uURLb, /lib, NULL]; this is too long. We could reuse the NULL at the end ... but that's not that fine, either -- the url__parm_list wouldn't be terminated.So we go the simple route - allocate an array of pointers, and store them there.
Definition at line 1044 of file fsvs.c.
References _DEBUGP(), _do_component_tests(), ac__Usage_dflt, ac__Usage_this, act__find_action_by_name(), action, action_list, cb__init(), cm__get_source(), conf_tmp_fn, conf_tmp_path, debuglevel, DEBUGP, estat::do_filter_allows, estat::do_filter_allows_done, estat::entry_count, environ, FILTER__ALL, FSVS_DEBUG_ENV, global_pool, hlp__chrooter(), hlp__parse_rev(), hlp__rightmost_0_bit(), local_codeset, sstat_t::mode, actionlist_t::name, estat::name, OPT__CHANGECHECK, OPT__DEBUG_BUFFER, OPT__DEBUG_OUTPUT, OPT__FILTER, opt__load_env(), opt__load_settings(), opt__parse(), opt__parse_option(), opt__set_int(), opt__set_string(), OPT__STATUS_COLOR, OPT__VERBOSE, opt_commitmsg, opt_commitmsgfile, opt_debugprefix, opt_recursive, opt_target_revision, opt_target_revision2, opt_target_revisions_given, PRIO_CMDLINE, PRIO_ETC_FILE, PRIO_MUSTHAVE, PRIO_PRE_CMDLINE, program_name, estat::repos_rev, sigDebug(), sigPipe(), sigUSR1(), sigUSR2(), sstat_t::size, estat::st, st__status_string_fromint(), start_path, start_path_len, STOPIF, STOPIF_SVNERR, estat::strings, url__close_sessions(), url__store_url_name(), VERBOSITY_DEFAULT, VERBOSITY_QUIET, VERBOSITY_VERYQUIET, Version(), wa__set_warn_option(), wa__summary(), wa__warn(), waa__init(), waa__save_cwd(), actionlist_t::work, WRN__CHARSET_INVALID, and WRN__TEST_WARNING.

| void sigDebug | ( | int | num | ) | 
Signal handler for debug binaries.
If the configure run included --enable-debug, we intercept SIGSEGV and try to start gdb.
We use a pipe to stop the parent process; debugging within gdb normally starts with a bt (backtrace), followed by up 3 to skip over the signal handler and its fallout. FSVS GCOV MARK: sigDebug should not be executed 
Definition at line 848 of file fsvs.c.
References _DEBUGP(), and program_name.
Referenced by main().


| void sigPipe | ( | int | num | ) | 
Handler for SIGPIPE.
We give the running action a single chance to catch an EPIPE, to clean up on open files and similar; if it doesn't take this chance, the next SIGPIPE kills FSVS. 
Definition at line 908 of file fsvs.c.
References DEBUGP.
Referenced by main().

| void sigUSR2 | ( | int | num | ) | 
-.
Definition at line 827 of file fsvs.c.
References debuglevel, DEBUGP, opt__set_int(), OPT__VERBOSE, PRIO_MUSTHAVE, VERBOSITY_DEFAULT, and VERBOSITY_QUIET.
Referenced by main().


| const char* Version | ( | FILE * | output | ) | 
For keyword expansion - the version string.
Definition at line 621 of file fsvs.c.
References AC_CV_C_UINT32_T, ENABLE_DEBUG, ENABLE_GCOV, HAVE_COMPARISON_FN_T, HAVE_DIRFD, HAVE_LCHOWN, HAVE_LINUX_KDEV_T_H, HAVE_LINUX_TYPES_H, HAVE_LINUX_UNISTD_H, HAVE_LOCALES, HAVE_LUTIMES, HAVE_O_DIRECTORY, HAVE_STRSEP, HAVE_STRUCT_STAT_ST_MTIM, HAVE_VALGRIND, NAME_MAX, opt__is_verbose(), STRINGIFY, and WAA_WC_MD5_CHARS.
Referenced by ac__Usage(), and main().


| char** environ = NULL | 
For Solaris.
Definition at line 356 of file fsvs.c.
Referenced by hlp__format_path(), hlp__match_path_envs(), and main().
| char * opt_debugprefix | 
char* program_name [static]           | 
        
Remember how the program was called.
Definition at line 341 of file fsvs.c.
Referenced by main(), and sigDebug().
| char* start_path = NULL | 
-.
Remember where we started.
Definition at line 343 of file fsvs.c.
Referenced by hlp__pathcopy(), ign__work(), main(), and waa__find_common_base2().
| int start_path_len = 0 | 
-.
How much bytes the start_path has.
Definition at line 345 of file fsvs.c.
Referenced by cm___absolute_path(), hlp__pathcopy(), ign__work(), main(), and waa__find_common_base2().
 1.5.9