safecopy-1.7/0000755000175100001440000000000011726756532012243 5ustar ravenuserssafecopy-1.7/Makefile.in0000644000175100001440000005055711726756527014330 0ustar ravenusers# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : subdir = . DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in $(top_srcdir)/configure AUTHORS COPYING \ ChangeLog INSTALL NEWS depcomp install-sh missing ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno config.status.lineno mkinstalldirs = $(install_sh) -d CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir dist dist-all distcheck ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) am__remove_distdir = \ { test ! -d "$(distdir)" \ || { find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ && rm -fr "$(distdir)"; }; } am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" DIST_ARCHIVES = $(distdir).tar.gz GZIP_ENV = --best distuninstallcheck_listfiles = find . -type f -print distcleancheck_listfiles = find . -type f -print ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ SUBDIRS = src all: all-recursive .SUFFIXES: am--refresh: @: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ echo ' cd $(srcdir) && $(AUTOMAKE) --gnu'; \ $(am__cd) $(srcdir) && $(AUTOMAKE) --gnu \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ echo ' $(SHELL) ./config.status'; \ $(SHELL) ./config.status;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) $(SHELL) ./config.status --recheck $(top_srcdir)/configure: $(am__configure_deps) $(am__cd) $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): $(am__aclocal_m4_deps) $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) $(am__aclocal_m4_deps): # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) $(am__remove_distdir) test -d "$(distdir)" || mkdir "$(distdir)" @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done -test -n "$(am__skip_mode_fix)" \ || find "$(distdir)" -type d ! -perm -755 \ -exec chmod u+rwx,go+rx {} \; -o \ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ || chmod -R a+r "$(distdir)" dist-gzip: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__remove_distdir) dist-bzip2: distdir tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2 $(am__remove_distdir) dist-lzma: distdir tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma $(am__remove_distdir) dist-xz: distdir tardir=$(distdir) && $(am__tar) | xz -c >$(distdir).tar.xz $(am__remove_distdir) dist-tarZ: distdir tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z $(am__remove_distdir) dist-shar: distdir shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz $(am__remove_distdir) dist-zip: distdir -rm -f $(distdir).zip zip -rq $(distdir).zip $(distdir) $(am__remove_distdir) dist dist-all: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__remove_distdir) # This target untars the dist file and tries a VPATH configuration. Then # it guarantees that the distribution is self-contained by making another # tarfile. distcheck: dist case '$(DIST_ARCHIVES)' in \ *.tar.gz*) \ GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ *.tar.bz2*) \ bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ *.tar.lzma*) \ lzma -dc $(distdir).tar.lzma | $(am__untar) ;;\ *.tar.xz*) \ xz -dc $(distdir).tar.xz | $(am__untar) ;;\ *.tar.Z*) \ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ *.shar.gz*) \ GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ esac chmod -R a-w $(distdir); chmod a+w $(distdir) mkdir $(distdir)/_build mkdir $(distdir)/_inst chmod a-w $(distdir) test -d $(distdir)/_build || exit 0; \ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ && am__cwd=`pwd` \ && $(am__cd) $(distdir)/_build \ && ../configure --srcdir=.. --prefix="$$dc_install_base" \ $(DISTCHECK_CONFIGURE_FLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) dvi \ && $(MAKE) $(AM_MAKEFLAGS) check \ && $(MAKE) $(AM_MAKEFLAGS) install \ && $(MAKE) $(AM_MAKEFLAGS) installcheck \ && $(MAKE) $(AM_MAKEFLAGS) uninstall \ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ distuninstallcheck \ && chmod -R a-w "$$dc_install_base" \ && ({ \ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ } || { rm -rf "$$dc_destdir"; exit 1; }) \ && rm -rf "$$dc_destdir" \ && $(MAKE) $(AM_MAKEFLAGS) dist \ && rm -rf $(DIST_ARCHIVES) \ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ && cd "$$am__cwd" \ || exit 1 $(am__remove_distdir) @(echo "$(distdir) archives ready for distribution: "; \ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' distuninstallcheck: @$(am__cd) '$(distuninstallcheck_dir)' \ && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \ || { echo "ERROR: files left after uninstall:" ; \ if test -n "$(DESTDIR)"; then \ echo " (check DESTDIR support)"; \ fi ; \ $(distuninstallcheck_listfiles) ; \ exit 1; } >&2 distcleancheck: distclean @if test '$(srcdir)' = . ; then \ echo "ERROR: distcleancheck can only run from a VPATH build" ; \ exit 1 ; \ fi @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left in build directory after distclean:" ; \ $(distcleancheck_listfiles) ; \ exit 1; } >&2 check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic mostlyclean-am distclean: distclean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf $(top_srcdir)/autom4te.cache -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am am--refresh check check-am clean clean-generic \ ctags ctags-recursive dist dist-all dist-bzip2 dist-gzip \ dist-lzma dist-shar dist-tarZ dist-xz dist-zip distcheck \ distclean distclean-generic distclean-tags distcleancheck \ distdir distuninstallcheck dvi dvi-am html html-am info \ info-am install install-am install-data install-data-am \ install-dvi install-dvi-am install-exec install-exec-am \ install-html install-html-am install-info install-info-am \ install-man install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am tags tags-recursive uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: safecopy-1.7/src/0000755000175100001440000000000011726756527013036 5ustar ravenuserssafecopy-1.7/src/Makefile.in0000644000175100001440000004263511726756527015115 0ustar ravenusers# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : bin_PROGRAMS = safecopy$(EXEEXT) subdir = src DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)" PROGRAMS = $(bin_PROGRAMS) am_safecopy_OBJECTS = voidlist.$(OBJEXT) textlist.$(OBJEXT) \ arglist.$(OBJEXT) lowlevel.$(OBJEXT) safecopy.$(OBJEXT) safecopy_OBJECTS = $(am_safecopy_OBJECTS) safecopy_LDADD = $(LDADD) DEFAULT_INCLUDES = -I.@am__isrc@ depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ SOURCES = $(safecopy_SOURCES) DIST_SOURCES = $(safecopy_SOURCES) am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' man1dir = $(mandir)/man1 NROFF = nroff MANS = $(man_MANS) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ safecopy_SOURCES = \ voidlist.c voidlist.h \ textlist.c textlist.h \ arglist.c arglist.h \ lowlevel.c lowlevel.h \ safecopy.c man_MANS = \ safecopy.1 all: all-am .SUFFIXES: .SUFFIXES: .c .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)" @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p; \ then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS) safecopy$(EXEEXT): $(safecopy_OBJECTS) $(safecopy_DEPENDENCIES) @rm -f safecopy$(EXEEXT) $(LINK) $(safecopy_OBJECTS) $(safecopy_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/arglist.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lowlevel.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/safecopy.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/textlist.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/voidlist.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c $< .c.obj: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` install-man1: $(man_MANS) @$(NORMAL_INSTALL) test -z "$(man1dir)" || $(MKDIR_P) "$(DESTDIR)$(man1dir)" @list=''; test -n "$(man1dir)" || exit 0; \ { for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.1[a-z]*$$/p'; \ } | while read p; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; echo "$$p"; \ done | \ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ sed 'N;N;s,\n, ,g' | { \ list=; while read file base inst; do \ if test "$$base" = "$$inst"; then list="$$list $$file"; else \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \ fi; \ done; \ for i in $$list; do echo "$$i"; done | $(am__base_list) | \ while read files; do \ test -z "$$files" || { \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \ done; } uninstall-man1: @$(NORMAL_UNINSTALL) @list=''; test -n "$(man1dir)" || exit 0; \ files=`{ for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.1[a-z]*$$/p'; \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ test -z "$$files" || { \ echo " ( cd '$(DESTDIR)$(man1dir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(man1dir)" && rm -f $$files; } ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @list='$(MANS)'; if test -n "$$list"; then \ list=`for p in $$list; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ if test -f "$$d$$p"; then echo "$$d$$p"; else :; fi; done`; \ if test -n "$$list" && \ grep 'ab help2man is required to generate this page' $$list >/dev/null; then \ echo "error: found man pages containing the \`missing help2man' replacement text:" >&2; \ grep -l 'ab help2man is required to generate this page' $$list | sed 's/^/ /' >&2; \ echo " to fix them, install help2man, remove and regenerate the man pages;" >&2; \ echo " typically \`make maintainer-clean' will remove them" >&2; \ exit 1; \ else :; fi; \ else :; fi @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) $(MANS) installdirs: for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-binPROGRAMS clean-generic mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-man install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-binPROGRAMS install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-man1 install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-binPROGRAMS uninstall-man uninstall-man: uninstall-man1 .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \ clean-generic ctags distclean distclean-compile \ distclean-generic distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-binPROGRAMS \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-man1 \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic pdf pdf-am ps ps-am \ tags uninstall uninstall-am uninstall-binPROGRAMS \ uninstall-man uninstall-man1 # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: safecopy-1.7/src/voidlist.c0000644000175100001440000001746611205000652015022 0ustar ravenusers/** * This file is copyright ©2009 Corvus Corax * Distributed under the terms of the GPL version 2 or higher */ /*This file contains a void list class, a generic list class with standard functions*/ /*Maybe i should be proud of this, this is a classical! I always said "Who needs C++?" >;>>> */ #include /* Private structures --------------------------------------------------*/ struct voidident; struct voiddata; struct voidentry { struct voidident *identity; struct voiddata *data; struct voidentry *next,*prev; }; /*The structure sector to save a single entry*/ /* Public structures --------------------------------------------------*/ struct voidlist { struct voidentry *first,*last; int listcount; }; /*The structure voidlist, public itself, but members are private*/ /* Public functions ---------------------------------------------------*/ struct voidlist* voidlist_new() { /*A constructor*/ struct voidlist* newlst; newlst=(struct voidlist*)malloc(sizeof(struct voidlist)); if (!newlst) return NULL; newlst->first=NULL; newlst->last=NULL; newlst->listcount=0; return newlst; } /* ------------------------------------------------------------------- */ int voidlist_remitem ( struct voidlist* list, struct voidident* item, int (*greater)(struct voidident *frst, struct voidident *scnd), int (*equality)(struct voidident *frst, struct voidident *scnd), int (*freecontent)(struct voidident *identity,struct voiddata *data)) { /*Removes an entry from the list*/ /*0 for found, 1 for not found, -1 for error */ struct voidentry *member; if (!list) return -1; member=list->first; while (member!=NULL) { if (greater(member->identity,item)) { return 1; /*Requested member was not found, ergo est nada niente never noupe*/ } else { if (equality(member->identity,item)) { /*We have a candidate*/ if (member->prev==NULL) { /*And its the first in the list*/ list->first=member->next; } else { /*Or not */ member->prev->next=member->next; } if (member->next==NULL) { /*But its the last in the list*/ list->last=member->prev; } else { /*Or not */ member->next->prev=member->prev; } list->listcount--; /*Ok member has been remobed from list, so delete it*/ freecontent(member->identity,member->data); free(member); return 0; /*Since we have a sorted list, this entry is sure to have existed only once --- or has it ? happy debugging */ } member=member->next; } } /*Requested member was not found, ergo est nada niente never noupe*/ return 1; } /* ------------------------------------------------------------------- */ int voidlist_kill( struct voidlist* list, int (*freecontent)(struct voidident* identity,struct voiddata* data)){ /*A destructor, 0 on success, -1 on error*/ struct voidentry *member; if (!list) return -1; while (list->first!=NULL) { member=list->first; list->first=member->next; freecontent(member->identity,member->data); free(member); } /* I now kill those entrys manually, because voidlist remitem needs far too much extra functions to run. too much overhead. i dont need comparisation for annihilation. who cares about colateral damage if you want to leave ashes*/ /*I explicitly destroy list consistency here by the way, so there is no return when started. */ free(list); return 0; } /* ------------------------------------------------------------------- */ int voidlist_additem ( struct voidlist* list, struct voidident* item, struct voiddata* data, int (*greater)(struct voidident *frst, struct voidident *scnd), int (*equality)(struct voidident *frst, struct voidident *scnd), int (*freecontent)(struct voidident *identity, struct voiddata *data)) { /*Adds an entry to the list*/ /*Returns 0 for success and 1 for data change, -1 for error*/ struct voidentry *member,*newmember; if (!list) return -1; member=list->first; while (member!=NULL) { /*We have entrys in the list*/ if (greater(member->identity,item)) { /*We are behind the position where this should be*/ newmember=(struct voidentry*) malloc (sizeof(struct voidentry)); newmember->next=member; newmember->prev=member->prev; newmember->identity=item; newmember->data=data; /*New entry created*/ if (member->prev==NULL) { /*ah yes. there is a list, but we just insert at the beginning*/ list->first=newmember; } else { /*we are just somewhere between, so do standard insert*/ member->prev->next=newmember; } member->prev=newmember; list->listcount++; /*And inserted*/ return 0; } else { /*We dont have the position yet*/ if (equality(item,member->identity)) { /*Correct me, we are exatcly on the right position which meens already there*/ freecontent(member->identity,member->data); member->identity=item; member->data=data; return 1; } member=member->next; } } /*Ok we are at the very end*/ newmember=(struct voidentry*) malloc (sizeof(struct voidentry)); newmember->next=NULL; newmember->prev=list->last; newmember->identity=item; newmember->data=data; /*Create the new entry*/ list->last=newmember; if (newmember->prev==NULL) { list->first=newmember; } else { newmember->prev->next=newmember; } list->listcount++; /*Put it into the list*/ return 0; } /* ------------------------------------------------------------------- */ struct voiddata* voidlist_item (struct voidlist* list, struct voidident* item, int (*greater)(struct voidident *frst, struct voidident *scnd), int (*equality)(struct voidident *frst, struct voidident *scnd)){ /*Gives out the data of one entry, NULL for error and not found*/ struct voidentry* member; if (!list) return NULL; member=list->first; while (member!=NULL) { if (greater(member->identity,item)) { return NULL; /*Requested member was not found, ergo est nada niente never noupe*/ } else { if (equality(member->identity,item)) { return member->data; /*We found it!*/ } member=member->next; } } return NULL; } /* ------------------------------------------------------------------- */ int voidlist_all ( struct voidlist* list, int (*listprint)(int number, struct voidident *identity, struct voiddata *data, void *userdata ), void *userdata ){ /*Gives out all the data via listprint*/ /*Gives back 1 when list is empty and 0 if not */ /*-1 on error*/ int t=0; struct voidentry *member; if (!list) return -1; member=list->first; while (member!=NULL) { listprint (t++,member->identity,member->data,userdata); member=member->next; } if (t>0) { return 0; } else { return 1; } } /* ------------------------------------------------------------------- */ int voidlist_members ( struct voidlist* list){ /*Gives back the amount of List members*/ if (!list) return 0; return list->listcount; } /* ------------------------------------------------------------------- */ struct voidident* voidlist_first (struct voidlist* list){ /*Gives back the !identifier! (not the data) of the first item*/ if (!list) return NULL; if (list->first!=NULL) { return list->first->identity; } else { return NULL; } } /* ------------------------------------------------------------------- */ struct voidident* voidlist_last (struct voidlist* list){ /*Gives back the !identifier! (not the data) of the last item*/ if (!list) return NULL; if (list->last!=NULL) { return list->last->identity; } else { return NULL; } } /* -End--------------------------------------------------------------- */ safecopy-1.7/src/arglist.c0000644000175100001440000003071211205000652014617 0ustar ravenusers/** * This file is copyright ©2009 Corvus Corax * Distributed under the terms of the GPL version 2 or higher */ /*This file contains the arglist class, to save the list of possible command line arguments*/ /*Maybe i should be proud of this, this is a classical! I always said "Who needs C++?" >;>>> */ /*This file should really do all our command line checking work, not only save data in some list files :-) */ #include #include #include "textlist.h" /*We include the Text-list class*/ #include "voidlist.h" /*We include the List object motherclass*/ /* Private structures --------------------------------------------------*/ /* Our Identification (List Index) Structure is a char*, so not given*/ struct argdata { int numparams; struct textlist *parameters; }; /* Our List Data Structure. uses textlist, too*/ /* Public structures --------------------------------------------------*/ struct arglist { struct textlist* given_arguments; struct voidlist* arglist; int argc; char **argv; }; /* The structure arglist. It contains both a voidlist (modified here) and an ordinary textlist */ /* Private functions --------------------------------------------------*/ int arglist_greater (struct voidident *vfrst, struct voidident *vscnd) { char *frst, *scnd; frst=(char*)vfrst; scnd=(char*)vscnd; return ( strcmp(frst,scnd)>0); } int arglist_equality (struct voidident *vfrst, struct voidident *vscnd) { char *frst, *scnd; frst=(char*)vfrst; scnd=(char*)vscnd; return ( !strcmp(frst,scnd) ); } /* ------------------------------------------------------------------- */ int arglist_freecontent (struct voidident *videntity, struct voiddata *vdata){ char *identity; struct argdata *data; identity=(char*)videntity; data=(struct argdata*)vdata; if (data->parameters!=NULL){ textlist_kill(data->parameters); } data->parameters=NULL; /*We may have a list in the data structure, which has to be erased first*/ free (data); return 0; } /* Function for comparisation of Index values, and to free the memory of the data of our list members. To tell the upper voidlist class. I think this is some kind of workaround since ident and data are no object classes but ordinary var structs */ /* ------------------------------------------------------------------- */ int arglist_addtoknown (int number,struct voidident *videntity, struct voiddata *vdata, void* userdata) { char *identity; struct argdata *data; struct textlist* check; identity=(char*)videntity; data=(struct argdata*)vdata; check=(struct textlist*)userdata; return textlist_addline(check,identity); } /* Return procedure to safe all arguments i know about temporarily*/ int arglist_isinteger (char* text); /*We need this public function for a test, so do prototype u will find that function further down */ int process_args (struct arglist* list) { /*We go through all of our arguments and try to guess what they mean*/ /*1st delete all parameters of all arguments. this will be O(N^much):-(*/ struct argdata* data; int t,tt; char *temp,*temp2; struct textlist* check; check=textlist_new(); if (!check) return -1; if (voidlist_all (list->arglist,arglist_addtoknown, (void*)check)==-1) return -1; /* We defined a function which added all known arguments via the print option and our small addtoknown callfunction into the known_parameters textlist */ /*Now we proceed through every line of this and delete whats there*/ t=0; temp=textlist_line(check,t++); while (temp!=NULL) { data=(struct argdata*)voidlist_item ( list->arglist, (struct voidident*) temp, arglist_greater,arglist_equality); if (data->parameters!=NULL) { textlist_kill(data->parameters); data->parameters=NULL; } temp=textlist_line(check,t++); } /*Done. We have a virgin list again*/ t=0; temp=textlist_line(list->given_arguments,t++); while (temp!=NULL) { data=(struct argdata*)voidlist_item ( list->arglist, (struct voidident*) temp, arglist_greater,arglist_equality); if (data!=NULL) { /*Jippieh. We found an Argument, lets look if it has parameters*/ if (data->parameters!=NULL) { /*We have the argument twice :-( kill previous instance*/ textlist_kill(data->parameters); } data->parameters=textlist_new(); if (!data->parameters) return -1; temp=textlist_line(list->given_arguments,t++); tt=0; while ((ttnumparams) && (temp!=NULL)) { if (strncmp(temp,"-",1) || (arglist_isinteger(temp)==0)) { /* It is really a parameter*/ if (textlist_addline (data->parameters,temp)==-1) return -1; temp=textlist_line(list->given_arguments,t++); tt++; } else { /*It is another Argument!*/ tt=data->numparams; } } }else { /*We have an unknown argument*/ temp2="VOIDARGS"; data=(struct argdata*) voidlist_item ( list->arglist, (struct voidident*) temp2, arglist_greater,arglist_equality); if (data->parameters==NULL) { /*The void parameter list was empty yet*/ data->parameters=textlist_new(); if (!data->parameters) return -1; } if (textlist_addline (data->parameters,temp)==-1) return -1; /*Void parameter was added*/ temp=textlist_line(list->given_arguments,t++); } } textlist_kill(check); /*Dont need this anymore*/ return 0; } /* ------------------------------------------------------------------- */ int parse_args (struct arglist* list,int argc, char* argv[]) { /* We parse the argvs, to seperate arguments which have "=" and similar in them*/ int t,tt,len; char* temp; char A; t=1; while (tgiven_arguments,temp)==-1) return -1; temp=&temp[tt+1]; len=strlen(temp); tt=-1; /*String is split*/ } tt++; } } if (len>0) { if (textlist_addline(list->given_arguments,temp)==-1) return -1; } /* Each option is added to the given_arguments textlist*/ t++; } return 0; } /* Public functions ---------------------------------------------------*/ int arglist_addarg (struct arglist* list,char* argument, int numparams) { /*Adds an argument to the list 0: added, 1: changed, -1: failure */ struct argdata *data; int retval; if (!list) return -1; data=(struct argdata*)malloc(sizeof(struct argdata)); if (!data) return -1; /*We have to create a special structure in memory to add to our list */ data->numparams=numparams; data->parameters=textlist_new(); if (!data->parameters) { free(data); return -1; } /*And fill them with data*/ retval=voidlist_additem ( list->arglist, (struct voidident*)argument, (struct voiddata*)data, arglist_greater,arglist_equality, arglist_freecontent); if (retval==-1) return -1; /*And include this data in the list structure*/ if (process_args(list)==-1) return -1; /*Reprocess arguments and parameters*/ return retval; } /* ------------------------------------------------------------------- */ struct arglist* arglist_new(int argc, char* argv[]) { /*A constructor recieves the command line arguments for initial processing returns NULL on failure */ struct arglist* newarglist; int t; newarglist=(struct arglist*)malloc(sizeof(struct arglist)); if (!newarglist) return NULL; newarglist->arglist=voidlist_new(); if (!newarglist->arglist) { free (newarglist); return NULL; } newarglist->given_arguments=textlist_new(); if (!newarglist->given_arguments) { free (newarglist->arglist); free (newarglist); return NULL; } newarglist->argc=argc; newarglist->argv=(char **)malloc(argc*sizeof(char*)); if (!newarglist->argv) { free (newarglist->given_arguments); free (newarglist->arglist); free (newarglist); return NULL; } t=0; while (targv[t]=strdup(argv[t]); t++; } /*Now this is great. copy the argv[] structure to mess with it*/ if (parse_args(newarglist,newarglist->argc,newarglist->argv)==-1) return NULL; /*parse them to split them up*/ if (arglist_addarg(newarglist,"VOIDARGS",0)==-1) return NULL; return newarglist; } /* ------------------------------------------------------------------- */ int arglist_remarg (struct arglist* list,char* argument) { /*Removes an argument from the list 0 for success, 1 for not found, -1 for error */ int retval; if (!list) return -1; retval=voidlist_remitem( list->arglist, (struct voidident*)argument, arglist_greater,arglist_equality, arglist_freecontent); if (process_args(list)==-1) return -1; /*Reprocess arguments and parameters*/ return retval;; } /* ------------------------------------------------------------------- */ int arglist_kill(struct arglist* list) { /*A destructor, 0 for OK, -1 for error*/ int t; if (!list) return -1; textlist_kill(list->given_arguments); /*The given arguments remean zombie in memory till now*/ /*But at least their list structure is gone*/ voidlist_kill(list->arglist,arglist_freecontent); t=0; while (targc) { free(list->argv[t]); t++; } /*We kill our copy of the argv structure first*/ free(list); return 0; } /* ------------------------------------------------------------------- */ int arglist_arggiven (struct arglist* list, char* argument ) { /*Returns 0 if an argument has been specified, 1 if not, -1 on error*/ struct argdata* data; if (!list) return -1; data=(struct argdata*)voidlist_item (list->arglist, (struct voidident*)argument, arglist_greater,arglist_equality); if (data==NULL) return 1; if (data->parameters==NULL) return 1; return 0; } /* ------------------------------------------------------------------- */ char* arglist_parameter (struct arglist* list, char* argument, int param){ /*Lists the specified Parameter of a given argument NULL if something wrong or not given */ struct argdata* data; if (!list) return NULL; data=(struct argdata*)voidlist_item (list->arglist, (struct voidident*)argument, arglist_greater,arglist_equality); if (data==NULL) return NULL; if (data->parameters==NULL) return NULL; return textlist_line(data->parameters,param); } /* ------------------------------------------------------------------- */ int arglist_isinteger (char* text){ /*Returns 0 if char text can be translated into a number -1 if not */ int t,len,result,isnegative; if (text==NULL) return -1; t=0; isnegative=0; len=strlen(text); result=0; if (len==0) return 0; while (t'9')) { if (text[t]=='-') { if (result==0) { isnegative=1; } else { return -1; } } else if (text[t]==' ') { result/=10; } else { return -1; } } else { result+=1; } t++; } return 0; } /* ------------------------------------------------------------------- */ int arglist_integer (char* text){ /*Returns numbertranslation of string text, 0 if not successful, do use arglist_isinteger first*/ int t,len,result,isnegative; if (text==NULL) return 0; t=0; isnegative=0; len=strlen(text); result=0; if (len==0) return 0; while (t'9')) { if (text[t]=='-') { if (result==0) { isnegative=1; } else { return 0; } } else if (text[t]==' ') { result/=10; } else { return 0; } } else { if (text[t]=='1') result+=1; if (text[t]=='2') result+=2; if (text[t]=='3') result+=3; if (text[t]=='4') result+=4; if (text[t]=='5') result+=5; if (text[t]=='6') result+=6; if (text[t]=='7') result+=7; if (text[t]=='8') result+=8; if (text[t]=='9') result+=9; } t++; } if (isnegative==1) result=0-result; return result; } /* -End--------------------------------------------------------------- */ safecopy-1.7/src/Makefile.am0000644000175100001440000000027211170677040015054 0ustar ravenusers bin_PROGRAMS= \ safecopy safecopy_SOURCES= \ voidlist.c voidlist.h \ textlist.c textlist.h \ arglist.c arglist.h \ lowlevel.c lowlevel.h \ safecopy.c man_MANS = \ safecopy.1 safecopy-1.7/src/textlist.h0000644000175100001440000000211611205000652015034 0ustar ravenusers/** * This file is copyright ©2009 Corvus Corax * Distributed under the terms of the GPL version 2 or higher */ /*This file contains the textlist class, to save the list of simple char texts, instead of using arrays*/ /*Maybe i should be proud of this, this is a classical! I always said "Who needs C++?" >;>>> */ struct textlist; /*The structure textlist, public for pointers, members are private*/ struct textlist* textlist_new(); /*A constructor NULL on error*/ int textlist_remline (struct textlist* list,int line); /*Removes a textline from the list 0 on success, 1 on not found, -1 on error*/ int textlist_kill(struct textlist* list); /*A destructor, 0 on success, -1 on error*/ int textlist_setline (struct textlist* list,int line,char* text); /*Sets a line on the list to specified value 0 added, 1, changed, -1 error */ int textlist_addline (struct textlist* list,char* text); /*Adds a line of text to the end of the list 0 success, -1 error */ char* textlist_line (struct textlist* list, int line); /*Gives back a single line from position line, NULL if N/A or error*/ safecopy-1.7/src/voidlist.h0000644000175100001440000000457611205000652015025 0ustar ravenusers/** * This file is copyright ©2009 Corvus Corax * Distributed under the terms of the GPL version 2 or higher */ /*This file contains a void list class, a generic list class with standard functions*/ /*Maybe i should be proud of this, this is a classical! I always said "Who needs C++?" >;>>> */ struct voidlist; /*The structure voidlist, public for pointers, members are private*/ struct voidident; /*The internal identificator to save in the list*/ struct voiddata; /*The internal data to save in the list*/ struct voidlist* voidlist_new(); /*A constructor returns NULL on error*/ int voidlist_remitem ( struct voidlist* list, struct voidident* item, int (*greater)(struct voidident *frst, struct voidident *scnd), int (*equality)(struct voidident *frst, struct voidident *scnd), int (*freecontent)(struct voidident *identity,struct voiddata *data)); /*Removes an entry from the list*/ /*0 for found, 1 for not found -1 for error*/ int voidlist_kill( struct voidlist* list, int (*freecontent)(struct voidident* identity,struct voiddata* data)); /*A destructori, 0 on success, -1 on error*/ int voidlist_additem ( struct voidlist* list, struct voidident* item, struct voiddata* data, int (*greater)(struct voidident *frst, struct voidident *scnd), int (*equality)(struct voidident *frst, struct voidident *scnd), int (*freecontent)(struct voidident *identity, struct voiddata *data)); /*Adds an item to the list*/ /*Returns 0 for success and 1 for data change, -1 for error*/ struct voiddata* voidlist_item (struct voidlist* list, struct voidident* item, int (*greater)(struct voidident *frst, struct voidident *scnd), int (*equality)(struct voidident *frst, struct voidident *scnd)); /*Gives out the data of the specified entry, NULL for error and not found*/ int voidlist_all( struct voidlist* list, int (*listprint)(int number, struct voidident *identity, struct voiddata *data, void *userdata ), void *uderdata ); /*Gives out all the data via listprint*/ /*Gives back 1 when list is empty and 0 if not */ /*-1 on error*/ int voidlist_members ( struct voidlist* list); /*Gives back the amount of List members*/ struct voidident* voidlist_first (struct voidlist* list); /*Gives back the !identifier! (not the data) of the first item*/ struct voidident* voidlist_last (struct voidlist* list); /*Gives back the !identifier! (not the data) of the last item*/ safecopy-1.7/src/lowlevel.h0000644000175100001440000000132711726747605015040 0ustar ravenusers/** * This file is copyright ©2009 Corvus Corax * Distributed under the terms of the GPL version 2 or higher */ // tries to perform a low level read operation on a device // possible results: // return>0: amounts of bytes read, the device will be open and the internal // seek pointer point to position+length // return<0: error. the device will be open but in undefined condition off_t read_desperately(char* filename, int *fd, char* buffer, off_t position, off_t length, int seekable, int recovery, int syncmode); // tries to get some information from the low level driver off_t lowlevel_filesize(char* filename, off_t filesize); off_t lowlevel_blocksize(char* filename, off_t blocksize); int lowlevel_canseek(); safecopy-1.7/src/lowlevel.c0000644000175100001440000002064011726747605015032 0ustar ravenusers/** * This file is copyright ©2009 Corvus Corax * Distributed under the terms of the GPL version 2 or higher */ #define _FILE_OFFSET_BITS 64 // make off_t a 64 bit pointer on system that support it #ifndef __linux__ #include // if we don't have linux, the used ioctrls will be different // use a dummy read function that uses high lvl operations off_t read_desperately(char* filename, int *fd, char* buffer, off_t position, off_t length, int seekable, int recovery, int syncmode) { off_t retval; retval=read(*fd,buffer,length); return retval; } off_t lowlevel_filesize(char* filename, off_t filesize) { return filesize; } off_t lowlevel_blocksize(char* filename, off_t blocksize) { return blocksize; } int lowlevel_canseek() { return 0; } #else #include #include #include #include #include #include #include #include #include #include //--------------floppy------------------------------- int is_floppy(int fd) { static int isfloppy=-1; if (isfloppy!=-1) return isfloppy; // attempt a drive reset, return true if successful if (ioctl(fd,FDRESET,FD_RESET_ALWAYS)>=0) { fprintf(stderr,"\nFloppy low level access: drive reset, twaddle ioctl\n"); isfloppy=1; // or at least supported (a "real" reset fails if not root) } else if (errno==EACCES || errno==EPERM) { fprintf(stderr,"\nFloppy low level access: twaddle ioctl\n"); isfloppy=1; } else { isfloppy=0; } return isfloppy; } void reset_floppy(int fd) { // attempt a drive reset ioctl(fd,FDRESET,FD_RESET_ALWAYS); } void torture_floppy(int fd) { // send the twaddle system call ioctl(fd,FDTWADDLE); } //--------------end of floppy stuff ----------------- //---------------CD/DVD READING --------------------- int cdromsectorsize=0; int cdromsectoroffset=16; // is_cd queries disc-status int is_cd(int fd) { static int iscd=-1; int retval; char* mode; if(iscd!=-1) return iscd; retval=ioctl(fd,CDROM_DISC_STATUS); if (retval>=0) { iscd=1; if (retval==CDS_AUDIO) { cdromsectorsize=2352; cdromsectoroffset=0; mode="audio"; } else if (retval==CDS_DATA_1) { mode="Mode1"; cdromsectorsize=2048; cdromsectoroffset=16; } else if (retval==CDS_DATA_2) { mode="Mode2"; cdromsectorsize=2336; cdromsectoroffset=16; } else if (retval==CDS_XA_2_1) { mode="XA 1"; cdromsectorsize=2048; cdromsectoroffset=24; } else if (retval==CDS_XA_2_2) { mode="XA 2"; cdromsectorsize=2324; cdromsectoroffset=24; } else if (retval==CDS_MIXED) { fprintf(stderr,"CDROM mixed mode - low level access: drive reset\n"); cdromsectorsize=0; cdromsectoroffset=0; return 1; } else { fprintf(stderr,"CDROM unknown disc - low level access: drive reset\n"); cdromsectorsize=0; cdromsectoroffset=0; return 1; } fprintf(stderr,"CDROM %s - low level access: drive reset, raw read\n",mode); } else { iscd=0; } return iscd; } // get blocksize and filesize info off_t blocksize_cd(int fd, off_t blocksize) { if (cdromsectorsize!=0) { fprintf(stderr,"CDROM low level block size: %u\n",cdromsectorsize); blocksize=cdromsectorsize; } return blocksize; } off_t filesize_cd(int fd, off_t filesize) { long result; int retval=ioctl(fd,CDROM_LAST_WRITTEN,&result); if (retval==0 && cdromsectorsize>0) { fprintf(stderr,"CDROM low level disk size: %lu\n",cdromsectorsize*(result)); filesize=cdromsectorsize*(result); } return filesize; } // is_dvd queries dvd layer information int is_dvd(int fd) { static int isdvd=-1; if(isdvd!=-1) return isdvd; dvd_struct s; s.type=DVD_STRUCT_PHYSICAL; if (ioctl(fd,DVD_READ_STRUCT,&s)>=0) { isdvd=1; fprintf(stderr,"DVD low level access: drive reset\n"); } else { isdvd=0; } return isdvd; } // issue a drive/bus reset void reset_cd(int fd) { ioctl(fd,CDROMRESET); } // helper function to calculate a cd sector position void lba_to_msf( off_t lba, struct cdrom_msf * msf) { //lba= (((msf->cdmsf_min0*CD_SECS) + msf->cdmsf_sec0) * CD_FRAMES + msf->cdmsf_frame0 ) - CD_MSF_OFFSET; lba=lba+CD_MSF_OFFSET; //lba'= ((msf->cdmsf_min0*CD_SECS) + msf->cdmsf_sec0) * CD_FRAMES + msf->cdmsf_frame0; msf->cdmsf_frame0=lba % CD_FRAMES; lba=lba/CD_FRAMES; //lba''= (msf->cdmsf_min0*CD_SECS) + msf->cdmsf_sec0; msf->cdmsf_sec0=lba % CD_SECS; msf->cdmsf_min0=lba/CD_SECS; //lba'''= msf->cdmsf_min0; } // read raw mode sector from a cd off_t read_from_cd(int fd, unsigned char* buffer, off_t position, off_t length) { unsigned char blockbuffer[CD_FRAMESIZE_RAWER]; struct cdrom_msf *msf=(struct cdrom_msf*)blockbuffer; // the calculation silently assumes that the cd // has a consistent sector size and offset all over. // this is not true for mixed mode cds. // TODO: read TOC for cd layout // and fix sector calculation accordingly if (cdromsectorsize==0) { return(read(fd,buffer,length)); } off_t lba=position/cdromsectorsize; off_t extra=position-(lba*cdromsectorsize); off_t xlength=cdromsectorsize-extra; if (xlength>length) xlength=length; lba_to_msf(lba,msf); if (ioctl(fd, CDROMREADRAW, msf) == -1) { return -1; } // TODO: read parity and LEC data and check for possible read errors //each physical cd sector has 12 bytes "sector lead in thingy" //and 4 bytes address (maybe one could really confuse cdrom drives //by putting a very similar structure within user data?) memcpy(buffer,(blockbuffer+extra+cdromsectoroffset),xlength); lseek(fd,position+xlength,SEEK_SET); return xlength; } //--------------end of CD/DVD stuff ----------------- // tries to perform a low level read operation on a device // it should already be seeked to the right position for normal read() // possible results: // return>0: amounts of bytes read, the device will be open and the internal // seek pointer point to position+length // return<0: error. the device will be open but in undefined condition off_t read_desperately(char* filename, int *fd, unsigned char* buffer, off_t position, off_t length, int seekable, int recovery, int syncmode) { off_t retval; if (is_dvd(*fd)) { //linux dvdrom driver doesn't provide reasonably documented //low level reading syscalls, but we can do a device reset. if (recovery) { reset_cd(*fd); //reopen device after reset close(*fd); *fd=open(filename,O_RDONLY | O_NONBLOCK | syncmode ); if (*fd<=0) return -1; lseek(*fd,position,SEEK_SET); } retval=read(*fd,buffer,length); return retval; } else if (is_cd(*fd)) { //cdroms have full scale low level ioctls available for us //however safecopy doesnt support the full redcode standard //and some cheap assumptions are made //regarding the cdrom disk layout //(mode1 single track single session cds only) if (recovery) { reset_cd(*fd); //reopen device after reset close(*fd); *fd=open(filename,O_RDONLY | O_NONBLOCK | syncmode ); if (*fd<=0) return -1; } retval=read_from_cd(*fd,buffer,position,length); return retval; } else if (is_floppy(*fd)) { //the linux floppy driver does cracy low level stuff, but //for sanity reasons we support reset and waddle ioctl only if (recovery) { reset_floppy(*fd); //reopen device after reset close(*fd); *fd=open(filename,O_RDONLY | O_NONBLOCK | syncmode ); if (*fd<=0) return -1; lseek(*fd,position,SEEK_SET); } retval=read(*fd,buffer,length); if (retval<0 && errno==EIO) { //try again with "twaddle" if failed reset_floppy(*fd); //reopen device after reset close(*fd); *fd=open(filename,O_RDONLY | O_NONBLOCK | syncmode ); if (*fd<=0) return -1; lseek(*fd,position,SEEK_SET); //play around with drive engine torture_floppy(*fd); retval=read(*fd,buffer,length); } return retval; } else { // unsupported or unknown device, attempt a normal read retval=read(*fd,buffer,length); return retval; } } // tries to get some generic driver information off_t lowlevel_filesize(char* filename, off_t filesize) { int inf=open(filename, O_RDONLY); off_t result; if (is_dvd(inf)) { result=filesize; } else if (is_cd(inf)) { result=filesize_cd(inf,filesize); } else { result=filesize; } close(inf); return result; } off_t lowlevel_blocksize(char* filename, off_t blocksize) { int inf=open(filename, O_RDONLY); off_t result; if (is_dvd(inf)) { result=blocksize; } else if (is_cd(inf)) { result=blocksize_cd(inf,blocksize); } else { result=blocksize; } close(inf); return result; } int lowlevel_canseek() { if (is_cd(0)) return 1; return 0; } #endif //__linux__ safecopy-1.7/src/safecopy.10000644000175100001440000005553511726753430014734 0ustar ravenusers.TH SAFECOPY 1 2012-03-10 "" "SAFECOPY" .SH NAME .BR safecopy \- rescue data from a source that causes IO errors .SH SYNOPSIS .B safecopy [\fIOPTION\fR]... \fISOURCE DEST\fR .SH DESCRIPTION .PP .B safecopy tries to get as much data from SOURCE as possible, even resorting to device specific low level operations if applicable. .PP This is achieved by identifying problematic or damaged areas, skipping over them and continuing reading afterwards. The corresponding area in the destination file is either skipped (on initial creation that means padded with zeros) or deliberately filled with a recognizable pattern to later find affected files on a corrupted device. .PP Safecopy uses an incremental algorithm to identify the exact beginning and end of bad areas, allowing the user to trade minimum accesses to bad areas for thorough data resurrection. .PP Multiple passes over the same file are possible, to first retrieve as much data from a device as possible with minimum harm, and then trying to retrieve some of the remaining data with increasingly aggressive read attempts. .PP For this to work, the source device or file has to be seekable. For unseekable devices (like tapes) you can try to use an external script to execute a controlled skip over the damaged part for you. .PP (For example by using "mt seek" and "mt tell" on an SCSI tape device) See the "-S " parameter for details. .PP Performance and success of this tool depend extremely on the device driver, firmware and underlying hardware. .PP Currently safecopy supports RAW access to CDROM drives to read data directly of a CD, bypassing some driver dependant error correction. This can speed up data retrieval from CDs and reduce system load during recovery, as well as increase the success rate. Safecopy uses the disc status syscall to determine sector size and addressing of CDs. This fails on mixed-mode or multi-session CDs, since the sector layout can change within the disk, but would still work on the the big majority of disks. Other disks can still be recovered using normal high level data access. Safecopy auto-detects the disk type involved during scan for disk and block size. .PP Some CD/DVD drives are known to cause the ATAPI bus to crash on errors, causing the device driver to freeze for times up to and beyond a minute per error. Try to avoid using such drives for media recovery. Using safecopys low level access features might help under some circumstances. .PP Some drives can read bad media better than others. Be sure to attempt data recovery of CDs and DVDs on several different drives and computers. You can use safecopys incremental recovery feature to read previously unreadable sectors only. .SH RELIABILITY Data recovery from damaged media is a delicate task, in the worst case its success or failure can safe or ruin whole companies and seal affected peoples personal fate. It is paramount that any tools written for that purpose are reliable and trustworthy. .PP A user needs to know what exactly the software is doing to his hardware and data. The outcome of any operation needs to be both understandable and predictable. .PP An "intelligent data resurrection wizard" with unknown complex internal behaviour may be a nifty tool, but does not meet the above requirements of predictable outcome, nor will the user know in advance what is done to his data. .PP The operation sequence of safecopy has been kept relatively simple to assure this predictability. Unfortunately feature additions have risen the complexity and lead to undefined outcome in the past when include and exclude lists had been mixed, especially when mixing different block sizes. In the worst case this could have lead to overwritten data in the destination file on a later incremental run with the mark (\-M) option. .PP From version 1.3 on, safecopy ships with a test suite that can be used to verify safecopys behaviour in a set of test cases, simulating the combination of bad blocks in input with different include and exclude lists, both with and without marking. Releases are only made if safecopy passes those test cases according to the specification. .PP This textual specification of behaviour of safecopy can be found in the file specification.txt shipped with safecopy. .SH OPTIONS .TP \fB\-\-stage1\fR Preset to rescue most of the data fast, using no retries and avoiding bad areas. .IP \fBPresets\fR: -f 10% -r 10% -R 1 -Z 0 -L 2 -M BaDbLoCk -o stage1.badblocks .TP \fB\-\-stage2\fR Preset to rescue more data, using no retries but searching for exact ends of bad areas. .IP \fBPresets\fR: -f 128* -r 1* -R 1 -Z 0 -L 2 -I stage1.badblocks -o stage2.badblocks .TP \fB\-\-stage3\fR Preset to rescue everything that can be rescued using maximum retries, head realignment tricks and low level access. .IP \fBPresets\fR: -f 1* -r 1* -R 4 -Z 1 -L 2 -I stage2.badblocks -o stage3.badblocks .PP All stage presets can be overridden by individual options. .TP \fB\-b\fR <\fIsize\fR> Blocksize for default read operations. Set this to the physical sectorsize of your media. .IP \fBDefault\fR: 1* .br Hardware block size if reported by OS, otherwise 4096 .TP \fB\-f\fR <\fIsize\fR> Blocksize in bytes when skipping over badblocks. Higher settings put less strain on your hardware, but you might miss good areas in between two bad ones. .IP \fBDefault\fR: 16* .TP \fB\-r\fR <\fIsize\fR> Resolution in bytes when searching for the exact beginning or end of a bad area. If you read data directly from a device there is no need to set this lower than the hardware blocksize. On mounted filesystems however, read blocks and physical blocks could be misaligned. Smaller values lead to very thorough attempts to read data at the edge of damaged areas, but increase the strain on the damaged media. .IP \fBDefault\fR: 1* .TP \fB\-R\fR <\fInumber\fR> At least that many read attempts are made on the first bad block of a damaged area with minimum resolution. More retries can sometimes recover a weak sector, but at the cost of additional strain. .IP \fBDefault\fR: 3 .TP \fB\-Z\fR <\fInumber\fR> On each error, force seek the read head from start to end of the source device as often as specified. That takes time, creates additional strain and might not be supported by all devices or drivers. .IP \fBDefault\fR: 1 .TP \fB\-L\fR <\fImode\fR> Use low level device calls as specified: .IP 0 Do not use low level device calls .br 1 Attempt low level device calls for error recovery only .br 2 Always use low level device calls if available .IP Supported low level features in this version are: .IP SYSTEM DEVICE TYPE FEATURE .br Linux cdrom/dvd bus/device reset .br Linux cdrom read sector in raw mode .br Linux floppy controller reset, twaddle .IP \fBDefault\fR: 1 .TP \fB\-\-sync\fR Use synchronized read calls (disable driver buffering). Safecopy will use O_DIRECT if supported by the OS and O_SYNC otherwise. .IP \fBDefault\fR: Asynchronous read buffering by the OS is allowed .TP \fB\-\-forceopen\fR Keep trying to reopen the source after a read errer useful for USB drives that go away temporarily. .IP \fBWarning\fR: This can cause safecopy to hang until aborted manually! .IP \fBDefault\fR: Abort on fopen() error .TP \fB\-s\fR <\fIblocks\fR> Start position where to start reading. Will correspond to position 0 in the destination file. .IP \fBDefault\fR: block 0 .TP \fB\-l\fR <\fIblocks\fR> Maximum length of data to be read. .IP \fBDefault\fR: Entire size of input file .TP \fB\-I\fR <\fIbadblockfile\fR> Incremental mode. Assume the target file already exists and has holes specified in the badblockfile. It will be attempted to retrieve more data from the listed blocks or from beyond the file size of the target file only. .IP \fBWarning\fR: Without this option, the destination file will be emptied prior to writing. Use \-I /dev/null if you want to continue a previous run of safecopy without a badblock list. .IP \fBImplies\fR: \-c 0 if \-c is not specified .IP \fBDefault\fR: none ( /dev/null if -c is given ) .TP \fB\-i\fR <\fIbytes\fR> Blocksize to interpret the badblockfile given with \-I. .IP \fBDefault\fR: Blocksize as specified by \-b .TP \fB\-c\fR <\fIblocks\fR> Continue copying at this position. This allows continuing if the output is a block device with a fixed size as opposed to a growable file, where safecopy cannot determine how far it already got. The blocksize used is the same as for the -I option. .br \-c 0 will continue at the current destination size. .IP \fBImplies\fR: \-I /dev/null if \-I is not specified .IP \fBDefault\fR: none ( 0 if \-I is given ) .TP \fB\-X\fR <\fIbadblockfile\fR> Exclusion mode. If used together with \-I, excluded blocks override included blocks. Safecopy will not read or write any data from areas covered by exclude blocks. .IP \fBDefault\fR: none .TP \fB\-x\fR <\fIbytes\fR> Blocksize to interpret the badblockfile given with \-X. .IP \fBDefault\fR: Blocksize as specified by \-b .TP \fB\-o\fR <\fIbadblockfile\fR> Write a badblocks/e2fsck compatible bad block file. .IP \fBDefault\fR: none .TP \fB\-S\fR <\fIseekscript\fR> Use external script for seeking in input file. (Might be useful for tape devices and similar). Seekscript must be an executable that takes the number of blocks to be skipped as argv1 (1-64) the blocksize in bytes as argv2 and the current position (in bytes) as argv3. Return value needs to be the number of blocks successfully skipped, or 0 to indicate seek failure. The external seekscript will only be used if lseek() fails and we need to skip over data. .IP \fBDefault\fR: none .TP \fB\-M\fR <\fIstring\fR> Mark unrecovered data with this string instead of skipping it. This helps in later finding corrupted files on rescued file system images. The default is to zero unreadable data on creation of output files, and leaving the data as it is on any later run. .IP \fBWarning\fR: When used in combination with incremental mode (\-I) this may overwrite data in any block that occurs in the -I file. Blocks not in the \-I file, or covered by the file specified with \-X are save from being overwritten. .IP \fBDefault\fR: none .TP \fB\-\-debug\fR <\fIlevel\fR> Enable debug output. Level is a bit field, add values together for more information: .br program flow: 1 .br IO control: 2 .br badblock marking: 4 .br seeking: 8 .br incremental mode: 16 .br exclude mode: 32 .br or for all debug output: 255 .IP \fBDefault\fR: 0 .TP \fB\-T\fR <\fItimingfile\fR> Write sector read timing information into this file for later analysis. .IP \fBDefault\fR: none .TP \fB\-h\fR, \fB\-\-help\fR Show the program help text. .SH PARAMETERS valid parameters for \fB\-f\fR \fB\-r\fR \fB\-b\fR \fB\fR options are: .TP \fB\fR Amount in bytes - i.e. 1024 .TP \fB%\fR Percentage of whole file/device size - e.g. 10% .TP \fB*\fR \fB-b\fR only, number times blocksize reported by OS .TP \fB*\fR \fB-f\fR and \fB-r\fR only, number times the value of \fB-b\fR .SH OUTPUT description of output symbols: .TP \fB.\fR Between 1 and 1024 blocks successfully read. .TP \fB_\fR Read of block was incomplete. (possibly end of file) The blocksize is now reduced to read the rest. .TP \fB|/|\fR Seek failed, source can only be read sequentially. .TP \fB>\fR Read failed, reducing blocksize to read partial data. .TP \fB!\fR A low level error on read attempt of smallest allowed size leads to a retry attempt. .TP \fB[xx](+yy){\fR Current block and number of bytes continuously read successfully up to this point. .TP \fBX\fR Read failed on a block with minimum blocksize and is skipped. Unrecoverable error, destination file is padded with zeros. Data is now skipped until end of the unreadable area is reached. .TP \fB<\fR Successful read after the end of a bad area causes backtracking with smaller blocksizes to search for the first readable data. .TP \fB}[xx](+yy)\fR current block and number of bytes of recent continuous unreadable data. .SH HOWTO How do I... .TP - resurrect a file from a mounted but damaged media, that copy will fail on: .B safecopy /path/to/problemfile ~/saved-file .TP - create an filesystem image of a damaged disk/cdrom: .B safecopy /dev/device ~/diskimage .TP - resurrect data as thoroughly as possible? .IP .B safecopy source dest -f 1* -R 8 -Z 2 .br (assuming logical misalignment of blocks to sectors) .IP .B safecopy source dest -f 1* -r 1 -R 8 -Z 2 .TP - resurrect data as fast as possible, or .TP - resurrect data with low risk of damaging the media further: (you can use even higher values for -f and -r) .IP .B safecopy source dest -f 10% -R 0 -Z 0 .TP - resurrect some data fast, then read more data thoroughly later: .IP .B safecopy source dest -f 10% -R 0 -Z 0 -o badblockfile .br .B safecopy source dest -f 1* -R 8 -Z 2 -I badblockfile .IP .I Alternate approach using the new preset features: .IP .B safecopy source dest --stage1 .IP .B safecopy source dest --stage2 .IP .B safecopy source dest --stage3 .TP - utilize some friends CD-ROM drives to complete the data from my damaged CD: .B safecopy /dev/mydrive imagefile -b -o myblockfile .br .B safecopy /dev/otherdrive imagefile -b -I myblockfile -i -o otherblockfile .br .B safecopy /dev/anotherdrive imagefile -b -I otherblockfile -i .TP - interrupt and later resume a data rescue operation: .B safecopy source dest .br .B (safecopy aborts) .br .B safecopy source dest -I /dev/null .TP - interrupt and later resume a data rescue operation with correct badblocks output: .B safecopy source dest -o badblockfile .br .B (safecopy aborts) .br .B mv badblockfile savedbadblockfile .br .B safecopy source dest -I /dev/null -o badblockfile .br .B cat badblockfile >>savedbadblockfile .TP - interrupt and resume in incremental mode: .br (this needs a bit of bash scripting to get the correct badblock lists) .br .B safecopy source dest -o badblockfile1 .br .B safecopy source dest -I badblockfile1 -o badblockfile2 .br .B (safecopy aborts) .br latest=$( tail -n 1 badblockfile2 ) .br if [ -z $latest ]; then latest=-1; fi; .br cat badblockfile1 | while read block; do .br [ $block -gt $latest ] && echo $block >>badblockfile2; .br done; .br .B safecopy source dest -I badblockfile2 -o badblockfile3 .TP - find the corrupted files on a partially successful rescued file system: .B safecopy /dev/filesystem image -M CoRrUpTeD .br .B fsck image .br .B mount -o loop image /mnt/mountpoint .br .B grep -R /mnt/mountpoint "CoRrUpTeD" .br (hint: this might not find all affected files if the unreadable parts are smaller in size than your marker string) .TP - exclude the previously known badblocks list of a filesystem from filesystem image creation: .B dumpe2fs -b /dev/filesystem >badblocklist .br .B safecopy /dev/filesystem image -X badblocklist -x .TP - create an image of a device that starts at X and is Y in size: .B safecopy /dev/filesystem -b -s -l .TP - combine two partial images of rescued data without access to the actual (damaged) source data: (This is a bit tricky. You need to get badblocks lists for both files somehow to make safecopy know where the missing data is. If you used the -M (mark) feature you might be able to automatically compute these, however this feature is not provided by safecopy. Lets assume you have two badblocks files. .IP you have: .br image1.dat .br image1.badblocks (blocksize1) .br image2.dat .br image2.badblocks (blocksize2) .IP The file size of image1 needs to be greater or equal to that of image2. (If not, swap them) ) .IP .B cp image2.dat combined.dat .br .B safecopy image1.dat combined.dat -I image2.badblocks -i blocksize2 -X image1.badblocks -x blocksize1 .br (This gets you the combined data, but no output badblocklist. The resulting badblocks list would be the badblocks that are .br a: in both badblocks lists, or .br b: in image1.badblocks and beyond the file size of image2 It should be reasonably easy to solve this logic in a short shell script. One day this might be shipped with safecopy, until then consider this your chance to contribute to a random open source project.) .TP - rescue data of a tape device: If the tape device driver supports lseek(), treat it as any file, otherwise utilize the "-S" option of safecopy with a to be self-written script to skip over the bad blocks. (for example using "mt seek") Make sure your tape device doesn't auto-rewind on close. Send me feedback if you had any luck doing so, so I can update this documentation. .SH FAQ .TP Q: Why create this tool if there already is something like dd-rescue and other tools for that purpose? .TP A: Because I didn't know of dd(-)rescue when I started, and I felt like it. Also I think safecopy suits the needs of a user in data loss peril better due to more readable output and more understandable options than some of the other tools. (Then again I am biased. Compare them yourself) Meanwhile safecopy supports low level features other tools don't. .PP .TP Q: What exactly does the -Z option do? .TP A: Remember back in MS-DOS times when a floppy would make a "neek nark" sound 3 times every time when running into a read error? This happened when the BIOS or DOS disk driver moved the IO head to its boundaries to possibly correct small cylinder misalignment, before it tried again. Linux doesn't do that by default, neither do common CDROM drives or drivers. Nevertheless forcing this behaviour can increase your chance of reading bad sectors from a CD __BIG__ time. (Unlike floppies where it usually has little effect) .PP .TP Q: Whats my best chance to resurrect a CD that has become unreadable? .TP A: Try making a backup image on many different computers and drives. The abilities to read from bad media vary extremely. I have a 6 year old Lite On CDRW drive, that even reads deeply and purposely scratched CDs (as in with my key, to make it unreadable) flawlessly. A CDRW drive of the same age at work doesn't read any data from that part of the CD at all, while most DVD and combo drives have bad blocks every couple hundred bytes. Make full use of safecopys RAW access features if applicable. (-L 2 option) .IP As a general guideline: -CDRW drives usually do better than read-only CD drives. .br -CD only drives sometimes do better on CDs than DVD drives. .br -PC drives are sometimes better than laptop ones. .br -A drive with a clean lens does better than a dirtball. .br -Cleaning up CDs helps. .br -Unless you use chemicals. .br -Using sticky tape on a CD will rip of the reflective layer permanently rendering the disk unreadable. .PP .TP Q: Whats my best chance to resurrect a floppy that became unreadable? .TP A: Again try different floppy drives. Keep in mind that it might be easier to further damage data on a bad floppy than on a CD. (Don't overdo read attempts) .PP .TP Q: What about BlueRay/HDDVD disks? .TP A: Hell if I knew, but generally they should be similar to DVDs. It probably depends how the drives firmware acts up. .PP .TP Q: My hard drive suddenly has many bad sectors, what should I do? .TP A: Speed is an essential factor when rescuing data from a bad hard drive. Accesses to bad areas or even just time running can further damage the drive and make formerly readable areas unreadable, be it due to temperature rise, damaged heads scratching still good parts of the surface, bearings degrading due to vibration, etc. Its advisable to shut the system down and remove the hard drive from the computer as soon as errors occur and as fast as possible without causing further damage. .IP (Don't pull the plug! Press reset to force reboot and then power down via power button/ACPI) .IP Set up a rescue system with enough disk space to store all the data from the damaged drive (and possibly multiple copies of it). If you have an external hard drive case that connects via USB SATA or SCSI, allowing a hot plug of the drive into a running system, use it. This allows you to prepare everything without the need for the drive to power up and possibly BIOS or operating system involuntarily accessing it. You also get easier access to the drive to check temperature or noise during operation. .IP When you rescue data, rescue good data first before attempting to access bad sectors. Safecopy allows you to skip known problem sectors using a badblock exclude file (-X) which you might be able to retrieve from system logs or from the drive internal logs, via smartmontools or similar software. Be aware that you might possibly need to convert physical sector numbers into logical block numbers depending on your source. .IP Also you should tell safecopy to jump out of any problematic areas ASAP and continue somewhere else. Parameters "-f 10% -r 10% -R 0 -Z 0" would do the trick by making safecopy skip 10% of the device content and continue there without backtracking. You can always attempt to get the data in between later, first get the supposedly good data on the rest of the drive. Depending on the method of data recovery you plan on using, it may make sense to mark the bad data with the "-M" option. This allows you to later find files affected by data corruption more easily. Use the "-o" option to make safecopy write a badblock list with all blocks skipped or unreadable. .IP When safecopy is done with this first run, you can attempt a second go trying to get more data. Using smaller values for "-f" and allowing safecopy to backtrack for the end of the affected area "-r 1*". Be sure to use incremental mode "-I" to only read the blocks skipped in the first run. .IP It may make sense to let the drive cool down between runs. Once you got all the data from the "good" areas of the drive you can risk more "thorough" access to it. Increase the numbers of retries "-R" in case of bad blocks, maybe together with a head realignment "-Z 1". "-f 1*" would make safecopy try to read on every single block, not skipping over bad areas at all. .IP If your drive stops responding, power it down, let it cool down for a while, then try again. .IP (I heard from people who brought dead drives back to live for a short time by cooling them to low temperatures with ice-packs.) .IP .B !!! If the data is really important, go to a professional data recovery specialist right away, before doing further damage to the drive. .SH "EXIT STATUS" safecopy returns 0 (zero) if there were no unrecoverable errors. .br safecopy returns 1 if some data could not be recovered. .br safecopy returns 2 in case the copying was aborted due to error or signal. .SH AUTHORS safecopy and its manpage have been designed and written by CorvusCorax. .SH BUGS Please use the project page on sourceforge to get in contact with project development if you encounter bugs or want to contribute to safecopy. .SH COPYRIGHT Copyright \(co 2009 CorvusCorax .br This is free software. You may redistribute copies of it under the terms of the GNU General Public License version 2 or above. . There is NO WARRANTY, to the extent permitted by law. .SH "SEE ALSO" .PD 0 Programs with a similar scope are among others .TP \fIddrescue\fP(1), \fIdd-rescue\fP(1), ... safecopy-1.7/src/textlist.c0000644000175100001440000001205511205000652015032 0ustar ravenusers/** * This file is copyright ©2009 Corvus Corax * Distributed under the terms of the GPL version 2 or higher */ /*This file contains the textlist class, to save the list of simple char texts, instead of using arrays*/ /*Maybe i should be proud of this, this is a classical! I always said "Who needs C++?" >;>>> */ #include #include "voidlist.h" /*We include the List object motherclass*/ /* Private structures --------------------------------------------------*/ struct lineindex { int line; }; /* Our Identification (List Index) Structure */ /* Our List Data Structure is char* directly */ /* Public structures --------------------------------------------------*/ struct textlist{ struct voidlist *liste; }; /*The structure textlist, public itself, but members are private*/ /*Since my new class system the members are taken from class voidlist, so even unknown to this very file ;) */ /* Private functions --------------------------------------------------*/ int textlist_greater (struct voidident *vfrst, struct voidident *vscnd) { struct lineindex *frst,*scnd; frst=(struct lineindex*)vfrst; scnd=(struct lineindex*)vscnd; return ( (frst->line>scnd->line) ); } int textlist_equality (struct voidident *vfrst, struct voidident *vscnd) { struct lineindex *frst,*scnd; frst=(struct lineindex*)vfrst; scnd=(struct lineindex*)vscnd; return ( (frst->line==scnd->line) ); } int textlist_freecontent (struct voidident *videntity, struct voiddata *vdata){ struct lineindex *identity; identity=(struct lineindex*)videntity; free (identity); return 0; } /* Function for comparisation of Index values, and to free the memory of the data of our list members. To tell the upper voidlist class. I think this is some kind of workaround since ident and data are no object classes but ordinary var structs */ /* Public functions ---------------------------------------------------*/ struct textlist* textlist_new() { /*A constructor*/ struct textlist* newtext; newtext=(struct textlist*)malloc(sizeof(struct textlist)); if (!newtext) return NULL; newtext->liste=voidlist_new(); if (!newtext->liste) { free(newtext); return NULL; } return newtext; } /* ------------------------------------------------------------------- */ int textlist_remline (struct textlist* list,int line) { /*Removes a textline from the list 0 on success, 1 on not found, -1 on error*/ struct lineindex identity; if (!list) return -1; identity.line=line; return voidlist_remitem( list->liste, (struct voidident*)&identity, textlist_greater,textlist_equality, textlist_freecontent); } /* ------------------------------------------------------------------- */ int textlist_kill(struct textlist* list) { /*A destructor, 0 on success, -1 on error*/ if (!list) return -1; voidlist_kill(list->liste,textlist_freecontent); free(list); return 0; } /* ------------------------------------------------------------------- */ int textlist_setline (struct textlist* list,int line, char* text) { /*Sets a line on the list to specified value 0 added, 1, changed, -1 error */ struct lineindex *identity; if (!list) return -1; identity=(struct lineindex*)malloc(sizeof(struct lineindex)); if (!identity) return -1; /*We have to create a special structure in memory to add to our list */ identity->line=line; /*And fill them with data*/ return voidlist_additem ( list->liste, (struct voidident*)identity, (struct voiddata*)text, textlist_greater,textlist_equality, textlist_freecontent); /*And include this data in the list structure*/ } /* ------------------------------------------------------------------- */ int textlist_addline (struct textlist* list,char* text){ /*Adds a line of text to the end of the list 0 success, -1 error */ struct lineindex *identity; int line; if (!list) return -1; identity=(struct lineindex*)voidlist_last(list->liste); if (!identity) { line=0; } else { line=identity->line+1; } /* We calculate the position which should be the last, but maybe is also the 1st */ identity=(struct lineindex*)malloc(sizeof(struct lineindex)); if (!identity) return -1; /*We have to create a special structure in memory to add to our list */ identity->line=line; /*And fill them with data*/ return voidlist_additem ( list->liste, (struct voidident*)identity, (struct voiddata*)text, textlist_greater,textlist_equality, textlist_freecontent); /*And include this data in the list structure*/ } /* ------------------------------------------------------------------- */ char* textlist_line (struct textlist* list, int line){ /*Gives back a single line from position line, NULL if N/A or error*/ struct lineindex identity; if (!list) return NULL; identity.line=line; return ((char*)voidlist_item ( list->liste, (struct voidident*)&identity, textlist_greater,textlist_equality)); } /* -End--------------------------------------------------------------- */ safecopy-1.7/src/safecopy.c0000644000175100001440000023502511726753556015021 0ustar ravenusers/** * This file is copyright ©2012 Corvus Corax * Distributed under the terms of the GPL version 2 or higher */ //sorry for this file being one big long unreadable mess //the main operation loop actually sits in main() //basically processing the following sequence // 1.declarations // 2.command line parsing // 3.opening io handles // 4.initialisations // 5.dynamic initialisations and tests // 6.main io loop // 6.a planning - calculate wanted read position based on include/exclude input files // 6.b navigation - attempt to seek to requested input file position and find out actual position // 6.c patience - wait for availability of data // 6.d input - attempt to read from sourcefile // 6.e feedback - calculate and display user feedback information // 6.f reaction - act according to result of read operation // 6.f.1 successful read: // 6.f.1.a attempt to backtrack for readable data prior to current position or... // 6.f.1.b write to output data file // 6.f.2 failed read // 6.f.2.a try again or... // 6.f.2.b skip over bad area // 6.f.2.c close and reopen source file // 7.closing and finalisation #define _FILE_OFFSET_BITS 64 // make off_t a 64 bit pointer on system that support it #define _GNU_SOURCE // allow usage of O_DIRECT if available #include #include #include #include #include #include #include #include #include #include #include #include #include #include "arglist.h" #include "lowlevel.h" // define syncmode - use O_DIRECT if supported #ifdef O_DIRECT #define O_SAFECOPYSYNC O_DIRECT #else #define O_SAFECOPYSYNC O_RSYNC #endif #define DEBUG_FLOW 1 #define DEBUG_IO 2 #define DEBUG_BADBLOCKS 4 #define DEBUG_SEEK 8 #define DEBUG_INCREMENTAL 16 #define DEBUG_EXCLUDE 32 #define MARK_INCLUDING 1 #define MARK_EXCLUDING 2 #define FAILSTRING "BaDbLoCk" #define MAXBLOCKSIZE 104857600 #define BLOCKSIZE 4096 #define RETRIES 3 #define SEEKS 1 #define DEFBLOCKSIZE "1*" #define DEFFAULTBLOCKSIZE "16*" #define DEFRESOLUTION "1*" #define DEFRETRIES 3 #define DEFHEADMOVE 1 #define DEFLOWLEVEL 1 #define DEFFAILSTRING NULL #define DEFOUTPUTBB NULL #define DEFINPUTBB NULL #define DEFEXCLBB NULL #define DEFTIMINGFILESTRING NULL #define VERY_FAST 100 #define FAST VERY_FAST*100 #define SLOW FAST*10 #define VERY_SLOW SLOW*10 #define VERY_VERY_SLOW VERY_SLOW*10 #define VERY_FAST_ICON " ;-}" #define FAST_ICON " :-)" #define SLOW_ICON " :-|" #define VERY_SLOW_ICON " 8-(" #define VERY_VERY_SLOW_ICON " 8-X" struct config_struct { // filenames char *sourcefile, *destfile, *bblocksinfile, *xblocksinfile, *bblocksoutfile, *seekscriptfile; // default options char *blocksizestring; char *resolutionstring; char *faultblocksizestring; char *bblocksinstring; char *bblocksoutstring; char *xblocksinstring; char *failuredefstring; char *timingfilestring; int retriesdef; int headmovedef; int lowleveldef; // indicator wether stdin/stderr is a terminal - affects output int human; // pointer to marker string char *marker; }; struct status_struct { // file descriptors int source, destination, bblocksout; // high level file descriptor FILE *bblocksin, *xblocksin, *timingfile; // file offset variables off_t readposition, cposition, sposition, writeposition; off_t startoffset, length; // variables for handling read/written sizes/remainders off_t remain, maxremain, block, writeblock, writeremain; // pointer to main IO data buffer char * databuffer, *databufferpool; // a buffer for output text char textbuffer[256]; // several local integer variables off_t fsblocksize, blocksize, iblocksize, xblocksize, faultblocksize; off_t resolution; int retries, seeks, cseeks; int incremental, excluding, lowlevel, syncmode, forceopen; int counter, percent, oldpercent, newerror, newsofterror; int backtracemode, output, linewidth, seekable, desperate; // error indicators and flags off_t softerr, harderr, lasterror, lastgood, lastmarked; // variables to remember beginning and end of previous good/bad area off_t lastbadblock, lastxblock, previousxblock, lastsourceblock; // input filesize and size of unreadable area off_t filesize, damagesize, targetsize; // times struct timeval oldtime, newtime; // and timing helper variables long int elapsed, oldelapsed, oldcategory; }; static int debugmode = 0; int debug(int debug, char *format,...) { if (debugmode & debug) { va_list ap; int ret; va_start(ap, format); ret = vfprintf(stderr, format, ap); va_end(ap); return ret; } return 0; } void usage(char * name, FILE* printout) { fprintf(printout, "Safecopy "VERSION" by CorvusCorax\n"); fprintf(printout, "Usage: %s [options] \n", name); fprintf(printout, "Options:\n"); fprintf(printout, " --stage1 : Preset to rescue most of the data fast,\n"); fprintf(printout, " using no retries and avoiding bad areas.\n"); fprintf(printout, " Presets: -f 10%% -r 10%% -R 1 -Z 0 -L 2 -M %s\n", FAILSTRING); fprintf(printout, " -o stage1.badblocks\n"); fprintf(printout, " --stage2 : Preset to rescue more data, using no retries\n"); fprintf(printout, " but searching for exact ends of bad areas.\n"); fprintf(printout, " Presets: -f 128* -r 1* -R 1 -Z 0 -L 2\n"); fprintf(printout, " -I stage1.badblocks\n"); fprintf(printout, " -o stage2.badblocks\n"); fprintf(printout, " --stage3 : Preset to rescue everything that can be rescued\n"); fprintf(printout, " using maximum retries, head realignment tricks\n"); fprintf(printout, " and low level access.\n"); fprintf(printout, " Presets: -f 1* -r 1* -R 4 -Z 1 -L 2\n"); fprintf(printout, " -I stage2.badblocks\n"); fprintf(printout, " -o stage3.badblocks\n"); fprintf(printout, " All stage presets can be overridden by individual options.\n"); fprintf(printout, " -b : Blocksize for default read operations.\n"); fprintf(printout, " Set this to the physical sectorsize of your media.\n"); fprintf(printout, " Default: 1*\n"); fprintf(printout, " Hardware block size if reported by OS, otherwise %i\n", BLOCKSIZE); fprintf(printout, " -f : Blocksize when skipping over badblocks.\n"); fprintf(printout, " Higher settings put less strain on your hardware,\n"); fprintf(printout, " but you might miss good areas in between two bad ones.\n"); fprintf(printout, " Default: 16*\n"); fprintf(printout, " -r : Resolution in bytes when searching for the exact\n"); fprintf(printout, " beginning or end of a bad area.\n"); fprintf(printout, " If you read data directly from a device there is no\n"); fprintf(printout, " need to set this lower than the hardware blocksize.\n"); fprintf(printout, " On mounted filesystems however, read blocks\n"); fprintf(printout, " and physical blocks could be misaligned.\n"); fprintf(printout, " Smaller values lead to very thorough attempts to read\n"); fprintf(printout, " data at the edge of damaged areas,\n"); fprintf(printout, " but increase the strain on the damaged media.\n"); fprintf(printout, " Default: 1*\n"); fprintf(printout, " -R : At least that many read attempts are made on the first\n"); fprintf(printout, " bad block of a damaged area with minimum resolution.\n"); fprintf(printout, " More retries can sometimes recover a weak sector,\n"); fprintf(printout, " but at the cost of additional strain.\n"); fprintf(printout, " Default: %i\n", RETRIES); fprintf(printout, " -Z : On each error, force seek the read head from start to\n"); fprintf(printout, " end of the source device as often as specified.\n"); fprintf(printout, " That takes time, creates additional strain and might\n"); fprintf(printout, " not be supported by all devices or drivers.\n"); fprintf(printout, " Default: %i\n", SEEKS); fprintf(printout, " -L : Use low level device calls as specified:\n"); fprintf(printout, " 0 Do not use low level device calls\n"); fprintf(printout, " 1 Attempt low level device calls\n"); fprintf(printout, " for error recovery only\n"); fprintf(printout, " 2 Always use low level device calls\n"); fprintf(printout, " if available\n"); fprintf(printout, " Supported low level features in this version are:\n"); fprintf(printout, " SYSTEM DEVICE TYPE FEATURE\n"); fprintf(printout, " Linux cdrom/dvd bus/device reset\n"); fprintf(printout, " Linux cdrom read sector in raw mode\n"); fprintf(printout, " Linux floppy controller reset, twaddle\n"); fprintf(printout, " Default: %i\n", DEFLOWLEVEL); fprintf(printout, " --sync : Use synchronized read calls (disable driver buffering).\n"); fprintf(printout, " Safecopy will use O_DIRECT if supported by the OS\n"); fprintf(printout, " and O_SYNC otherwise.\n"); fprintf(printout, " Default: Asynchronous read buffering by the OS is allowed\n"); fprintf(printout, " --forceopen : Keep trying to reopen the source after a read errer\n"); fprintf(printout, " useful for USB drives that go away temporarily.\n"); fprintf(printout, " Warning: This can cause safecopy to hang\n"); fprintf(printout, " until aborted manually!\n"); fprintf(printout, " Default: Abort on fopen() error\n"); fprintf(printout, " -s : Start position where to start reading.\n"); fprintf(printout, " Will correspond to position 0 in the destination file.\n"); fprintf(printout, " Default: block 0\n"); fprintf(printout, " -l : Maximum length of data to be read.\n"); fprintf(printout, " Default: Entire size of input file\n"); fprintf(printout, " -I : Incremental mode. Assume the target file already\n"); fprintf(printout, " exists and has holes specified in the badblockfile.\n"); fprintf(printout, " It will be attempted to retrieve more data from\n"); fprintf(printout, " the listed blocks or from beyond the file size\n"); fprintf(printout, " of the target file only.\n"); fprintf(printout, " Warning: Without this option, the destination file\n"); fprintf(printout, " will be emptied prior to writing.\n"); fprintf(printout, " Use -I /dev/null if you want to continue a previous\n"); fprintf(printout, " run of safecopy without a badblock list.\n"); fprintf(printout, " Implies: -c 0 if -c is not specified\n"); fprintf(printout, " Default: none ( /dev/null if -c is given )\n"); fprintf(printout, " -i : Blocksize to interpret the badblockfile given with -I.\n"); fprintf(printout, " Default: Blocksize as specified by -b\n"); fprintf(printout, " -c : Continue copying at this position.\n"); fprintf(printout, " This allows continuing if the output is a block device\n"); fprintf(printout, " with a fixed size as opposed to a growable file,\n"); fprintf(printout, " where safecopy cannot determine how far it already got.\n"); fprintf(printout, " The blocksize used is the same as for the -I option.\n"); fprintf(printout, " -c 0 will continue at the current destination size.\n"); fprintf(printout, " Implies: -I /dev/null if -I is not specified\n"); fprintf(printout, " Default: none, 0 if \-I is specified\n"); fprintf(printout, " -X : Exclusion mode. If used together with -I,\n"); fprintf(printout, " excluded blocks override included blocks.\n"); fprintf(printout, " Safecopy will not read or write any data from\n"); fprintf(printout, " areas covered by exclude blocks.\n"); fprintf(printout, " Default: none ( 0 if -I is given ) \n"); fprintf(printout, " -x : Blocksize to interpret the badblockfile given with -X.\n"); fprintf(printout, " Default: Blocksize as specified by -b\n"); fprintf(printout, " -o : Write a badblocks/e2fsck compatible bad block file.\n"); fprintf(printout, " Default: none\n"); fprintf(printout, " -S : Use external script for seeking in input file.\n"); fprintf(printout, " (Might be useful for tape devices and similar).\n"); fprintf(printout, " Seekscript must be an executable that takes the\n"); fprintf(printout, " number of blocks to be skipped as argv1 (1-64)\n"); fprintf(printout, " the blocksize in bytes as argv2\n"); fprintf(printout, " and the current position (in bytes) as argv3.\n"); fprintf(printout, " Return value needs to be the number of blocks\n"); fprintf(printout, " successfully skipped, or 0 to indicate seek failure.\n"); fprintf(printout, " The external seekscript will only be used\n"); fprintf(printout, " if lseek() fails and we need to skip over data.\n"); fprintf(printout, " Default: none\n"); fprintf(printout, " -M : Mark unrecovered data with this string instead of\n"); fprintf(printout, " skipping it. This helps in later finding corrupted\n"); fprintf(printout, " files on rescued file system images.\n"); fprintf(printout, " The default is to zero unreadable data on creation\n"); fprintf(printout, " of output files, and leaving the data as it is\n"); fprintf(printout, " on any later run.\n"); fprintf(printout, " Warning: When used in combination with\n"); fprintf(printout, " incremental mode (-I) this may overwrite data\n"); fprintf(printout, " in any block that occurs in the -I file.\n"); fprintf(printout, " Blocks not in the -I file, or covered by the file\n"); fprintf(printout, " specified with -X are save from being overwritten.\n"); fprintf(printout, " Default: none\n"); fprintf(printout, " --debug : Enable debug output. Level is a bit field,\n"); fprintf(printout, " add values together for more information:\n"); fprintf(printout, " program flow: %i\n", DEBUG_FLOW); fprintf(printout, " IO control: %i\n", DEBUG_IO); fprintf(printout, " badblock marking: %i\n", DEBUG_BADBLOCKS); fprintf(printout, " seeking: %i\n", DEBUG_SEEK); fprintf(printout, " incremental mode: %i\n", DEBUG_INCREMENTAL); fprintf(printout, " exclude mode: %i\n", DEBUG_EXCLUDE); fprintf(printout, " or for all debug output: %i\n", 255); fprintf(printout, " Default: 0\n"); fprintf(printout, " -T : Write sector read timing information into\n"); fprintf(printout, " this file for later analysis.\n"); fprintf(printout, " Default: none\n"); fprintf(printout, " -h | --help : Show this text\n\n"); fprintf(printout, "Valid parameters for -f -r -b options are:\n"); fprintf(printout, " Amount in bytes - i.e. 1024\n"); fprintf(printout, " %% Percentage of whole file/device size - e.g. 10%%\n"); fprintf(printout, " * -b only, number times blocksize reported by OS\n"); fprintf(printout, " * -f and -r only, number times the value of -b\n\n"); fprintf(printout, "Description of output:\n"); fprintf(printout, " . : Between 1 and 1024 blocks successfully read.\n"); fprintf(printout, " _ : Read of block was incomplete. (possibly end of file)\n"); fprintf(printout, " The blocksize is now reduced to read the rest.\n"); fprintf(printout, " |/| : Seek failed, source can only be read sequentially.\n"); fprintf(printout, " > : Read failed, reducing blocksize to read partial data.\n"); fprintf(printout, " ! : A low level error on read attempt of smallest allowed size\n"); fprintf(printout, " leads to a retry attempt.\n"); fprintf(printout, " [xx](+yy){ : Current block and number of bytes continuously\n"); fprintf(printout, " read successfully up to this point.\n"); fprintf(printout, " X : Read failed on a block with minimum blocksize and is skipped.\n"); fprintf(printout, " Unrecoverable error, destination file is padded with zeros.\n"); fprintf(printout, " Data is now skipped until end of the unreadable area is reached.\n"); fprintf(printout, " < : Successful read after the end of a bad area causes\n"); fprintf(printout, " backtracking with smaller blocksizes to search for the first\n"); fprintf(printout, " readable data.\n"); fprintf(printout, " }[xx](+yy) : current block and number of bytes of recent\n"); fprintf(printout, " continuous unreadable data.\n\n"); fprintf(printout, "Copyright 2012 CorvusCorax\n"); fprintf(printout, "This is free software. You may redistribute copies of it under\n"); fprintf(printout, "the terms of the GNU General Public License version 2 or above.\n"); fprintf(printout, " .\n"); fprintf(printout, "There is NO WARRANTY, to the extent permitted by law.\n"); } // parse an option string off_t parseoption(char* option, int blocksize , off_t filesize , char* defaultvalue) { if (option == NULL) { return parseoption(defaultvalue, blocksize , filesize , defaultvalue); } int len = strlen(option); int number; off_t result; char* newoption = strdup(option); if (arglist_isinteger(option) == 0) { return (arglist_integer(option)); } if (len < 2) return parseoption(defaultvalue, blocksize , filesize , defaultvalue); if (option[len-1] == '%') { newoption[len-1]=0; if (arglist_isinteger(newoption) == 0) { number = arglist_integer(newoption); if ( filesize > 0) { result = (( filesize *number)/100); } else { result = ( blocksize *number); } // round by blocksize return ((((result/ blocksize ) > 0)?(result/ blocksize ):1)* blocksize ); } return parseoption(defaultvalue, blocksize , filesize , defaultvalue); } if (option[len-1] == '*') { newoption[len-1]=0; if (arglist_isinteger(newoption) == 0) { number = arglist_integer(newoption); return ( blocksize *number); } return parseoption(defaultvalue, blocksize , filesize , defaultvalue); } return parseoption(defaultvalue, blocksize , filesize , defaultvalue); } // print percentage to stderr void printpercentage(int percent ) { char percentage[16]="100%"; int t = 0; if ( percent > 100) percent = 100; if ( percent < 0) percent = 0; sprintf(percentage, " %i%%", percent ); write(2, percentage, strlen(percentage)); while (percentage[t++] != '\x0') { write(2, &"\b", 1); } } // calculate difference in usecs between two struct timevals long int timediff(struct timeval oldtime , struct timeval newtime ) { long int usecs = newtime .tv_usec- oldtime .tv_usec; usecs = usecs+(( newtime .tv_sec- oldtime .tv_sec)*1000000); if (usecs < 0) usecs = 0; return usecs; } // map delays to quality categories int timecategory(long int time) { if (time <= VERY_FAST) return VERY_FAST; if (time <= FAST) return FAST; if (time <= SLOW) return SLOW; if (time <= VERY_SLOW) return VERY_SLOW; return VERY_VERY_SLOW; } // map quality categories to icons char* timeicon(int timecat) { switch (timecat) { case VERY_VERY_SLOW: return VERY_VERY_SLOW_ICON; case VERY_SLOW: return VERY_SLOW_ICON; case SLOW: return SLOW_ICON; case FAST: return FAST_ICON; case VERY_FAST: return VERY_FAST_ICON; } return " ???"; } // print quality indicator to stderr void printtimecategory(int timecat) { char * icon = timeicon(timecat); int t = 0; write(2, icon, strlen(icon)); while (icon[t++] != '\x0') { write(2, &"\b", 1); } } // global flag variable and handler for CTRL+C volatile int wantabort = 0; void signalhandler(int sig) { wantabort = 1; } // wrapper for external script to seek in character device files (tapes) off_t emergency_seek(off_t new, off_t old, off_t blocksize , char* script) { char firstarg[128]; char secondarg[128]; char thirdarg[128]; off_t delta = new-old; int status; debug(DEBUG_SEEK, "debug: emergency seek"); // do nothing if no seek is necessary if (new == old) return old; // do nothing if no script is given if (script == NULL) return (-2); // because of the limited size of EXITSTATUS, // we need to call separate seeks for big skips while (delta > ( blocksize *64)) { old = emergency_seek(old+( blocksize *64), old, blocksize , script); if (old < 0) return old; delta = new-old; } // minimum seek is one block if (delta < blocksize ) delta = blocksize ; // call a script sprintf(firstarg, "%llu", (long long)(delta/ blocksize )); sprintf(secondarg, "%llu", (long long)blocksize ); sprintf(thirdarg, "%llu", (long long)old); pid_t child = fork(); if (child == 0) { execlp(script, script, firstarg, secondarg, thirdarg, NULL); exit(-2); } else if ( child < 0) { return (-2); } waitpid(child, &status, 0); // return exit code - calculate bytes from blocks in case of positive exit value if (WEXITSTATUS(status) == 0) return (-2); return (old+( blocksize *WEXITSTATUS(status))); } // function to mark bad blocks in output void markbadblocks(int destination , off_t writeposition , off_t remain , char* marker, char* databuffer , off_t blocksize ) { off_t writeoffset, writeremain , writeblock , cposition ; char nullmarker[8]={0}; if ( remain <= 0) { debug(DEBUG_BADBLOCKS, "debug: no bad blocks to mark\n"); return; } debug(DEBUG_BADBLOCKS, "debug: marking %llu bad bytes at %llu\n", remain , writeposition ); // if a marker is given, we need to write it to the // destination at the current position // first copy the marker into the data buffer writeoffset = 0; writeremain = strlen(marker); if ( writeremain == 0) writeremain = 8; while (writeoffset+ writeremain < blocksize ) { if ( writeremain != 0) { memcpy( databuffer +writeoffset, marker, writeremain ); } else { memcpy( databuffer +writeoffset, nullmarker, writeremain ); } writeoffset += writeremain ; } memcpy( databuffer + writeoffset, marker, blocksize -writeoffset); // now write it to disk writeremain = remain ; writeoffset = 0; while ( writeremain > 0) { // write data to destination file debug(DEBUG_SEEK, "debug: seek in destination file: %llu\n", writeposition ); cposition = lseek( destination , writeposition , SEEK_SET); if ( cposition < 0) { fprintf(stderr, "\nError: seek() in output failed"); perror(" "); wantabort = 2; return; } debug(DEBUG_IO, "debug: writing badblock marker to destination file: %llu bytes at %llu\n", writeremain , cposition ); writeblock = write( destination , databuffer +(writeoffset % blocksize ),( blocksize > writeremain ? writeremain : blocksize )); if ( writeblock <= 0) { fprintf(stderr, "\nError: write to output failed"); perror(" "); wantabort = 2; return; } writeremain -= writeblock ; writeoffset += writeblock ; writeposition += writeblock ; } } // write blocks to badblock file - up to but not including given position void outputbadblocks(off_t start, off_t limit, int bblocksout, off_t * lastbadblock , off_t startoffset , off_t blocksize , char* textbuffer ) { off_t tmp_pos; // write badblocks to file if requested // start at first bad block in current bad set tmp_pos = (start/ blocksize ); // override that with the first not yet written one if (* lastbadblock >= tmp_pos) { tmp_pos = * lastbadblock +1; } // then write all blocks that are smaller than the current one // note the calculation takes into account wether // the current block STARTS in a error but is ok here // (which wouldnt be the case if we compared tmp_pos directly) while ((tmp_pos* blocksize ) < limit) { * lastbadblock = tmp_pos; sprintf( textbuffer , "%llu\n", (long long)* lastbadblock ); debug(DEBUG_BADBLOCKS, "debug: declaring bad block: %llu\n", * lastbadblock ); write(bblocksout, textbuffer , strlen( textbuffer )); tmp_pos++; } } // function to mark a given section in both destination file (badblock marking) and badblock output void realmarkoutput( // these are relevant off_t start, off_t end, off_t min, off_t max, struct config_struct *configvars, struct status_struct *statusvars ) { off_t first = start; off_t last = end; char * tmp; off_t tmp_pos; if (min+ statusvars->startoffset > first) first = min+ statusvars->startoffset ; if (max+ statusvars->startoffset < last) last = max+ statusvars->startoffset ; if ( statusvars->excluding ) { // Exclusion mode, check relevant exclude sectors whether they affect the current position // first check if we need to backtrack in exclude file. debug(DEBUG_EXCLUDE, "debug: checking for exclude blocks during output, at position %llu\n", first); if (first < statusvars->lastxblock * statusvars->xblocksize ) { debug(DEBUG_EXCLUDE, "debug: possibly need backtracking in exclude list, next exclude block %lli\n", statusvars->lastxblock ); if (first < statusvars->previousxblock * statusvars->xblocksize ) { // we read too far in exclude block file, probably after backtracking // close exclude file and reopen debug(DEBUG_EXCLUDE, "debug: reopening exclude file and reading from the start\n"); fclose(statusvars->xblocksin); statusvars->xblocksin = fopen(configvars->xblocksinfile, "r"); if (statusvars->xblocksin == NULL) { fprintf(stderr, "Error reopening exclusion badblock file for reading: %s", configvars->xblocksinfile); perror(" "); wantabort = 2; statusvars->previousxblock = ((unsigned)-1)>>1; statusvars->lastxblock = ((unsigned)-1)>>1; return; } statusvars->lastxblock = -1; statusvars->previousxblock = -1; } else if ((statusvars->previousxblock +1) * statusvars->xblocksize > first) { // backtrack just one exclude block statusvars->lastxblock = statusvars->previousxblock ; debug(DEBUG_EXCLUDE, "debug: using last exclude block %lli\n", statusvars->lastxblock ); } else { debug(DEBUG_EXCLUDE, "debug: false alarm, current exclude block is fine\n"); } } tmp_pos = statusvars->lastxblock * statusvars->xblocksize ; while (tmp_pos < last) { if (tmp_pos+ statusvars->xblocksize > first) { if (tmp_pos <= first) { // start of current block is covered by exclude block. skip to end and try again first = tmp_pos+ statusvars->xblocksize ; if (first > last) { debug(DEBUG_EXCLUDE, "debug: current bad block area is completely covered by xblocks, skipping\n"); return; } debug(DEBUG_EXCLUDE, "debug: start of current bad block area is covered by xblocks shrinking\n"); realmarkoutput(first, last, first- statusvars->startoffset , last- statusvars->startoffset , configvars, statusvars); return; } else if (tmp_pos < last) { // // ATTENTION: there could be a reamaining part behind this xblock - needs two recursive calls to self to fix! debug(DEBUG_EXCLUDE, "debug: current bad block area is partially covered by xblocks, splitting\n"); realmarkoutput(first, tmp_pos, first- statusvars->startoffset , tmp_pos- statusvars->startoffset , configvars, statusvars); if (wantabort>1) return; realmarkoutput(tmp_pos, last, tmp_pos- statusvars->startoffset , last- statusvars->startoffset , configvars, statusvars); return; } else { // start of exclude block is beyond end of our area. we are done break; } } else { // read next exclude block tmp = fgets( statusvars->textbuffer , 64, statusvars->xblocksin); long long unsigned int dummy; if (sscanf( statusvars->textbuffer , "%llu", &dummy) != 1) tmp = NULL; if ( tmp!=NULL && (signed)dummy < (signed)statusvars->lastxblock ) { fprintf(stderr, "Parse error in badblocks file %s: not sorted correctly!\n", configvars->xblocksinfile); wantabort = 2; return; } tmp_pos = dummy; if (tmp == NULL) { // no more bad blocks in input file break; } statusvars->previousxblock = statusvars->lastxblock ; statusvars->lastxblock = tmp_pos; tmp_pos = statusvars->lastxblock * statusvars->xblocksize ; } } } if (configvars->marker) { debug(DEBUG_BADBLOCKS, "debug: marking badblocks from %llu to %llu \n", first, last); if (statusvars->lastmarked < first- statusvars->startoffset ) { statusvars->lastmarked = first- statusvars->startoffset ; } markbadblocks(statusvars->destination, statusvars->lastmarked , last-(statusvars->lastmarked + statusvars->startoffset ), configvars->marker, statusvars->databuffer , statusvars->blocksize ); } if (configvars->bblocksoutfile != NULL) { debug(DEBUG_BADBLOCKS, "debug: declaring badblocks from %llu to %llu \n", first, last); outputbadblocks(first, last, statusvars->bblocksout, &statusvars->lastbadblock , statusvars->startoffset , statusvars->blocksize , statusvars->textbuffer ); } } // function to mark output - taking include file information into account to not touch not mentioned blocks void markoutput( // these are relevant char* description, off_t readposition , off_t lastgood , struct config_struct *configvars, struct status_struct *statusvars ) { off_t tmp_pos; char *tmp; tmp_pos = lastgood + statusvars->startoffset ; // check for incremental mode in incremental mode, handle only sectors mentioned in include file // for marking, the include sector alignments are relevant, for badblock output the affected blocks // in our blocksize if ( statusvars->incremental ) { off_t inc_pos = statusvars->lastsourceblock * statusvars->iblocksize ; // repeat as long as while (inc_pos < readposition + statusvars->startoffset ) { if (inc_pos+ statusvars->iblocksize > tmp_pos) { debug(DEBUG_BADBLOCKS, "debug: %s %llu - %llu - marking output for infile block %lli (%llu - %llu)\n", description, tmp_pos, readposition + statusvars->startoffset , inc_pos/ statusvars->iblocksize , inc_pos, inc_pos+ statusvars->iblocksize ); realmarkoutput(inc_pos, inc_pos+ statusvars->iblocksize , lastgood , readposition , configvars, statusvars); if (wantabort>1) return; } if (inc_pos+ statusvars->iblocksize > readposition + statusvars->startoffset ) { // do not read in another include block // if the current one is still good for future use. break; } tmp = fgets( statusvars->textbuffer , 64, statusvars->bblocksin); long long unsigned int dummy; if (sscanf( statusvars->textbuffer , "%llu", &dummy ) != 1) tmp = NULL; if ( tmp!=NULL && (signed)dummy < (signed)statusvars->lastsourceblock ) { fprintf(stderr, "Parse error in badblocks file %s: not sorted correctly!\n", configvars->bblocksinfile); wantabort = 2; return; } statusvars->lastsourceblock = dummy; if (tmp == NULL) { // no more bad blocks in input file // if exists if (( readposition + statusvars->startoffset ) < statusvars->targetsize ) { // go to end of target file for resuming statusvars->lastsourceblock = statusvars->targetsize / statusvars->iblocksize ; } else if ( statusvars->targetsize ) { statusvars->lastsourceblock = ( readposition + statusvars->startoffset )/ statusvars->iblocksize ; } else { break; } } inc_pos = statusvars->lastsourceblock * statusvars->iblocksize ; } } else { debug(DEBUG_BADBLOCKS, "debug: %s %llu - %llu - marking output for whole bad area\n", description, tmp_pos, readposition + statusvars->startoffset ); realmarkoutput(tmp_pos, readposition + statusvars->startoffset , lastgood , readposition , configvars, statusvars); } } void select_for_reading(int source , struct config_struct *configvars, struct status_struct *statusvars) { struct timeval mytime; fd_set rfds, efds; // select for reading. Have a fallback output in case of timeout. do { mytime.tv_sec = 10; mytime.tv_usec = 0; FD_ZERO(&rfds); FD_ZERO(&efds); FD_SET( source , &rfds); FD_SET( source , &efds); select( source +1, &rfds, NULL, &efds, &mytime); if (! ( FD_ISSET( source , &rfds))) { statusvars->desperate = 1; if (configvars->human) { if (statusvars->filesize) { printpercentage(statusvars->percent); } printtimecategory(VERY_VERY_SLOW); } } if (wantabort) break; } while (! ( FD_ISSET( source , &rfds) || FD_ISSET( source , &efds))); } // main int main(int argc, char ** argv) { // 1.declarations // commandline argument handler class struct arglist *carglist; // configuration struct config_struct global_configuration; global_configuration.blocksizestring = DEFBLOCKSIZE; global_configuration.resolutionstring = DEFRESOLUTION; global_configuration.faultblocksizestring = DEFFAULTBLOCKSIZE; global_configuration.bblocksinstring = DEFINPUTBB; global_configuration.bblocksoutstring = DEFOUTPUTBB; global_configuration.xblocksinstring = DEFEXCLBB; global_configuration.failuredefstring = DEFFAILSTRING; global_configuration.timingfilestring = DEFTIMINGFILESTRING; global_configuration.retriesdef = DEFRETRIES; global_configuration.headmovedef = DEFHEADMOVE; global_configuration.lowleveldef = DEFLOWLEVEL; global_configuration.human = 0; global_configuration.marker = NULL; struct config_struct *configvars = &global_configuration; // status struct status_struct global_status; struct status_struct *statusvars = &global_status; // buffer pointer for sfgets() char *tmp; // tmp vars for file offsets off_t tmp_pos, tmp_bytes; // stat() needs this struct stat filestatus; // tmp int vars int errtmp; // 2.command line parsing // parse all commandline arguments carglist = arglist_new(argc, argv); arglist_addarg(carglist, "--stage", 1); arglist_addarg(carglist, "--stage1", 0); arglist_addarg(carglist, "--stage2", 0); arglist_addarg(carglist, "--stage3", 0); arglist_addarg(carglist, "--debug", 1); arglist_addarg(carglist, "--help", 0); arglist_addarg(carglist, "-h", 0); arglist_addarg(carglist, "--sync", 0); arglist_addarg(carglist, "--forceopen", 0); arglist_addarg(carglist, "-b", 1); arglist_addarg(carglist, "-f", 1); arglist_addarg(carglist, "-r", 1); arglist_addarg(carglist, "-R", 1); arglist_addarg(carglist, "-s", 1); arglist_addarg(carglist, "-L", 1); arglist_addarg(carglist, "-l", 1); arglist_addarg(carglist, "-o", 1); arglist_addarg(carglist, "-I", 1); arglist_addarg(carglist, "-i", 1); arglist_addarg(carglist, "-c", 1); arglist_addarg(carglist, "-X", 1); arglist_addarg(carglist, "-x", 1); arglist_addarg(carglist, "-S", 1); arglist_addarg(carglist, "-Z", 1); arglist_addarg(carglist, "-M", 1); arglist_addarg(carglist, "-T", 1); // find out whether the user is wetware configvars->human = (isatty(1) & isatty(2)); if ((arglist_arggiven(carglist, "--debug") == 0)) { debugmode = arglist_integer(arglist_parameter(carglist, "--debug", 0)); } if ((arglist_arggiven(carglist, "--help") == 0) || (arglist_arggiven(carglist, "-h") == 0) || (arglist_parameter(carglist, "VOIDARGS", 2) != NULL) || (arglist_parameter(carglist, "VOIDARGS", 1) == NULL)) { usage(argv[0],stdout); arglist_kill(carglist); return 0; } configvars->sourcefile = arglist_parameter(carglist, "VOIDARGS", 0); configvars->destfile = arglist_parameter(carglist, "VOIDARGS", 1); if (arglist_arggiven(carglist, "--stage1") == 0 ||arglist_integer(arglist_parameter(carglist, "--stage", 0)) == 1) { configvars->faultblocksizestring = "10%"; configvars->resolutionstring = "10%"; configvars->retriesdef = 1; configvars->headmovedef = 0; configvars->lowleveldef = 2; configvars->failuredefstring = FAILSTRING; configvars->bblocksoutstring = "stage1.badblocks"; } if (arglist_arggiven(carglist, "--stage2") == 0 || arglist_integer(arglist_parameter(carglist, "--stage", 0)) == 2) { configvars->faultblocksizestring = "128*"; configvars->resolutionstring = "1*"; configvars->retriesdef = 1; configvars->headmovedef = 0; configvars->lowleveldef = 2; configvars->bblocksinstring = "stage1.badblocks"; configvars->bblocksoutstring = "stage2.badblocks"; } if (arglist_arggiven(carglist, "--stage3") == 0 || arglist_integer(arglist_parameter(carglist, "--stage", 0)) == 3) { configvars->faultblocksizestring = "1*"; configvars->resolutionstring = "1*"; configvars->bblocksinstring = "stage2.badblocks"; configvars->bblocksoutstring = "stage3.badblocks"; configvars->retriesdef = 4; configvars->headmovedef = 1; configvars->lowleveldef = 2; } // low level calls enabled? statusvars->lowlevel = configvars->lowleveldef; if (arglist_arggiven(carglist, "-L") == 0) { statusvars->lowlevel = arglist_integer(arglist_parameter(carglist, "-L", 0)); } if ( statusvars->lowlevel < 0) statusvars->lowlevel = 0; if ( statusvars->lowlevel > 2) statusvars->lowlevel = 2; fprintf(stdout, "Low level device calls enabled mode: %i\n", statusvars->lowlevel ); // synchronous IO statusvars->syncmode = 0; if (arglist_arggiven(carglist, "--sync") == 0) { if (O_SAFECOPYSYNC == O_SYNC) { fprintf(stdout, "Using synchronized IO on source. (O_SYNC)\n"); } else { fprintf(stdout, "Using synchronized IO on source. (O_DIRECT)\n"); } statusvars->syncmode = O_SAFECOPYSYNC; } // synchronous IO statusvars->forceopen = 0; if (arglist_arggiven(carglist, "--forceopen") == 0) { fprintf(stdout, "Forced reopening of source file even if device is temporarily gone.\n"); statusvars->forceopen = 1; } // find out source file size and block size statusvars->filesize = 0; statusvars->fsblocksize = BLOCKSIZE; if (!stat(configvars->sourcefile, &filestatus)) { statusvars->filesize = filestatus.st_size; if (filestatus.st_blksize) { fprintf(stdout, "Reported hw blocksize: %lu\n", filestatus.st_blksize); statusvars->fsblocksize = filestatus.st_blksize; } } if ( statusvars->lowlevel > 0) { statusvars->filesize = lowlevel_filesize(configvars->sourcefile, statusvars->filesize ); statusvars->fsblocksize = lowlevel_blocksize(configvars->sourcefile, statusvars->fsblocksize ); fprintf(stdout, "Reported low level blocksize: %lu\n", statusvars->fsblocksize ); } if ( statusvars->filesize != 0) { fprintf(stdout, "File size: %llu\n", (long long) statusvars->filesize ); } else { fprintf(stderr, "Filesize not reported by stat(), trying seek().\n"); statusvars->source = open(configvars->sourcefile, O_RDONLY | O_RSYNC); if (statusvars->source) { statusvars->filesize = lseek(statusvars->source, 0, SEEK_END); close(statusvars->source); } if ( statusvars->filesize <= 0) { statusvars->filesize = 0; fprintf(stderr, "Unable to determine input file size.\n"); } else { fprintf(stdout, "File size: %llu\n", (long long)statusvars->filesize ); } } tmp = configvars->blocksizestring; if (arglist_arggiven(carglist, "-b") == 0) { configvars->blocksizestring = arglist_parameter(carglist, "-b", 0); } statusvars->blocksize = parseoption(configvars->blocksizestring, statusvars->fsblocksize , statusvars->filesize , tmp); if ( statusvars->blocksize < 1) statusvars->blocksize = statusvars->fsblocksize ; if ( statusvars->blocksize > MAXBLOCKSIZE) statusvars->blocksize = MAXBLOCKSIZE; fprintf(stdout, "Blocksize: %llu\n", (long long)statusvars->blocksize ); tmp = configvars->faultblocksizestring; if (arglist_arggiven(carglist, "-f") == 0) { configvars->faultblocksizestring = arglist_parameter(carglist, "-f", 0); } statusvars->faultblocksize = parseoption(configvars->faultblocksizestring, statusvars->blocksize , statusvars->filesize , tmp); if ( statusvars->faultblocksize < statusvars->blocksize ) statusvars->faultblocksize = statusvars->blocksize ; if ( statusvars->faultblocksize > MAXBLOCKSIZE) statusvars->faultblocksize = MAXBLOCKSIZE; fprintf(stdout, "Fault skip blocksize: %llu\n", (long long)statusvars->faultblocksize ); tmp = configvars->resolutionstring; if (arglist_arggiven(carglist, "-r") == 0) { configvars->resolutionstring = arglist_parameter(carglist, "-r", 0); } statusvars->resolution = parseoption(configvars->resolutionstring, statusvars->blocksize , statusvars->filesize , tmp); if ( statusvars->resolution < 1) statusvars->resolution = 1; if ( statusvars->resolution > statusvars->faultblocksize ) statusvars->resolution = statusvars->faultblocksize ; fprintf(stdout, "Resolution: %llu\n", (long long)statusvars->resolution ); statusvars->retries = configvars->retriesdef; if (arglist_arggiven(carglist, "-R") == 0) { statusvars->retries = arglist_integer(arglist_parameter(carglist, "-R", 0)); } if ( statusvars->retries < 1) statusvars->retries = 1; fprintf(stdout, "Min read attempts: %u\n", statusvars->retries ); statusvars->seeks = configvars->headmovedef; if (arglist_arggiven(carglist, "-Z") == 0) { statusvars->seeks = arglist_integer(arglist_parameter(carglist, "-Z", 0)); } if ( statusvars->seeks < 0) statusvars->seeks = 0; fprintf(stdout, "Head moves on read error: %i\n", statusvars->seeks ); statusvars->iblocksize = statusvars->blocksize ; if (arglist_arggiven(carglist, "-i") == 0) { statusvars->iblocksize = arglist_integer(arglist_parameter(carglist, "-i", 0)); } if ( statusvars->iblocksize < 1 || statusvars->iblocksize > MAXBLOCKSIZE) { fprintf(stderr, "Error: Invalid blocksize given for bad block include file!\n"); arglist_kill(carglist); return 2; } statusvars->incremental = 0; statusvars->targetsize = 0; if (arglist_arggiven(carglist, "-c") == 0) { configvars->bblocksinstring = "/dev/null"; if (arglist_integer(arglist_parameter(carglist, "-c", 0))>0) { statusvars->targetsize = arglist_integer(arglist_parameter(carglist, "-c", 0)) * statusvars->iblocksize; } } if (arglist_arggiven(carglist, "-I") == 0) { configvars->bblocksinstring = arglist_parameter(carglist, "-I", 0); } if (configvars->bblocksinstring != NULL) { statusvars->incremental = 1; configvars->bblocksinfile = configvars->bblocksinstring; fprintf(stdout, "Incremental mode file: %s\nIncremental mode blocksize: %llu\n", configvars->bblocksinfile, (long long)statusvars->iblocksize ); } statusvars->xblocksize = statusvars->blocksize ; if (arglist_arggiven(carglist, "-x") == 0) { statusvars->xblocksize = arglist_integer(arglist_parameter(carglist, "-x", 0)); } if ( statusvars->xblocksize < 1 || statusvars->xblocksize > MAXBLOCKSIZE) { fprintf(stderr, "Error: Invalid blocksize given for bad block exclude file!\n"); arglist_kill(carglist); return 2; } statusvars->excluding = 0; if (arglist_arggiven(carglist, "-X") == 0) { configvars->xblocksinstring = arglist_parameter(carglist, "-X", 0); } if (configvars->xblocksinstring != NULL) { statusvars->excluding = 1; configvars->xblocksinfile = configvars->xblocksinstring; fprintf(stdout, "Exclusion mode file: %s\nExclusion mode blocksize: %llu\n", configvars->xblocksinfile, (long long)statusvars->xblocksize ); } configvars->bblocksoutfile = NULL; if (arglist_arggiven(carglist, "-o") == 0) { configvars->bblocksoutstring = arglist_parameter(carglist, "-o", 0); } if (configvars->bblocksoutstring != NULL) { configvars->bblocksoutfile = configvars->bblocksoutstring; fprintf(stdout, "Badblocks output: %s\n", configvars->bblocksoutfile); } configvars->seekscriptfile = NULL; if (arglist_arggiven(carglist, "-S") == 0) { configvars->seekscriptfile = arglist_parameter(carglist, "-S", 0); fprintf(stdout, "Seek script (fallback): %s\n", configvars->seekscriptfile); } if (arglist_arggiven(carglist, "-T") == 0) { configvars->timingfilestring = arglist_parameter(carglist, "-T", 0); fprintf(stdout, "Write sector timing information to file: %s\n", configvars->timingfilestring); } if (arglist_arggiven(carglist, "-M") == 0) { configvars->failuredefstring = arglist_parameter(carglist, "-M", 0); if (configvars->failuredefstring == NULL) configvars->failuredefstring = ""; } if (configvars->failuredefstring != NULL) { configvars->marker = configvars->failuredefstring; fprintf(stdout, "Marker string: %s\n", configvars->marker); } statusvars->startoffset = 0; if (arglist_arggiven(carglist, "-s") == 0) { statusvars->startoffset = arglist_integer(arglist_parameter(carglist, "-s", 0)); } if ( statusvars->startoffset < 1) statusvars->startoffset = 0; fprintf(stdout, "Starting block: %llu\n", (long long)statusvars->startoffset ); statusvars->length = 0; if (arglist_arggiven(carglist, "-l") == 0) { statusvars->length = arglist_integer(arglist_parameter(carglist, "-l", 0)); } if ( statusvars->length < 1) statusvars->length = -1; if ( statusvars->length >= 0) { fprintf(stdout, "Size limit (blocks): %llu\n", (long long)statusvars->length ); } statusvars->startoffset = statusvars->startoffset * statusvars->blocksize ; statusvars->length = statusvars->length * statusvars->blocksize ; if ( statusvars->filesize == 0 && statusvars->length > 0) { statusvars->filesize = statusvars->startoffset + statusvars->length ; } statusvars->databufferpool = (char*)malloc(((2* statusvars->blocksize )+1)*sizeof(char)); if ( statusvars->databufferpool == NULL) { perror("MEMORY ALLOCATION ERROR!\nCOULDNT ALLOCATE MAIN BUFFER "); return 2; } // align databuffer to block size - needed to support O_DIRECT and /dev/raw devices statusvars->databuffer = statusvars->databufferpool + statusvars->blocksize -(((uintptr_t) statusvars->databufferpool )% statusvars->blocksize ); // 3.opening io handles //open files fprintf(stdout, "Source: %s\nDestination: %s\n", configvars->sourcefile, configvars->destfile); statusvars->source = open(configvars->sourcefile, O_RDONLY | O_NONBLOCK | statusvars->syncmode ); if (statusvars->source == -1) { fprintf(stderr, "Error opening sourcefile: %s", configvars->sourcefile); perror(" "); if (configvars->human) usage(argv[0],stderr); arglist_kill(carglist); return 2; } if ( statusvars->excluding == 1) { statusvars->xblocksin = fopen(configvars->xblocksinfile, "r"); if (statusvars->xblocksin == NULL) { close(statusvars->source); fprintf(stderr, "Error opening exclusion badblock file for reading: %s", configvars->xblocksinfile); perror(" "); arglist_kill(carglist); return 2; } } if ( statusvars->incremental == 1) { statusvars->bblocksin = fopen(configvars->bblocksinfile, "r"); if (statusvars->bblocksin == NULL) { close(statusvars->source); if ( statusvars->excluding == 1) fclose(statusvars->xblocksin); fprintf(stderr, "Error opening badblock file for reading: %s", configvars->bblocksinfile); perror(" "); arglist_kill(carglist); return 2; } statusvars->destination = open(configvars->destfile, O_WRONLY, 0666 ); if (statusvars->destination == -1) { close(statusvars->source); fclose(statusvars->bblocksin); if ( statusvars->excluding == 1) fclose(statusvars->xblocksin); fprintf(stderr, "Error opening destination: %s", configvars->destfile); perror(" "); if (configvars->human) usage(argv[0],stderr); arglist_kill(carglist); return 2; } // try to complete incomplete (aborted) safecopies by comparing file sizes if (! statusvars->targetsize ) { if (!fstat(statusvars->destination, &filestatus)) { statusvars->targetsize = filestatus.st_size; } } if (! statusvars->targetsize ) { fprintf(stderr, "Destination filesize not reported by stat(), trying seek().\n"); statusvars->targetsize = lseek(statusvars->destination, 0, SEEK_END); if ( statusvars->targetsize < 0) statusvars->targetsize = 0; } if (! statusvars->targetsize ) { fprintf(stderr, "Error determining destination file size, cannot resume!"); } else { fprintf(stdout, "Current destination size: %llu\n", (long long)statusvars->targetsize ); } } else { statusvars->destination = open(configvars->destfile, O_WRONLY | O_TRUNC | O_CREAT, 0666 ); if (statusvars->destination == -1) { close(statusvars->source); if ( statusvars->excluding == 1) fclose(statusvars->xblocksin); fprintf(stderr, "Error opening destination: %s", configvars->destfile); perror(" "); if (configvars->human) usage(argv[0],stderr); arglist_kill(carglist); return 2; } } if (configvars->bblocksoutfile != NULL) { // append sectors to badblocks file if in incremental mode if (statusvars->incremental == 1) { statusvars->bblocksout = open(configvars->bblocksoutfile, O_WRONLY | O_APPEND | O_CREAT, 0666); } else { statusvars->bblocksout = open(configvars->bblocksoutfile, O_WRONLY | O_TRUNC | O_CREAT, 0666); } if (statusvars->bblocksout == -1) { close(statusvars->source); close(statusvars->destination); if ( statusvars->incremental == 1) fclose(statusvars->bblocksin); if ( statusvars->excluding == 1) fclose(statusvars->xblocksin); fprintf(stderr, "Error opening badblock file for writing: %s", configvars->bblocksoutfile); perror(" "); arglist_kill(carglist); return 2; } } statusvars->timingfile = NULL; if (configvars->timingfilestring != NULL) { statusvars->timingfile = fopen(configvars->timingfilestring, "a"); if (statusvars->timingfile == NULL) { close(statusvars->source); close(statusvars->destination); if ( statusvars->incremental == 1) fclose(statusvars->bblocksin); if ( statusvars->excluding == 1) fclose(statusvars->xblocksin); if (statusvars->bblocksout) close(statusvars->bblocksout); fprintf(stderr, "Error opening timingfile for writing: %s", configvars->bblocksoutfile); perror(" "); arglist_kill(carglist); return 2; } } // 4.initialisations // setting signal handler signal(SIGINT, signalhandler); // initialise all vars statusvars->readposition = 0; //current wanted reading position in sourcefile relative to startoffset statusvars->writeposition = 0; //current writing position in destination file statusvars->block = -1; //amount of bytes read from the current reading position, negative values indicate errors statusvars->remain = 0; //remainder if a read operation read less than blocksize bytes statusvars->writeremain = 0; //remainder if a write operation wrote less than blocksize bytes statusvars->softerr = 0; //counter for recovered read errors statusvars->harderr = 0; //counter for unrecoverable read errors statusvars->counter = 1; //counter for visual output - a dot is printed all 1024 blocks statusvars->newerror = statusvars->retries ; //counter for repeated read attempts on the current block - zero indicates //we are currently dealing with an unrecoverable error and need to find the end of the bad area statusvars->newsofterror = 0; //flag that indicates previous read failures on the current block statusvars->lasterror = 0; //address of the last encountered bad area in source file statusvars->lastgood = 0; //address of the last encountered successful read in source file statusvars->lastmarked = 0; //last known address already marked in output file statusvars->lastbadblock = -1; //most recently encountered block for output badblock file statusvars->lastxblock = -1; //most recently encountered block number from input exclude file statusvars->previousxblock = -1; //2nd most recently encountered block number from input exclude file statusvars->lastsourceblock = -1; //most recently encountered block number from input badblock file statusvars->damagesize = 0; //counter for size of unreadable source file data statusvars->backtracemode = 0; //flag that indicates safecopy is searching for the end of a bad area statusvars->percent = -1; //current progress status, relative to source file size statusvars->oldpercent = -1; //previously output percentage, needed to indicate required updates statusvars->oldelapsed = 0; //recent average time period for reading one block statusvars->oldcategory = timecategory( statusvars->oldelapsed ); //timecategories translate raw milliseconds into human readable classes statusvars->elapsed = 0; //time elapsed while reading the current block statusvars->output = 0; //flag indicating that output (smily, percentage, ...) needs to be updated statusvars->linewidth = 0; //counter for x position in text output on terminal statusvars->sposition = 0; //actual file pointer position in sourcefile statusvars->seekable = 1; //flag that sourcefile allows seeking statusvars->desperate = 0; //flag set to indicate required low level source device access // 5.dynamic initialisations and tests // attempt to seek to start position to find out wether source file is seekable statusvars->cposition = lseek(statusvars->source, statusvars->startoffset , SEEK_SET); if ( statusvars->cposition < 0) { perror("Warning: Input file is not seekable "); statusvars->seekable = 0; close(statusvars->source); statusvars->cposition = emergency_seek( statusvars->startoffset , 0, statusvars->blocksize , configvars->seekscriptfile); if ( statusvars->cposition >= 0) { statusvars->sposition = statusvars->cposition ; } statusvars->source = open(configvars->sourcefile, O_RDONLY | O_NONBLOCK | statusvars->syncmode ); if (statusvars->source == -1) { perror("Error reopening sourcefile after external seek "); wantabort = 2; } fprintf(stdout, "|/|"); } else { statusvars->sposition = statusvars->cposition ; statusvars->seekable = 1; } // 6.main io loop fflush(stdout); fflush(stderr); // main data loop. Continue until all data has been read or CTRL+C has been pressed while (!wantabort && statusvars->block != 0 && ( statusvars->readposition < statusvars->length || statusvars->length < 0)) { // 6.a planning - calculate wanted read position based on include/exclude input files debug(DEBUG_FLOW, "debug: start of cycle\n"); // start with a whole new block if we finnished the old if ( statusvars->remain == 0) { debug(DEBUG_FLOW, "debug: preparing to read a new block\n"); // if necessary, repeatedly calculate include and exclude blocks // (for example if we seek to a new include block, but then exclude it, // so we seek to the next, then exclude it, etc) if ( statusvars->incremental && statusvars->newerror != 0) { debug(DEBUG_INCREMENTAL, "debug: incremental - searching next block\n"); // Incremental mode. Skip over unnecessary areas. // check wether the current block is in the badblocks list, // if so, proceed as usual, // otherwise seek to the next badblock in input tmp_pos = ( statusvars->readposition + statusvars->startoffset )/ statusvars->iblocksize ; if (tmp_pos != statusvars->lastsourceblock ) { tmp = statusvars->textbuffer ; while (tmp != NULL && statusvars->lastsourceblock < tmp_pos ) { tmp = fgets( statusvars->textbuffer , 64, statusvars->bblocksin); long long unsigned int dummy; if (sscanf( statusvars->textbuffer , "%llu", &dummy ) != 1) tmp = NULL; if ( tmp!= NULL && (signed)dummy < (signed)statusvars->lastsourceblock ) { fprintf(stderr, "Parse error in badblocks file %s: not sorted correctly!\n", configvars->bblocksinfile); wantabort = 2; break; } statusvars->lastsourceblock = dummy; } if (wantabort) break; if (tmp == NULL) { // no more bad blocks in input file // if exists if (( statusvars->readposition + statusvars->startoffset ) < statusvars->targetsize ) { // go to end of target file for resuming statusvars->lastsourceblock = statusvars->targetsize / statusvars->iblocksize ; } else if ( statusvars->targetsize ) { statusvars->lastsourceblock = tmp_pos; } else { // othewise end immediately statusvars->remain = 0; break; } } debug(DEBUG_INCREMENTAL, "debug: incremental - target is %llu position is %llu\n", statusvars->lastsourceblock , tmp_pos); statusvars->readposition = ( statusvars->lastsourceblock * statusvars->iblocksize )- statusvars->startoffset ; } else { debug(DEBUG_INCREMENTAL, "debug: incremental - still in same block\n"); } } // make sure any misalignment to block boundaries get corrected asap // be sure to use skipping size when in bad area if ( statusvars->newerror == 0) { statusvars->remain = ((( statusvars->readposition / statusvars->blocksize )* statusvars->blocksize )+ statusvars->faultblocksize )- statusvars->readposition ; } else { statusvars->remain = ((( statusvars->readposition / statusvars->blocksize )* statusvars->blocksize )+ statusvars->blocksize )- statusvars->readposition ; } debug(DEBUG_FLOW, "debug: prepared to read block %lli size %llu at %llu\n",( statusvars->readposition + statusvars->startoffset )/ statusvars->blocksize , statusvars->remain , statusvars->readposition + statusvars->startoffset ); } if ( statusvars->excluding && statusvars->remain != 0) { // Exclusion mode, check relevant exclude sectors whether they affect the current position // first check if we need to backtrack in exclude file. debug(DEBUG_EXCLUDE, "debug: checking for exclude blocks at position %llu\n", statusvars->readposition + statusvars->startoffset ); if ( statusvars->readposition + statusvars->startoffset < statusvars->lastxblock * statusvars->xblocksize ) { debug(DEBUG_EXCLUDE, "debug: possibly need backtracking in exclude list, next exclude block %lli\n", statusvars->lastxblock ); if ( statusvars->readposition + statusvars->startoffset < statusvars->previousxblock * statusvars->xblocksize ) { // we read too far in exclude block file, probably after backtracking // close exclude file and reopen debug(DEBUG_EXCLUDE, "debug: reopening exclude file and reading from the start\n"); fclose(statusvars->xblocksin); statusvars->xblocksin = fopen(configvars->xblocksinfile, "r"); if (statusvars->xblocksin == NULL) { statusvars->excluding = 0; fprintf(stderr, "Error reopening exclusion badblock file for reading: %s", configvars->xblocksinfile); perror(" "); wantabort = 2; break; } statusvars->lastxblock = -1; statusvars->previousxblock = -1; } else if (( statusvars->previousxblock +1)* statusvars->xblocksize > statusvars->readposition + statusvars->startoffset ) { // backtrack just one exclude block statusvars->lastxblock = statusvars->previousxblock ; debug(DEBUG_EXCLUDE, "debug: using last exclude block %lli\n", statusvars->lastxblock ); } else { debug(DEBUG_EXCLUDE, "debug: false alarm, current exclude block is fine\n"); } } tmp_pos = statusvars->lastxblock * statusvars->xblocksize ; debug(DEBUG_EXCLUDE, "debug: checking with xblock %lli at %llu\n", statusvars->lastxblock , tmp_pos); tmp_bytes = 0; // using this as indicator for restart while (tmp_pos < statusvars->readposition + statusvars->startoffset + statusvars->remain ) { if (tmp_pos+ statusvars->xblocksize > statusvars->readposition + statusvars->startoffset ) { if (tmp_pos <= statusvars->readposition + statusvars->startoffset ) { // start of current block is covered by exclude block. skip. debug(DEBUG_EXCLUDE, "debug: skipping ahead to avoid exclude block\n"); tmp_bytes = 1; if (tmp_pos+ statusvars->xblocksize < statusvars->readposition + statusvars->startoffset + statusvars->remain ) { statusvars->remain = (tmp_pos+ statusvars->xblocksize )-( statusvars->readposition + statusvars->startoffset ); debug(DEBUG_EXCLUDE, "debug: remain set to %llu\n", statusvars->remain ); } else { if (! statusvars->backtracemode ) { statusvars->remain = 0; } else { statusvars->remain = 1; debug(DEBUG_EXCLUDE, "debug: remain set to %llu\n", statusvars->remain ); } } statusvars->readposition = (tmp_pos+ statusvars->xblocksize )- statusvars->startoffset ; break; } else if (tmp_pos < statusvars->readposition + statusvars->startoffset + statusvars->remain ) { debug(DEBUG_EXCLUDE, "debug: shrinking block size because of exclude block from %llu to %llu\n", statusvars->remain ,(tmp_pos-( statusvars->readposition + statusvars->startoffset ))); statusvars->remain = tmp_pos-( statusvars->readposition + statusvars->startoffset ); break; } else { // start of exclude block is beyond end of our area. we are done break; } } else { // read next exclude block debug(DEBUG_EXCLUDE, "debug: reading another exclude block\n"); tmp = fgets( statusvars->textbuffer , 64, statusvars->xblocksin); long long unsigned int dummy; if (sscanf( statusvars->textbuffer , "%llu", &dummy) != 1) tmp = NULL; if ( tmp!=NULL && (signed)dummy < (signed)statusvars->lastxblock ) { fprintf(stderr, "Parse error in badblocks file %s: not sorted correctly!\n", configvars->xblocksinfile); wantabort = 2; break; } tmp_pos = dummy; if (tmp == NULL) { // no more bad blocks in input file break; } statusvars->previousxblock = statusvars->lastxblock ; statusvars->lastxblock = tmp_pos; tmp_pos = statusvars->lastxblock * statusvars->xblocksize ; debug(DEBUG_EXCLUDE, "debug: reading another exclude block: %lli at %llu\n", statusvars->lastxblock , tmp_pos); } } if (tmp_bytes == 1) { debug(DEBUG_EXCLUDE, "debug: recalculation needed because of exclude blocks, restarting cycle\n"); continue; } } if (wantabort) break; // 6.b navigation - attempt to seek to requested input file position and find out actual position // seek and read - timed gettimeofday(& statusvars->oldtime , NULL); // seek only if the current file position differs from requested file position if ( statusvars->sposition != statusvars->readposition + statusvars->startoffset ) { debug(DEBUG_SEEK, "debug: seeking in input from %llu to %llu\n", statusvars->sposition , statusvars->readposition + statusvars->startoffset ); statusvars->cposition = lseek(statusvars->source, statusvars->readposition + statusvars->startoffset , SEEK_SET); if ( statusvars->cposition > 0) { statusvars->sposition = statusvars->cposition ; statusvars->seekable = 1; } else { // seek failed, check why errtmp = errno; if (( statusvars->readposition + statusvars->startoffset ) < statusvars->filesize && lowlevel_canseek() && ( statusvars->lowlevel == 2 || ( statusvars->lowlevel == 1 && statusvars->desperate ))) { // lowlevel operation will take care of seeking. // and can do it statusvars->cposition = statusvars->readposition + statusvars->startoffset ; statusvars->sposition = statusvars->cposition ; } else if (errtmp == EINVAL && statusvars->seekable == 1) { // tried to seek past the end of file. break; } else { // input file is not seekable! if ( statusvars->seekable ) { write(1, &"|/|", 3); statusvars->seekable = 0; } if ( statusvars->readposition + statusvars->startoffset > statusvars->sposition ) { // emergency seek will only handle positive seeks // close input file for seek/skip close (statusvars->source); statusvars->cposition = emergency_seek( statusvars->startoffset + statusvars->readposition , statusvars->sposition , statusvars->blocksize , configvars->seekscriptfile); if ( statusvars->cposition < 0 && statusvars->newerror == 0) { // bail if we cannot skip over hard errors! fprintf(stderr, "\nError: Unable to skip over bad area.\n"); break; } // reopen input file statusvars->source = open(configvars->sourcefile, O_RDONLY | O_NONBLOCK | statusvars->syncmode ); if (statusvars->source == -1) { perror("\nError reopening sourcefile after external seek "); wantabort = 2; break; } if ( statusvars->cposition >= 0) { statusvars->sposition = statusvars->cposition ; } } } } } // prevent negative write offsets if ( statusvars->sposition > statusvars->startoffset ) { statusvars->readposition = statusvars->sposition - statusvars->startoffset ; } else { statusvars->readposition = 0; } // make sure not to read beyond the specified end if ( statusvars->length >= 0) { if ( statusvars->readposition >= statusvars->length ) statusvars->readposition = statusvars->length ; if ( statusvars->readposition + statusvars->remain >= statusvars->length ) statusvars->remain = statusvars->length - statusvars->readposition ; } // write where we read statusvars->writeposition = statusvars->readposition ; if ( statusvars->filesize > statusvars->startoffset ) { statusvars->percent = (100*( statusvars->readposition ))/( statusvars->filesize - statusvars->startoffset ); } // 6.c patience - wait for availability of data select_for_reading(statusvars->source, configvars, statusvars); if (wantabort) break; // 6.d input - attempt to read from sourcefile // read input data // to limit memory usage do not allow to read chunks bigger // than one block, even if faultskipsize is set statusvars->maxremain = statusvars->remain ; if ( statusvars->maxremain > statusvars->blocksize ) statusvars->maxremain = statusvars->blocksize ; if ( statusvars->lowlevel == 0 || ( statusvars->lowlevel == 1 && ! statusvars->desperate )) { debug(DEBUG_IO, "debug: normal read\n"); statusvars->block = read(statusvars->source, statusvars->databuffer , statusvars->maxremain ); } else { //desperate mode means we are allowed to use low lvl //IO syscalls to work around read errors debug(DEBUG_IO, "debug: low level read\n"); statusvars->block = read_desperately(configvars->sourcefile, &statusvars->source, statusvars->databuffer , statusvars->sposition , statusvars->maxremain , statusvars->seekable , statusvars->desperate , statusvars->syncmode ); } // time reading for quality calculation gettimeofday(& statusvars->newtime , NULL); statusvars->elapsed = timediff( statusvars->oldtime , statusvars->newtime ); if (statusvars->timingfile) { fprintf(statusvars->timingfile, "%010llu %lu %lli\n", (long long)(statusvars->sposition / statusvars->blocksize) , statusvars->elapsed , (long long)statusvars->block ); } // 6.e feedback - calculate and display user feedback information // smooth times, react sensitive to high times if (timecategory( statusvars->elapsed ) > timecategory( statusvars->oldelapsed )) { statusvars->oldelapsed = (((9* statusvars->oldelapsed )+ statusvars->elapsed )/10); } else if (timecategory( statusvars->elapsed ) < timecategory( statusvars->oldelapsed )) { statusvars->oldelapsed = (((99* statusvars->oldelapsed )+ statusvars->elapsed )/100); } // update percentage if changed if ( statusvars->filesize && ( statusvars->percent != statusvars->oldpercent || statusvars->output )) { if (configvars->human) { printpercentage( statusvars->percent ); printtimecategory(timecategory( statusvars->oldelapsed )); } statusvars->oldpercent = statusvars->percent ; } // update quality if changed if (timecategory( statusvars->oldelapsed ) != statusvars->oldcategory ) { if (configvars->human) { if ( statusvars->filesize ) printpercentage( statusvars->percent ); printtimecategory(timecategory( statusvars->oldelapsed )); } statusvars->oldcategory = timecategory( statusvars->oldelapsed ); } else if ( statusvars->output && configvars->human) { // or if any output has taken place if ( statusvars->filesize ) printpercentage( statusvars->percent ); printtimecategory(timecategory( statusvars->oldelapsed )); } // break lines after 40 chars to prevent backspace bug of terminals if ( statusvars->linewidth > 40) { if (configvars->human) { tmp_pos = statusvars->readposition / statusvars->blocksize ; sprintf( statusvars->textbuffer , " [%lli] \n", (long long)tmp_pos); write(2, statusvars->textbuffer , strlen( statusvars->textbuffer )); } statusvars->linewidth = 0; } statusvars->output = 0; // 6.f processing - react according to result of read operation // 6.f.1 successful read: if ( statusvars->block > 0) { debug(DEBUG_IO, "debug: successful read\n"); statusvars->sposition = statusvars->sposition + statusvars->block ; // successful read, if happening during soft recovery // (downscale or retry) list a single soft error if ( statusvars->newsofterror == 1) { statusvars->newsofterror = 0; statusvars->softerr ++; } // read successful, test for end of damaged area if ( statusvars->newerror == 0) { // 6.f.1.a attempt to backtrack for readable data prior to current position or... // we are in recovery since we just read past the end of a damaged area // so we go back until the beginning of the readable area is found (if possible) if ( statusvars->remain > statusvars->resolution && statusvars->seekable ) { statusvars->remain = statusvars->remain /2; statusvars->readposition -= statusvars->remain ; write(1, &"<", 1); statusvars->output = 1; statusvars->linewidth ++; statusvars->backtracemode = 1; debug(DEBUG_FLOW, "debug: shrinking remain to %llu\n", statusvars->remain ); } else { statusvars->newerror = statusvars->retries ; statusvars->remain = 0; tmp_pos = statusvars->readposition / statusvars->blocksize ; tmp_bytes = statusvars->readposition - statusvars->lastgood ; statusvars->damagesize += tmp_bytes; sprintf( statusvars->textbuffer , "}[%llu](+%llu)", (long long)tmp_pos, (long long)tmp_bytes); write(1, statusvars->textbuffer , strlen( statusvars->textbuffer )); if (configvars->human) write(2, &"\n", 1); statusvars->output = 1; statusvars->linewidth = 0; statusvars->backtracemode = 0; markoutput("end of bad area", statusvars->readposition , statusvars->lasterror , configvars, statusvars); statusvars->lasterror = statusvars->readposition ; } } else { // 6.f.1.b write to output data file //disable desperate mode (use normal high lvl IO) statusvars->desperate = 0; statusvars->newerror = statusvars->retries ; if ( statusvars->block < statusvars->remain ) { // not all data we wanted got read, note that write(1, &"_", 1); statusvars->output = 1; statusvars->linewidth ++; statusvars->counter = 1; } else if (-- statusvars->counter <= 0) { write(1, &".", 1); statusvars->output = 1; statusvars->linewidth ++; statusvars->counter = 1024; } statusvars->remain -= statusvars->block ; statusvars->readposition += statusvars->block ; statusvars->writeremain = statusvars->block ; off_t writeoffset = 0; if ( statusvars->sposition < statusvars->startoffset ) { // handle cases where unwanted data has been read doe to seek error if (( statusvars->sposition + statusvars->block ) <= statusvars->startoffset ) { // we read data we are supposed to skip! Ignore. statusvars->writeremain = 0; } else { // partial skip statusvars->writeremain = ( statusvars->sposition + statusvars->block )- statusvars->startoffset ; writeoffset = statusvars->startoffset - statusvars->sposition ; } } while ( statusvars->writeremain > 0) { // write data to destination file debug(DEBUG_SEEK, "debug: seek in destination file: %llu\n", statusvars->writeposition ); statusvars->cposition = lseek(statusvars->destination, statusvars->writeposition , SEEK_SET); if ( statusvars->cposition < 0) { fprintf(stderr, "\nError: seek() in %s failed", configvars->destfile); perror(" "); wantabort = 2; break; } debug(DEBUG_IO, "debug: writing data to destination file: %llu bytes at %llu\n", statusvars->writeremain , statusvars->cposition ); statusvars->writeblock = write(statusvars->destination, statusvars->databuffer +writeoffset, statusvars->writeremain ); if ( statusvars->writeblock <= 0) { fprintf(stderr, "\nError: write to %s failed", configvars->destfile); perror(" "); wantabort = 2; break; } statusvars->writeremain -= statusvars->writeblock ; writeoffset += statusvars->writeblock ; statusvars->writeposition += statusvars->writeblock ; } } } else if ( statusvars->block < 0) { // 6.f.2 failed read debug(DEBUG_IO, "debug: read failed: %s\n", strerror(errno)); // operation failed statusvars->counter = 1; // use low level IO for error correction if allowed statusvars->desperate = 1; // 6.f.2.a try again or... if ( statusvars->remain > statusvars->resolution && statusvars->newerror > 0) { // start of a new erroneous area - decrease readsize in // case we can read partial data from the beginning statusvars->newsofterror = 1; statusvars->remain = statusvars->remain /2; write(1, &">", 1); statusvars->linewidth ++; statusvars->output = 1; } else { if ( statusvars->newerror > 1) { // if we are at minimal size, attempt a couple of retries statusvars->newsofterror = 1; statusvars->newerror --; write(1, &"!", 1); statusvars->linewidth ++; statusvars->output = 1; } else { // 6.f.2.b skip over bad area // readsize is already minimal, out of retry attempts // unrecoverable error, go one sector ahead and try again there if ( statusvars->newerror == 1) { // if this is still the start of a damaged area, // also print the amount of successfully read sectors statusvars->newsofterror = 0; statusvars->newerror = 0; tmp_pos = statusvars->readposition / statusvars->blocksize ; tmp_bytes = statusvars->readposition - statusvars->lasterror ; sprintf( statusvars->textbuffer , "[%llu](+%llu){", (long long)tmp_pos, (long long)tmp_bytes); write(1, statusvars->textbuffer , strlen( statusvars->textbuffer )); statusvars->output = 1; statusvars->linewidth += strlen( statusvars->textbuffer ); // and we set the read size high enough to go over the damaged area quickly // (next block boundary) statusvars->remain = ((( statusvars->readposition / statusvars->blocksize )* statusvars->blocksize )+ statusvars->faultblocksize )- statusvars->readposition ; statusvars->lastgood = statusvars->readposition ; } if (! statusvars->backtracemode ) { statusvars->harderr ++; write(1, &"X", 1); statusvars->output = 1; statusvars->linewidth ++; markoutput("continuous bad area", statusvars->readposition ,( statusvars->lasterror > statusvars->lastgood ? statusvars->lasterror : statusvars->lastgood ), configvars, statusvars); statusvars->lasterror = statusvars->readposition ; } // skip ahead(virtually) statusvars->readposition += statusvars->remain ; if (! statusvars->backtracemode ) { // force re-calculation of next blocksize to fix // block misalignment caused by partial data reading. // doing so during backtrace would cause an infinite loop. statusvars->remain = 0; } else { debug(DEBUG_FLOW, "debug: bad block during backtrace - remain is %llu at %llu\n", statusvars->remain , statusvars->readposition + statusvars->startoffset ); } } } if (wantabort) break; // 6.f.2.c close and reopen source file // reopen source file to clear possible error flags preventing us from getting more data close(statusvars->source); // do some forced seeks to move head around. for ( statusvars->cseeks = 0; statusvars->cseeks < statusvars->seeks ; statusvars->cseeks ++) { debug(DEBUG_SEEK, "debug: forced head realignment\n"); // note. must use O_RSYNC since with O_DIRECT / raw devices, lseek to end of file might not work statusvars->source = open(configvars->sourcefile, O_RDONLY | O_NONBLOCK | O_RSYNC ); if (statusvars->source) { lseek(statusvars->source, 0, SEEK_SET); select_for_reading(statusvars->source, configvars, statusvars); if (wantabort) break; read(statusvars->source, statusvars->databuffer , statusvars->blocksize ); close(statusvars->source); } statusvars->source = open(configvars->sourcefile, O_RDONLY | O_NONBLOCK | O_RSYNC ); if (statusvars->source) { lseek(statusvars->source,- statusvars->blocksize , SEEK_END); select_for_reading(statusvars->source, configvars, statusvars); if (wantabort) break; read(statusvars->source, statusvars->databuffer , statusvars->blocksize ); close(statusvars->source); } if (wantabort) break; } statusvars->source = open(configvars->sourcefile, O_RDONLY | O_NONBLOCK | statusvars->syncmode ); while (statusvars->source == -1 && statusvars->forceopen && !wantabort ) { sleep(1); statusvars->source = open(configvars->sourcefile, O_RDONLY | O_NONBLOCK | statusvars->syncmode ); } if (statusvars->source == -1) { perror("\nError reopening sourcefile after read error "); wantabort = 2; break; } if ( statusvars->seekable ) { // in seekable input, a re-opening sets the pointer to zero // we must reflect that. statusvars->sposition = 0; } } } // 7.closing and finalisation debug(DEBUG_FLOW, "debug: main loop ended\n"); fflush(stdout); fflush(stderr); if ( statusvars->newerror == 0) { // if theres an error at the end of input, treat as if we had one successful read afterwards tmp_pos = statusvars->readposition / statusvars->blocksize ; tmp_bytes = statusvars->readposition - statusvars->lastgood ; statusvars->damagesize += tmp_bytes; sprintf( statusvars->textbuffer , "}[%llu](+%llu)", (long long)tmp_pos, (long long)tmp_bytes); write(1, statusvars->textbuffer , strlen( statusvars->textbuffer )); if (configvars->human) write(2, &"\n", 1); // mark badblocks in output if not aborted because of error if (wantabort<2) { if ( statusvars->filesize && statusvars->lastgood + statusvars->startoffset < statusvars->filesize && statusvars->readposition + statusvars->startoffset >= statusvars->filesize ) { markoutput("end of file - filling to filesize", statusvars->filesize, statusvars->lastgood, configvars, statusvars); } else { markoutput("end of file - filling to last seen position", statusvars->readposition + statusvars->startoffset, statusvars->lastgood, configvars, statusvars); } } } if (wantabort==1) { fprintf(stdout, "\nAborted by user request!\n"); } else if (wantabort>1) { fprintf(stdout, "\nAborted because of error!\n"); } else { fprintf(stdout, "\nDone!\n"); } fprintf(stdout, "Recovered bad blocks: %llu\n", (long long)statusvars->softerr ); fprintf(stdout, "Unrecoverable bad blocks (bytes): %llu (%llu)\n", (long long)statusvars->harderr, (long long)statusvars->damagesize ); fprintf(stdout, "Blocks (bytes) copied: %llu (%llu)\n", (long long)(( statusvars->writeposition )/ statusvars->blocksize ), (long long)statusvars->writeposition ); close(statusvars->destination); close(statusvars->source); if ( statusvars->incremental == 1) fclose(statusvars->bblocksin); if ( statusvars->excluding == 1) fclose(statusvars->xblocksin); if (configvars->bblocksoutfile != NULL) close(statusvars->bblocksout); if (statusvars->timingfile != NULL) fclose(statusvars->timingfile); arglist_kill(carglist); if (wantabort) { return (2); } if ( statusvars->damagesize > 0) { return (1); } return (0); } safecopy-1.7/src/arglist.h0000644000175100001440000000271711205000652014630 0ustar ravenusers/** * This file is copyright ©2009 Corvus Corax * Distributed under the terms of the GPL version 2 or higher */ /*This file contains the arglist class, to save the list of possible command line arguments*/ /*Maybe i should be proud of this, this is a classical! I always said "Who needs C++?" >;>>> */ struct arglist; /*The structure sectorlist, public for pointers, members are private*/ struct arglist* arglist_new(int argc, char* argv[]); /*A constructor recieves the command line arguments for initial processing returns NULL on failure */ int arglist_remarg (struct arglist* list,char* argument); /*Removes an argument from the list 0 for success, 1 for not found, -1 for error */ int arglist_kill(struct arglist* list); /*A destructor, 0 for OK, -1 for error*/ int arglist_addarg (struct arglist* list,char* argument, int numparams); /*Adds a possible argument to the list 0: added, 1: changed, -1: failure */ int arglist_arggiven (struct arglist* list, char* argument ); /*Returns 0 if an argument has been specified, 1 if not, -1 on error*/ char* arglist_parameter (struct arglist* list, char* argument, int param); /*Lists the specified Parameter of a given argument NULL if something wrong or not given */ int arglist_isinteger (char* text); /*Returns 0 if char text can be translated into a number -1 of not */ int arglist_integer (char* text); /*Returns numbertranslation of string text, 0 if not successful, do use arglist_isinteger first*/ safecopy-1.7/COPYING0000644000175100001440000004311011233347644013266 0ustar ravenusers GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License. safecopy-1.7/AUTHORS0000644000175100001440000000006711233347644013307 0ustar ravenusersCode: Corvus Corax aka Eric Noack no warranty !!!!! safecopy-1.7/configure0000755000175100001440000056263611726756527014200 0ustar ravenusers#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.68. # # # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, # 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software # Foundation, Inc. # # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : else exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 test \$(( 1 + 1 )) = 2 || exit 1" if (eval "$as_required") 2>/dev/null; then : as_have_required=yes else as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir/$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : CONFIG_SHELL=$as_shell as_have_required=yes if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : break 2 fi fi done;; esac as_found=false done $as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : CONFIG_SHELL=$SHELL as_have_required=yes fi; } IFS=$as_save_IFS if test "x$CONFIG_SHELL" != x; then : # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV export CONFIG_SHELL case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec "$CONFIG_SHELL" $as_opts "$as_myself" ${1+"$@"} fi if test x$as_have_required = xno; then : $as_echo "$0: This script requires a shell more modern than all" $as_echo "$0: the shells that I found on your system." if test x${ZSH_VERSION+set} = xset ; then $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" $as_echo "$0: be upgraded to zsh 4.3.4 or later." else $as_echo "$0: Please tell bug-autoconf@gnu.org about your system, $0: including any error possibly output before this $0: message. Then install a modern shell, or manually run $0: the script under such a shell if you do have one." fi exit 1 fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -p'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -p' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi if test -x / >/dev/null 2>&1; then as_test_x='test -x' else if ls -dL / >/dev/null 2>&1; then as_ls_L_option=L else as_ls_L_option= fi as_test_x=' eval sh -c '\'' if test -d "$1"; then test -d "$1/."; else case $1 in #( -*)set "./$1";; esac; case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( ???[sx]*):;;*)false;;esac;fi '\'' sh ' fi as_executable_p=$as_test_x # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME= PACKAGE_TARNAME= PACKAGE_VERSION= PACKAGE_STRING= PACKAGE_BUGREPORT= PACKAGE_URL= ac_unique_file="configure.in" ac_subst_vars='am__EXEEXT_FALSE am__EXEEXT_TRUE LTLIBOBJS LIBOBJS EGREP GREP CPP am__fastdepCC_FALSE am__fastdepCC_TRUE CCDEPMODE AMDEPBACKSLASH AMDEP_FALSE AMDEP_TRUE am__quote am__include DEPDIR OBJEXT EXEEXT ac_ct_CC CPPFLAGS LDFLAGS CFLAGS CC am__untar am__tar AMTAR am__leading_dot SET_MAKE AWK mkdir_p MKDIR_P INSTALL_STRIP_PROGRAM STRIP install_sh MAKEINFO AUTOHEADER AUTOMAKE AUTOCONF ACLOCAL VERSION PACKAGE CYGPATH_W am__isrc INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL' ac_subst_files='' ac_user_opts=' enable_option_checking enable_dependency_tracking ' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS CPP' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) as_fn_error $? "unrecognized option: \`$ac_option' Try \`$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe $as_echo "$as_me: WARNING: if you wanted to set the --build type, don't use --host. If a cross compiler is detected then cross compile mode will be used" >&2 elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || as_fn_error $? "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error $? "pwd does not report name of working directory" # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures this package to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/PACKAGE] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF Program names: --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program names _ACEOF fi if test -n "$ac_init_help"; then cat <<\_ACEOF Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --disable-dependency-tracking speeds up one-time build --enable-dependency-tracking do not reject slow dependency extractors Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory CPP C preprocessor Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to the package provider. _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for guested configure. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF configure generated by GNU Autoconf 2.68 Copyright (C) 2010 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## # ac_fn_c_try_compile LINENO # -------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_compile # ac_fn_c_try_link LINENO # ----------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_link # ac_fn_c_try_cpp LINENO # ---------------------- # Try to preprocess conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_cpp # ac_fn_c_try_run LINENO # ---------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. Assumes # that executables *can* be run. ac_fn_c_try_run () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then : ac_retval=0 else $as_echo "$as_me: program exited with status $ac_status" >&5 $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=$ac_status fi rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_run cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by $as_me, which was generated by GNU Autoconf 2.68. Invocation command line was $ $0 $@ _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. $as_echo "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo $as_echo "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo $as_echo "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then $as_echo "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then $as_echo "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && $as_echo "$as_me: caught signal $ac_signal" $as_echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h $as_echo "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_URL "$PACKAGE_URL" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. ac_site_file1=NONE ac_site_file2=NONE if test -n "$CONFIG_SITE"; then # We do not want a PATH search for config.site. case $CONFIG_SITE in #(( -*) ac_site_file1=./$CONFIG_SITE;; */*) ac_site_file1=$CONFIG_SITE;; *) ac_site_file1=./$CONFIG_SITE;; esac elif test "x$prefix" != xNONE; then ac_site_file1=$prefix/share/config.site ac_site_file2=$prefix/etc/config.site else ac_site_file1=$ac_default_prefix/share/config.site ac_site_file2=$ac_default_prefix/etc/config.site fi for ac_site_file in "$ac_site_file1" "$ac_site_file2" do test "x$ac_site_file" = xNONE && continue if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 $as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5; } fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 $as_echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 $as_echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 $as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 $as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 $as_echo "$as_me: former value: \`$ac_old_val'" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 $as_echo "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu am__api_version='1.11' ac_aux_dir= for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do if test -f "$ac_dir/install-sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f "$ac_dir/install.sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f "$ac_dir/shtool"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then as_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5 fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. # Reject install programs that cannot install multiple files. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 $as_echo_n "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then if ${ac_cv_path_install+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. # Account for people who put trailing slashes in PATH elements. case $as_dir/ in #(( ./ | .// | /[cC]/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else rm -rf conftest.one conftest.two conftest.dir echo one > conftest.one echo two > conftest.two mkdir conftest.dir if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && test -s conftest.one && test -s conftest.two && test -s conftest.dir/conftest.one && test -s conftest.dir/conftest.two then ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi fi done done ;; esac done IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 $as_echo "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 $as_echo_n "checking whether build environment is sane... " >&6; } # Just in case sleep 1 echo timestamp > conftest.file # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[\\\"\#\$\&\'\`$am_lf]*) as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; esac case $srcdir in *[\\\"\#\$\&\'\`$am_lf\ \ ]*) as_fn_error $? "unsafe srcdir value: \`$srcdir'" "$LINENO" 5;; esac # Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$*" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi rm -f conftest.file if test "$*" != "X $srcdir/configure conftest.file" \ && test "$*" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". as_fn_error $? "ls -t appears to fail. Make sure there is not a broken alias in your environment" "$LINENO" 5 fi test "$2" = conftest.file ) then # Ok. : else as_fn_error $? "newly created file is older than distributed files! Check your system clock" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } test "$program_prefix" != NONE && program_transform_name="s&^&$program_prefix&;$program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && program_transform_name="s&\$&$program_suffix&;$program_transform_name" # Double any \ or $. # By default was `s,x,x', remove it if useless. ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`missing' script is too old or missing" >&5 $as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} fi if test x"${install_sh}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi # Installed binaries are usually stripped using `strip' when the user # run `make install-strip'. However `strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the `STRIP' environment variable to overrule this program. if test "$cross_compiling" != no; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 $as_echo "$STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_STRIP="strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 $as_echo "$ac_ct_STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 $as_echo_n "checking for a thread-safe mkdir -p... " >&6; } if test -z "$MKDIR_P"; then if ${ac_cv_path_mkdir+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in mkdir gmkdir; do for ac_exec_ext in '' $ac_executable_extensions; do { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( 'mkdir (GNU coreutils) '* | \ 'mkdir (coreutils) '* | \ 'mkdir (fileutils) '4.1*) ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext break 3;; esac done done done IFS=$as_save_IFS fi test -d ./--version && rmdir ./--version if test "${ac_cv_path_mkdir+set}" = set; then MKDIR_P="$ac_cv_path_mkdir -p" else # As a last resort, use the slow shell script. Don't cache a # value for MKDIR_P within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. MKDIR_P="$ac_install_sh -d" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 $as_echo "$MKDIR_P" >&6; } mkdir_p="$MKDIR_P" case $mkdir_p in [\\/$]* | ?:[\\/]*) ;; */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; esac for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AWK+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_AWK="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 $as_echo "$AWK" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AWK" && break done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : $as_echo_n "(cached) " >&6 else cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } SET_MAKE= else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." am__isrc=' -I$(srcdir)' # test to see if srcdir already configured if test -f $srcdir/config.status; then as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi # Define the identity of the package. PACKAGE=safecopy VERSION=1.7 cat >>confdefs.h <<_ACEOF #define PACKAGE "$PACKAGE" _ACEOF cat >>confdefs.h <<_ACEOF #define VERSION "$VERSION" _ACEOF # Some tools Automake needs. ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} # We need awk for the "check" target. The system "awk" is bad on # some platforms. # Always define AMTAR for backward compatibility. AMTAR=${AMTAR-"${am_missing_run}tar"} am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -' #AC_ISC_POSIX CFLAGS="$CFLAGS " #add a space to make these macros not add stupid stuff if it was unset DEPDIR="${am__leading_dot}deps" ac_config_commands="$ac_config_commands depfiles" am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 $as_echo_n "checking for style of include used by $am_make... " >&6; } am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # Ignore all kinds of additional output from `make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include am__quote= _am_result=GNU ;; esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=.include am__quote="\"" _am_result=BSD ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 $as_echo "$_am_result" >&6; } rm -f confinc confmf # Check whether --enable-dependency-tracking was given. if test "${enable_dependency_tracking+set}" = set; then : enableval=$enable_dependency_tracking; fi if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' fi if test "x$enable_dependency_tracking" != xno; then AMDEP_TRUE= AMDEP_FALSE='#' else AMDEP_TRUE='#' AMDEP_FALSE= fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 $as_echo_n "checking whether the C compiler works... " >&6; } ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else ac_file='' fi if test -z "$ac_file"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables See \`config.log' for more details" "$LINENO" 5; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 $as_echo_n "checking for C compiler default output file name... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 $as_echo "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 $as_echo_n "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest conftest$ac_cv_exeext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 $as_echo "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { FILE *f = fopen ("conftest.out", "w"); return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 $as_echo_n "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details" "$LINENO" 5; } fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 $as_echo "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 $as_echo_n "checking for suffix of object files... " >&6; } if ${ac_cv_objext+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 $as_echo "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if ${ac_cv_c_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if ${ac_cv_prog_cc_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu depcc="$CC" am_compiler_list= { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if ${am_cv_CC_dependencies_compiler_type+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with # Solaris 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvisualcpp | msvcmsys) # This compiler won't grok `-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 $as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing strerror" >&5 $as_echo_n "checking for library containing strerror... " >&6; } if ${ac_cv_search_strerror+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char strerror (); int main () { return strerror (); ; return 0; } _ACEOF for ac_lib in '' cposix; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_strerror=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_strerror+:} false; then : break fi done if ${ac_cv_search_strerror+:} false; then : else ac_cv_search_strerror=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_strerror" >&5 $as_echo "$ac_cv_search_strerror" >&6; } ac_res=$ac_cv_search_strerror if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if ${ac_cv_c_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if ${ac_cv_prog_cc_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu depcc="$CC" am_compiler_list= { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if ${am_cv_CC_dependencies_compiler_type+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with # Solaris 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvisualcpp | msvcmsys) # This compiler won't grok `-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 $as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if ${ac_cv_c_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if ${ac_cv_prog_cc_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu depcc="$CC" am_compiler_list= { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if ${am_cv_CC_dependencies_compiler_type+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with # Solaris 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvisualcpp | msvcmsys) # This compiler won't grok `-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 $as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi am_cv_prog_cc_stdc=$ac_cv_prog_cc_stdc ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 $as_echo_n "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if ${ac_cv_prog_CPP+:} false; then : $as_echo_n "(cached) " >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 $as_echo "$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 $as_echo_n "checking for grep that handles long lines and -e... " >&6; } if ${ac_cv_path_GREP+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$GREP"; then ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in grep ggrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_GREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_GREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_GREP"; then as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_GREP=$GREP fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 $as_echo "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 $as_echo_n "checking for egrep... " >&6; } if ${ac_cv_path_EGREP+:} false; then : $as_echo_n "(cached) " >&6 else if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else if test -z "$EGREP"; then ac_path_EGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in egrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_EGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_EGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_EGREP"; then as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_EGREP=$EGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 $as_echo "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if ${ac_cv_header_stdc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdc=yes else ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) return 2; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else ac_cv_header_stdc=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 $as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then $as_echo "#define STDC_HEADERS 1" >>confdefs.h fi ac_config_files="$ac_config_files Makefile src/Makefile" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi else { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' # Transform confdefs.h into DEFS. # Protect against shell expansion while executing Makefile rules. # Protect against Makefile macro expansion. # # If the first sed substitution is executed (which looks for macros that # take arguments), then branch to the quote section. Otherwise, # look for a macro that doesn't take arguments. ac_script=' :mline /\\$/{ N s,\\\n,, b mline } t clear :clear s/^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\)/-D\1=\2/g t quote s/^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)/-D\1=\2/g t quote b any :quote s/[ `~#$^&*(){}\\|;'\''"<>?]/\\&/g s/\[/\\&/g s/\]/\\&/g s/\$/$$/g H :any ${ g s/^\n// s/\n/ /g p } ' DEFS=`sed -n "$ac_script" confdefs.h` ac_libobjs= ac_ltlibobjs= U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`$as_echo "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs if test -n "$EXEEXT"; then am__EXEEXT_TRUE= am__EXEEXT_FALSE='#' else am__EXEEXT_TRUE='#' am__EXEEXT_FALSE= fi if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then as_fn_error $? "conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 $as_echo "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -p'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -p' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi if test -x / >/dev/null 2>&1; then as_test_x='test -x' else if ls -dL / >/dev/null 2>&1; then as_ls_L_option=L else as_ls_L_option= fi as_test_x=' eval sh -c '\'' if test -d "$1"; then test -d "$1/."; else case $1 in #( -*)set "./$1";; esac; case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( ???[sx]*):;;*)false;;esac;fi '\'' sh ' fi as_executable_p=$as_test_x # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by $as_me, which was generated by GNU Autoconf 2.68. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_commands="$ac_config_commands" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE Configuration files: $config_files Configuration commands: $config_commands Report bugs to the package provider." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ config.status configured by $0, generated by GNU Autoconf 2.68, with options \\"\$ac_cs_config\\" Copyright (C) 2010 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' INSTALL='$INSTALL' MKDIR_P='$MKDIR_P' AWK='$AWK' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) $as_echo "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) $as_echo "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --he | --h | --help | --hel | -h ) $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX $as_echo "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # # INIT-COMMANDS # AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= ac_tmp= trap 'exit_status=$? : "${ac_tmp:=$tmp}" { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$ac_tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove sole $(srcdir), # ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" eval set X " :F $CONFIG_FILES :C $CONFIG_COMMANDS" shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 $as_echo "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`$as_echo "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$ac_tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac ac_MKDIR_P=$MKDIR_P case $MKDIR_P in [\\/$]* | ?:[\\/]* ) ;; */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; esac _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 $as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t s&@INSTALL@&$ac_INSTALL&;t t s&@MKDIR_P@&$ac_MKDIR_P&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" case $ac_file in -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 $as_echo "$as_me: executing $ac_file commands" >&6;} ;; esac case $ac_file$ac_mode in "depfiles":C) test x"$AMDEP_TRUE" != x"" || { # Autoconf 2.62 quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in *\'*) eval set x "$CONFIG_FILES" ;; *) set x $CONFIG_FILES ;; esac shift for mf do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named `Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then dirpart=`$as_dirname -- "$mf" || $as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$mf" : 'X\(//\)[^/]' \| \ X"$mf" : 'X\(//\)$' \| \ X"$mf" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$mf" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running `make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # When using ansi2knr, U may be empty or an underscore; expand it U=`sed -n 's/^U = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`$as_dirname -- "$file" || $as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$file" : 'X\(//\)[^/]' \| \ X"$file" : 'X\(//\)$' \| \ X"$file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir=$dirpart/$fdir; as_fn_mkdir_p # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done } ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: ----------------------------------------------------------------------- compile configuration completed successfully " >&5 $as_echo " ----------------------------------------------------------------------- compile configuration completed successfully " >&6; } safecopy-1.7/README0000644000175100001440000005637611726754761013146 0ustar ravenusersSafe copying of files and partitions. Idea: A main problem with damaged storage hardware is, that once you get an unrecoverable IO error further reading from the file / device often fails until the file has been closed and re-opened. The normal copy tools like cat, cp or dd do not allow creation of an image file from a disk or CD-ROM once reading of a sector failed. Safecopy tries to get as much data from the source as possible, even resorting to device specific low level operations if applicable. This is achieved by identifying problematic or damaged areas, skipping over them and continuing reading afterwards. The corresponding area in the destination file is either skipped (on initial creation that means padded with zeros) or deliberately filled with a recognizable pattern to later find affected files on a corrupted device. Safecopy uses an incremental algorithm to identify the exact beginning and end of bad areas, allowing the user to trade minimum accesses to bad areas for thorough data resurrection. Multiple passes over the same file are possible, to first retrieve as much data from a device as possible with minimum harm, and then trying to retrieve some of the remaining data with increasingly aggressive read attempts. For this to work, the source device or file has to be seekable. For unseekable devices (like tapes) you can try to use an external script to execute a controlled skip over the damaged part for you. (For example by using "mt seek" and "mt tell" on an SCSI tape device) See the "-S " parameter for details. Performance and success of this tool depend extremely on the device driver, firmware and underlying hardware. Currently safecopy supports RAW access to CDROM drives to read data directly of a CD, bypassing some driver dependant error correction. This can speed up data retrieval from CDs and reduce system load during recovery, as well as increase the success rate. Safecopy uses the disc status syscall to determine sector size and addressing of CDs. This fails on mixed-mode or multi-session CDs, since the sector layout can change within the disk, but would still work on the the big majority of disks. Other disks can still be recovered using normal high level data access. Safecopy auto-detects the disk type involved during the scan for disk and block size. Some CD/DVD drives are known to cause the ATAPI bus to crash on errors, causing the device driver to freeze for times up to and beyond a minute per error. Try to avoid using such drives for media recovery. Using safecopys low level access features might help under some circumstances. Some drives can read bad media better than others. Be sure to attempt data recovery of CDs and DVDs on several different drives and computers. You can use safecopys incremental recovery feature to read previously unreadable sectors only. Reliability: Data recovery from damaged media is a delicate task, in the worst case its success or failure can safe or ruin whole companies and seal affected peoples personal fate. It is paramount that any tools written for that purpose are reliable and trustworthy. A user needs to know what exactly the software is doing to his hardware and data. The outcome of any operation needs to be both understandable and predictable. An "intelligent data resurrection wizard" with unknown complex internal behaviour may be a nifty tool, but does not meet the above requirements of predictable outcome, nor will the user know in advance what is done to his data. The operation sequence of safecopy has been kept relatively simple to assure this predictability. Unfortunately feature additions have risen the complexity and lead to undefined outcome in the past when include and exclude lists had been mixed, especially when mixing different block sizes. In the worst case this could have lead to overwritten data in the destination file on a later incremental run with the mark (-M) option. From version 1.3 on, safecopy ships with a test suite that can be used to verify safecopys behaviour in a set of test cases, simulating the combination of bad blocks in input with different include and exclude lists, both with and without marking. Releases are only made if safecopy passes those test cases according to the specification. This textual specification of behaviour of safecopy can be found in the file specification.txt shipped with safecopy. Different use cases: How do I... - resurrect a file from a mounted but damaged media, that copy will fail on: safecopy /path/to/problemfile ~/saved-file - create an filesystem image of a damaged disk/cdrom: safecopy /dev/device ~/diskimage - resurrect data as thoroughly as possible? safecopy source dest -f 1* -R 8 -Z 2 (assuming logical misalignment of blocks to sectors) safecopy source dest -f 1* -r 1 -R 8 -Z 2 - resurrect data as fast as possible, or - resurrect data with low risk of damaging the media further: safecopy source dest -f 10% -R 0 -Z 0 - resurrect some data fast, then read more data thoroughly later: safecopy source dest -f 10% -R 0 -Z 0 -o badblockfile safecopy source dest -f 1* -R 8 -Z 2 -I badblockfile Alternate approach using the new preset features: safecopy source dest --stage1 safecopy source dest --stage2 safecopy source dest --stage3 - utilize some friends CD-ROM drives to complete the data from my damaged CD: safecopy /dev/mydrive imagefile -b \ -o myblockfile; safecopy /dev/otherdrive imagefile -b \ -I myblockfile -i -o otherblockfile; safecopy /dev/anotherdrive imagefile \ -b -I otherblockfile -i - interrupt and later resume a data rescue operation: safecopy source dest (safecopy aborts) safecopy source dest -I /dev/null - interrupt and later resume a data rescue operation with correct badblocks output: safecopy source dest -o badblockfile (safecopy aborts) mv badblockfile savedbadblockfile safecopy source dest -I /dev/null -o badblockfile cat badblockfile >>savedbadblockfile - interrupt and resume in incremental mode: (this needs a bit of bash scripting to get the correct badblock lists) safecopy source dest -o badblockfile1 safecopy source dest -I badblockfile1 -o badblockfile2 (safecopy aborts) latest=$( tail -n 1 badblockfile2 ) if [ -z $latest ]; then latest=-1; fi; cat badblockfile1 | while read block; do [ $block -gt $latest ] && echo $block >>badblockfile2; done; safecopy source dest -I badblockfile2 -o badblockfile3 - find the corrupted files on a partially successful rescued file system: safecopy /dev/filesystem image -M CoRrUpTeD fsck image mount -o loop image /mnt/mountpoint grep -R /mnt/mountpoint "CoRrUpTeD" (hint: this might not find all affected files if the unreadable parts are smaller in size than your marker string) - exclude the previously known badblocks list of a filesystem from filesystem image creation: dumpe2fs -b /dev/filesystem >badblocklist safecopy /dev/filesystem image \ -X badblocklist -x - create an image of a device that starts at X and is Y in size: safecopy /dev/filesystem -b -s -l - combine two partial images of rescued data without access to the actual (damaged) source data: (This is a bit tricky. You need to get badblocks lists for both files somehow to make safecopy know where the missing data is. If you used the -M (mark) feature you might be able to automatically compute these, however this feature is not provided by safecopy. Lets assume you have two badblocks files. you have: image1.dat image1.badblocks (blocksize1) image2.dat image2.badblocks (blocksize2) The file size of image1 needs to be greater or equal to that of image2. (If not, swap them) ) cp image2.dat combined.dat safecopy image1.dat combined.dat -I image2.badblocks -i blocksize2 \ -X image1.badblocks -x blocksize1 (This gets you the combined data, but no output badblocklist. The resulting badblocks list would be the badblocks that are a: in both badblocks lists, or b: in image1.badblocks and beyond the file size of image2 It should be reasonably easy to solve this logic in a short shell script. One day this might be shipped with safecopy, until then consider this your chance to contribute to a random open source project.) - rescue data of a tape device: If the tape device driver supports lseek(), treat it as any file, otherwise utilize the "-S" option of safecopy with a to be self-written script to skip over the bad blocks. (for example using "mt seek") Make sure your tape device doesn't auto-rewind on close. Send me feedback if you had any luck doing so, so I can update this documentation. FAQ: Q: Why create this tool if there already is something like dd-rescue and other tools for that purpose? A: Because I didn't know of dd(-)rescue when I started, and I felt like it. Also I think safecopy suits the needs of a user in data loss peril better due to more readable output and more understandable options than some of the other tools. (Then again I am biased. Compare them yourself.) Meanwhile safecopy supports low level features other tools don't. Q: What exactly does the -Z option do? A: Remember back in MS-DOS times when a floppy would make a "neek nark" sound 3 times every time when running into a read error? This happened when the BIOS or DOS disk driver moved the IO head to its boundaries to possibly correct small cylinder misalignment, before it tried again. Linux doesn't do that by default, neither do common CDROM drives or drivers. Nevertheless forcing this behaviour can increase your chance of reading bad sectors from a CD __BIG__ time. (Unlike floppies where it usually has little effect) Q: Whats my best chance to resurrect a CD that has become unreadable? A: Try making a backup image on many different computers and drives. The abilities to read from bad media vary extremely. I have a 6 year old Lite On CDRW drive, that even reads deeply and purposely scratched CDs (as in with my key, to make it unreadable) flawlessly. A CDRW drive of the same age at work doesn't read any data from that part of the CD at all, while most DVD and combo drives have bad blocks every couple hundred bytes. Make full use of safecopys RAW access features if applicable. (-L 2 option) As a general guideline: -CDRW drives usually do better than read-only CD drives. -CD only drives sometimes do better on CDs than DVD drives. -PC drives are sometimes better than laptop ones. -A drive with a clean lens does better than a dirtball. -Cleaning up CDs helps. -Unless you use chemicals. -Using sticky tape on a CD will rip of the reflective layer permanently rendering the disk unreadable. Q: Whats my best chance to resurrect a floppy that became unreadable? A: Again try different floppy drives. Keep in mind that it might be easier to further damage data on a bad floppy than on a CD. (Don't overdo read attempts) Q: What about BlueRay/HDDVD disks? A: Hell if I knew, but generally they should be similar to DVDs. It probably depends how the drives firmware acts up. Q: My hard drive suddenly has many bad sectors, what should I do? A: Speed is an essential factor when rescuing data from a bad hard drive. Accesses to bad areas or even just time running can further damage the drive and make formerly readable areas unreadable, be it due to temperature rise, damaged heads scratching still good parts of the surface, bearings degrading due to vibration, etc. Its advisable to shut the system down and remove the hard drive from the computer as soon as errors occur and as fast as possible without causing further damage. (Don't pull the plug! Press reset to force reboot and then power down via power button/ACPI) Set up a rescue system with enough disk space to store all the data from the damaged drive (and possibly multiple copies of it). If you have an external hard drive case that connects via USB SATA or SCSI, allowing a hot plug of the drive into a running system, use it. This allows you to prepare everything without the need for the drive to power up and possibly BIOS or operating system involuntarily accessing it. You also get easier access to the drive to check temperature or noise during operation. When you rescue data, rescue good data first before attempting to access bad sectors. Safecopy allows you to skip known problem sectors using a badblock exclude file (-X) which you might be able to retrieve from system logs or from the drive internal logs, via smartmontools or similar software. Be aware that you might possibly need to convert physical sector numbers into logical block numbers depending on your source. Also you should tell safecopy to jump out of any problematic areas ASAP and continue somewhere else. Parameters "-f 10% -r 10% -R 0 -Z 0" would do the trick by making safecopy skip 10% of the device content and continue there without backtracking. You can always attempt to get the data in between later, first get the supposedly good data on the rest of the drive. Depending on the method of data recovery you plan on using, it may make sense to mark the bad data with the "-M" option. This allows you to later find files affected by data corruption more easily. Use the "-o" option to make safecopy write a badblock list with all blocks skipped or unreadable. When safecopy is done with this first run, you can attempt a second go trying to get more data. Using smaller values for "-f" and allowing safecopy to backtrack for the end of the affected area "-r 1*". Be sure to use incremental mode "-I" to only read the blocks skipped in the first run. It may make sense to let the drive cool down between runs. Once you got all the data from the "good" areas of the drive you can risk more "thorough" access to it. Increase the numbers of retries "-R" in case of bad blocks, maybe together with a head realignment "-Z 1". "-f 1*" would make safecopy try to read on every single block, not skipping over bad areas at all. If your drive stops responding, power it down, let it cool down for a while, then try again. (I heard from people who brought dead drives back to live for a short time by cooling them to low temperatures with ice-packs.) !!! If the data is really important, go to a professional data recovery !!! specialist right away, before doing further damage to the drive. Safecopy 1.7 by CorvusCorax Usage: safecopy [options] Options: --stage1 : Preset to rescue most of the data fast, using no retries and avoiding bad areas. Presets: -f 10% -r 10% -R 1 -Z 0 -L 2 -M BaDbLoCk -o stage1.badblocks --stage2 : Preset to rescue more data, using no retries but searching for exact ends of bad areas. Presets: -f 128* -r 1* -R 1 -Z 0 -L 2 -I stage1.badblocks -o stage2.badblocks --stage3 : Preset to rescue everything that can be rescued using maximum retries, head realignment tricks and low level access. Presets: -f 1* -r 1* -R 4 -Z 1 -L 2 -I stage2.badblocks -o stage3.badblocks All stage presets can be overridden by individual options. -b : Blocksize for default read operations. Set this to the physical sectorsize of your media. Default: 1* Hardware block size if reported by OS, otherwise 4096 -f : Blocksize when skipping over badblocks. Higher settings put less strain on your hardware, but you might miss good areas in between two bad ones. Default: 16* -r : Resolution in bytes when searching for the exact beginning or end of a bad area. If you read data directly from a device there is no need to set this lower than the hardware blocksize. On mounted filesystems however, read blocks and physical blocks could be misaligned. Smaller values lead to very thorough attempts to read data at the edge of damaged areas, but increase the strain on the damaged media. Default: 1* -R : At least that many read attempts are made on the first bad block of a damaged area with minimum resolution. More retries can sometimes recover a weak sector, but at the cost of additional strain. Default: 3 -Z : On each error, force seek the read head from start to end of the source device as often as specified. That takes time, creates additional strain and might not be supported by all devices or drivers. Default: 1 -L : Use low level device calls as specified: 0 Do not use low level device calls 1 Attempt low level device calls for error recovery only 2 Always use low level device calls if available Supported low level features in this version are: SYSTEM DEVICE TYPE FEATURE Linux cdrom/dvd bus/device reset Linux cdrom read sector in raw mode Linux floppy controller reset, twaddle Default: 1 --sync : Use synchronized read calls (disable driver buffering). Safecopy will use O_DIRECT if supported by the OS and O_SYNC otherwise. Default: Asynchronous read buffering by the OS is allowed --forceopen : Keep trying to reopen the source after a read errer useful for USB drives that go away temporarily. Warning: This can cause safecopy to hang until aborted manually! Default: Abort on fopen() error -s : Start position where to start reading. Will correspond to position 0 in the destination file. Default: block 0 -l : Maximum length of data to be read. Default: Entire size of input file -I : Incremental mode. Assume the target file already exists and has holes specified in the badblockfile. It will be attempted to retrieve more data from the listed blocks or from beyond the file size of the target file only. Warning: Without this option, the destination file will be emptied prior to writing. Use -I /dev/null if you want to continue a previous run of safecopy without a badblock list. Implies: -c 0 if -c is not specified Default: none ( /dev/null if -c is given ) -i : Blocksize to interpret the badblockfile given with -I. Default: Blocksize as specified by -b -c : Continue copying at this position. This allows continuing if the output is a block device with a fixed size as opposed to a growable file, where safecopy cannot determine how far it already got. The blocksize used is the same as for the -I option. -c 0 will continue at the current destination size. Implies: -I /dev/null if -I is not specified Default: none, 0 if -I is specified -X : Exclusion mode. If used together with -I, excluded blocks override included blocks. Safecopy will not read or write any data from areas covered by exclude blocks. Default: none ( 0 if -I is given ) -x : Blocksize to interpret the badblockfile given with -X. Default: Blocksize as specified by -b -o : Write a badblocks/e2fsck compatible bad block file. Default: none -S : Use external script for seeking in input file. (Might be useful for tape devices and similar). Seekscript must be an executable that takes the number of blocks to be skipped as argv1 (1-64) the blocksize in bytes as argv2 and the current position (in bytes) as argv3. Return value needs to be the number of blocks successfully skipped, or 0 to indicate seek failure. The external seekscript will only be used if lseek() fails and we need to skip over data. Default: none -M : Mark unrecovered data with this string instead of skipping it. This helps in later finding corrupted files on rescued file system images. The default is to zero unreadable data on creation of output files, and leaving the data as it is on any later run. Warning: When used in combination with incremental mode (-I) this may overwrite data in any block that occurs in the -I file. Blocks not in the -I file, or covered by the file specified with -X are save from being overwritten. Default: none --debug : Enable debug output. Level is a bit field, add values together for more information: program flow: 1 IO control: 2 badblock marking: 4 seeking: 8 incremental mode: 16 exclude mode: 32 or for all debug output: 255 Default: 0 -T : Write sector read timing information into this file for later analysis. Default: none -h | --help : Show this text Valid parameters for -f -r -b options are: Amount in bytes - i.e. 1024 % Percentage of whole file/device size - e.g. 10% * -b only, number times blocksize reported by OS * -f and -r only, number times the value of -b Description of output: . : Between 1 and 1024 blocks successfully read. _ : Read of block was incomplete. (possibly end of file) The blocksize is now reduced to read the rest. |/| : Seek failed, source can only be read sequentially. > : Read failed, reducing blocksize to read partial data. ! : A low level error on read attempt of smallest allowed size leads to a retry attempt. [xx](+yy){ : Current block and number of bytes continuously read successfully up to this point. X : Read failed on a block with minimum blocksize and is skipped. Unrecoverable error, destination file is padded with zeros. Data is now skipped until end of the unreadable area is reached. < : Successful read after the end of a bad area causes backtracking with smaller blocksizes to search for the first readable data. }[xx](+yy) : current block and number of bytes of recent continuous unreadable data. Copyright 2012 CorvusCorax This is free software. You may redistribute copies of it under the terms of the GNU General Public License version 2 or above. . There is NO WARRANTY, to the extent permitted by law. safecopy-1.7/Makefile.am0000644000175100001440000000011311233347645014264 0ustar ravenusers## Process this file with automake to produce Makefile.in SUBDIRS = src safecopy-1.7/aclocal.m40000644000175100001440000010502511726756526014111 0ustar ravenusers# generated automatically by aclocal 1.11.1 -*- Autoconf -*- # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.68],, [m4_warning([this file was generated for autoconf 2.68. You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically `autoreconf'.])]) # Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_AUTOMAKE_VERSION(VERSION) # ---------------------------- # Automake X.Y traces this macro to ensure aclocal.m4 has been # generated from the m4 files accompanying Automake X.Y. # (This private macro should not be called outside this file.) AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.11' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. m4_if([$1], [1.11.1], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) # _AM_AUTOCONF_VERSION(VERSION) # ----------------------------- # aclocal traces this macro to find the Autoconf version. # This is a private macro too. Using m4_define simplifies # the logic in aclocal, which can simply ignore this definition. m4_define([_AM_AUTOCONF_VERSION], []) # AM_SET_CURRENT_AUTOMAKE_VERSION # ------------------------------- # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], [AM_AUTOMAKE_VERSION([1.11.1])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- # Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets # $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to # `$srcdir', `$srcdir/..', or `$srcdir/../..'. # # Of course, Automake must honor this variable whenever it calls a # tool from the auxiliary directory. The problem is that $srcdir (and # therefore $ac_aux_dir as well) can be either absolute or relative, # depending on how configure is run. This is pretty annoying, since # it makes $ac_aux_dir quite unusable in subdirectories: in the top # source directory, any form will work fine, but in subdirectories a # relative path needs to be adjusted first. # # $ac_aux_dir/missing # fails when called from a subdirectory if $ac_aux_dir is relative # $top_srcdir/$ac_aux_dir/missing # fails if $ac_aux_dir is absolute, # fails when called from a subdirectory in a VPATH build with # a relative $ac_aux_dir # # The reason of the latter failure is that $top_srcdir and $ac_aux_dir # are both prefixed by $srcdir. In an in-source build this is usually # harmless because $srcdir is `.', but things will broke when you # start a VPATH build or use an absolute $srcdir. # # So we could use something similar to $top_srcdir/$ac_aux_dir/missing, # iff we strip the leading $srcdir from $ac_aux_dir. That would be: # am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` # and then we would define $MISSING as # MISSING="\${SHELL} $am_aux_dir/missing" # This will work as long as MISSING is not called from configure, because # unfortunately $(top_srcdir) has no meaning in configure. # However there are other variables, like CC, which are often used in # configure, and could therefore not use this "fixed" $ac_aux_dir. # # Another solution, used here, is to always expand $ac_aux_dir to an # absolute PATH. The drawback is that using absolute paths prevent a # configured tree to be moved without reconfiguration. AC_DEFUN([AM_AUX_DIR_EXPAND], [dnl Rely on autoconf to set up CDPATH properly. AC_PREREQ([2.50])dnl # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` ]) # Copyright (C) 1996, 1997, 1999, 2000, 2001, 2002, 2003, 2005 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 4 # This was merged into AC_PROG_CC in Autoconf. AU_DEFUN([AM_PROG_CC_STDC], [AC_PROG_CC AC_DIAGNOSE([obsolete], [$0: your code should no longer depend upon `am_cv_prog_cc_stdc', but upon `ac_cv_prog_cc_stdc'. Remove this warning and the assignment when you adjust the code. You can also remove the above call to AC_PROG_CC if you already called it elsewhere.]) am_cv_prog_cc_stdc=$ac_cv_prog_cc_stdc ]) AU_DEFUN([fp_PROG_CC_STDC]) # AM_CONDITIONAL -*- Autoconf -*- # Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 9 # AM_CONDITIONAL(NAME, SHELL-CONDITION) # ------------------------------------- # Define a conditional. AC_DEFUN([AM_CONDITIONAL], [AC_PREREQ(2.52)dnl ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl AC_SUBST([$1_TRUE])dnl AC_SUBST([$1_FALSE])dnl _AM_SUBST_NOTMAKE([$1_TRUE])dnl _AM_SUBST_NOTMAKE([$1_FALSE])dnl m4_define([_AM_COND_VALUE_$1], [$2])dnl if $2; then $1_TRUE= $1_FALSE='#' else $1_TRUE='#' $1_FALSE= fi AC_CONFIG_COMMANDS_PRE( [if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then AC_MSG_ERROR([[conditional "$1" was never defined. Usually this means the macro was only invoked conditionally.]]) fi])]) # Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 10 # There are a few dirty hacks below to avoid letting `AC_PROG_CC' be # written in clear, in which case automake, when reading aclocal.m4, # will think it sees a *use*, and therefore will trigger all it's # C support machinery. Also note that it means that autoscan, seeing # CC etc. in the Makefile, will ask for an AC_PROG_CC use... # _AM_DEPENDENCIES(NAME) # ---------------------- # See how the compiler implements dependency checking. # NAME is "CC", "CXX", "GCJ", or "OBJC". # We try a few techniques and use that to set a single cache variable. # # We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was # modified to invoke _AM_DEPENDENCIES(CC); we would have a circular # dependency, and given that the user is not expected to run this macro, # just rely on AC_PROG_CC. AC_DEFUN([_AM_DEPENDENCIES], [AC_REQUIRE([AM_SET_DEPDIR])dnl AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl AC_REQUIRE([AM_MAKE_INCLUDE])dnl AC_REQUIRE([AM_DEP_TRACK])dnl ifelse([$1], CC, [depcc="$CC" am_compiler_list=], [$1], CXX, [depcc="$CXX" am_compiler_list=], [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'], [$1], UPC, [depcc="$UPC" am_compiler_list=], [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'], [depcc="$$1" am_compiler_list=]) AC_CACHE_CHECK([dependency style of $depcc], [am_cv_$1_dependencies_compiler_type], [if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_$1_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` fi am__universal=false m4_case([$1], [CC], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac], [CXX], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac]) for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with # Solaris 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvisualcpp | msvcmsys) # This compiler won't grok `-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_$1_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_$1_dependencies_compiler_type=none fi ]) AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) AM_CONDITIONAL([am__fastdep$1], [ test "x$enable_dependency_tracking" != xno \ && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) ]) # AM_SET_DEPDIR # ------------- # Choose a directory name for dependency files. # This macro is AC_REQUIREd in _AM_DEPENDENCIES AC_DEFUN([AM_SET_DEPDIR], [AC_REQUIRE([AM_SET_LEADING_DOT])dnl AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl ]) # AM_DEP_TRACK # ------------ AC_DEFUN([AM_DEP_TRACK], [AC_ARG_ENABLE(dependency-tracking, [ --disable-dependency-tracking speeds up one-time build --enable-dependency-tracking do not reject slow dependency extractors]) if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' fi AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) AC_SUBST([AMDEPBACKSLASH])dnl _AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl ]) # Generate code to set up dependency tracking. -*- Autoconf -*- # Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. #serial 5 # _AM_OUTPUT_DEPENDENCY_COMMANDS # ------------------------------ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], [{ # Autoconf 2.62 quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in *\'*) eval set x "$CONFIG_FILES" ;; *) set x $CONFIG_FILES ;; esac shift for mf do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named `Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then dirpart=`AS_DIRNAME("$mf")` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running `make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # When using ansi2knr, U may be empty or an underscore; expand it U=`sed -n 's/^U = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`AS_DIRNAME(["$file"])` AS_MKDIR_P([$dirpart/$fdir]) # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done } ])# _AM_OUTPUT_DEPENDENCY_COMMANDS # AM_OUTPUT_DEPENDENCY_COMMANDS # ----------------------------- # This macro should only be invoked once -- use via AC_REQUIRE. # # This code is only required when automatic dependency tracking # is enabled. FIXME. This creates each `.P' file that we will # need in order to bootstrap the dependency handling code. AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], [AC_CONFIG_COMMANDS([depfiles], [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) ]) # Do all the work for Automake. -*- Autoconf -*- # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2008, 2009 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 16 # This macro actually does too much. Some checks are only needed if # your package does certain things. But this isn't really a big deal. # AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) # AM_INIT_AUTOMAKE([OPTIONS]) # ----------------------------------------------- # The call with PACKAGE and VERSION arguments is the old style # call (pre autoconf-2.50), which is being phased out. PACKAGE # and VERSION should now be passed to AC_INIT and removed from # the call to AM_INIT_AUTOMAKE. # We support both call styles for the transition. After # the next Automake release, Autoconf can make the AC_INIT # arguments mandatory, and then we can depend on a new Autoconf # release and drop the old call support. AC_DEFUN([AM_INIT_AUTOMAKE], [AC_PREREQ([2.62])dnl dnl Autoconf wants to disallow AM_ names. We explicitly allow dnl the ones we care about. m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl AC_REQUIRE([AC_PROG_INSTALL])dnl if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl # test to see if srcdir already configured if test -f $srcdir/config.status; then AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi AC_SUBST([CYGPATH_W]) # Define the identity of the package. dnl Distinguish between old-style and new-style calls. m4_ifval([$2], [m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl AC_SUBST([PACKAGE], [$1])dnl AC_SUBST([VERSION], [$2])], [_AM_SET_OPTIONS([$1])dnl dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,, [m4_fatal([AC_INIT should be called with package and version arguments])])dnl AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl _AM_IF_OPTION([no-define],, [AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl # Some tools Automake needs. AC_REQUIRE([AM_SANITY_CHECK])dnl AC_REQUIRE([AC_ARG_PROGRAM])dnl AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version}) AM_MISSING_PROG(AUTOCONF, autoconf) AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version}) AM_MISSING_PROG(AUTOHEADER, autoheader) AM_MISSING_PROG(MAKEINFO, makeinfo) AC_REQUIRE([AM_PROG_INSTALL_SH])dnl AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl AC_REQUIRE([AM_PROG_MKDIR_P])dnl # We need awk for the "check" target. The system "awk" is bad on # some platforms. AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AM_SET_LEADING_DOT])dnl _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], [_AM_PROG_TAR([v7])])]) _AM_IF_OPTION([no-dependencies],, [AC_PROVIDE_IFELSE([AC_PROG_CC], [_AM_DEPENDENCIES(CC)], [define([AC_PROG_CC], defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl AC_PROVIDE_IFELSE([AC_PROG_CXX], [_AM_DEPENDENCIES(CXX)], [define([AC_PROG_CXX], defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJC], [_AM_DEPENDENCIES(OBJC)], [define([AC_PROG_OBJC], defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl ]) _AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl dnl The `parallel-tests' driver may need to know about EXEEXT, so add the dnl `am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This macro dnl is hooked onto _AC_COMPILER_EXEEXT early, see below. AC_CONFIG_COMMANDS_PRE(dnl [m4_provide_if([_AM_COMPILER_EXEEXT], [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl ]) dnl Hook into `_AC_COMPILER_EXEEXT' early to learn its expansion. Do not dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further dnl mangled by Autoconf and run in a shell conditional statement. m4_define([_AC_COMPILER_EXEEXT], m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) # When config.status generates a header, we must update the stamp-h file. # This file resides in the same directory as the config header # that is generated. The stamp files are numbered to have different names. # Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the # loop where config.status creates the headers, so we can generate # our stamp files there. AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], [# Compute $1's index in $config_headers. _am_arg=$1 _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) # Copyright (C) 2001, 2003, 2005, 2008 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_INSTALL_SH # ------------------ # Define $install_sh. AC_DEFUN([AM_PROG_INSTALL_SH], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl if test x"${install_sh}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi AC_SUBST(install_sh)]) # Copyright (C) 2003, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 2 # Check whether the underlying file-system supports filenames # with a leading dot. For instance MS-DOS doesn't. AC_DEFUN([AM_SET_LEADING_DOT], [rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null AC_SUBST([am__leading_dot])]) # Check to see how 'make' treats includes. -*- Autoconf -*- # Copyright (C) 2001, 2002, 2003, 2005, 2009 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 4 # AM_MAKE_INCLUDE() # ----------------- # Check to see how make treats includes. AC_DEFUN([AM_MAKE_INCLUDE], [am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. AC_MSG_CHECKING([for style of include used by $am_make]) am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # Ignore all kinds of additional output from `make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include am__quote= _am_result=GNU ;; esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=.include am__quote="\"" _am_result=BSD ;; esac fi AC_SUBST([am__include]) AC_SUBST([am__quote]) AC_MSG_RESULT([$_am_result]) rm -f confinc confmf ]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- # Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 6 # AM_MISSING_PROG(NAME, PROGRAM) # ------------------------------ AC_DEFUN([AM_MISSING_PROG], [AC_REQUIRE([AM_MISSING_HAS_RUN]) $1=${$1-"${am_missing_run}$2"} AC_SUBST($1)]) # AM_MISSING_HAS_RUN # ------------------ # Define MISSING if not defined so far and test if it supports --run. # If it does, set am_missing_run to use it, otherwise, to nothing. AC_DEFUN([AM_MISSING_HAS_RUN], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([missing])dnl if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= AC_MSG_WARN([`missing' script is too old or missing]) fi ]) # Copyright (C) 2003, 2004, 2005, 2006 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_MKDIR_P # --------------- # Check for `mkdir -p'. AC_DEFUN([AM_PROG_MKDIR_P], [AC_PREREQ([2.60])dnl AC_REQUIRE([AC_PROG_MKDIR_P])dnl dnl Automake 1.8 to 1.9.6 used to define mkdir_p. We now use MKDIR_P, dnl while keeping a definition of mkdir_p for backward compatibility. dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile. dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of dnl Makefile.ins that do not define MKDIR_P, so we do our own dnl adjustment using top_builddir (which is defined more often than dnl MKDIR_P). AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl case $mkdir_p in [[\\/$]]* | ?:[[\\/]]*) ;; */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; esac ]) # Helper functions for option handling. -*- Autoconf -*- # Copyright (C) 2001, 2002, 2003, 2005, 2008 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 4 # _AM_MANGLE_OPTION(NAME) # ----------------------- AC_DEFUN([_AM_MANGLE_OPTION], [[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) # _AM_SET_OPTION(NAME) # ------------------------------ # Set option NAME. Presently that only means defining a flag for this option. AC_DEFUN([_AM_SET_OPTION], [m4_define(_AM_MANGLE_OPTION([$1]), 1)]) # _AM_SET_OPTIONS(OPTIONS) # ---------------------------------- # OPTIONS is a space-separated list of Automake options. AC_DEFUN([_AM_SET_OPTIONS], [m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) # _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) # ------------------------------------------- # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) # Check to make sure that the build environment is sane. -*- Autoconf -*- # Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 5 # AM_SANITY_CHECK # --------------- AC_DEFUN([AM_SANITY_CHECK], [AC_MSG_CHECKING([whether build environment is sane]) # Just in case sleep 1 echo timestamp > conftest.file # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[[\\\"\#\$\&\'\`$am_lf]]*) AC_MSG_ERROR([unsafe absolute working directory name]);; esac case $srcdir in *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) AC_MSG_ERROR([unsafe srcdir value: `$srcdir']);; esac # Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$[*]" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi rm -f conftest.file if test "$[*]" != "X $srcdir/configure conftest.file" \ && test "$[*]" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken alias in your environment]) fi test "$[2]" = conftest.file ) then # Ok. : else AC_MSG_ERROR([newly created file is older than distributed files! Check your system clock]) fi AC_MSG_RESULT(yes)]) # Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_INSTALL_STRIP # --------------------- # One issue with vendor `install' (even GNU) is that you can't # specify the program used to strip binaries. This is especially # annoying in cross-compiling environments, where the build's strip # is unlikely to handle the host's binaries. # Fortunately install-sh will honor a STRIPPROG variable, so we # always use install-sh in `make install-strip', and initialize # STRIPPROG with the value of the STRIP variable (set by the user). AC_DEFUN([AM_PROG_INSTALL_STRIP], [AC_REQUIRE([AM_PROG_INSTALL_SH])dnl # Installed binaries are usually stripped using `strip' when the user # run `make install-strip'. However `strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the `STRIP' environment variable to overrule this program. dnl Don't test for $cross_compiling = yes, because it might be `maybe'. if test "$cross_compiling" != no; then AC_CHECK_TOOL([STRIP], [strip], :) fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) # Copyright (C) 2006, 2008 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 2 # _AM_SUBST_NOTMAKE(VARIABLE) # --------------------------- # Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. # This macro is traced by Automake. AC_DEFUN([_AM_SUBST_NOTMAKE]) # AM_SUBST_NOTMAKE(VARIABLE) # --------------------------- # Public sister of _AM_SUBST_NOTMAKE. AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) # Check how to create a tarball. -*- Autoconf -*- # Copyright (C) 2004, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 2 # _AM_PROG_TAR(FORMAT) # -------------------- # Check how to create a tarball in format FORMAT. # FORMAT should be one of `v7', `ustar', or `pax'. # # Substitute a variable $(am__tar) that is a command # writing to stdout a FORMAT-tarball containing the directory # $tardir. # tardir=directory && $(am__tar) > result.tar # # Substitute a variable $(am__untar) that extract such # a tarball read from stdin. # $(am__untar) < result.tar AC_DEFUN([_AM_PROG_TAR], [# Always define AMTAR for backward compatibility. AM_MISSING_PROG([AMTAR], [tar]) m4_if([$1], [v7], [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'], [m4_case([$1], [ustar],, [pax],, [m4_fatal([Unknown tar format])]) AC_MSG_CHECKING([how to create a $1 tar archive]) # Loop over all known methods to create a tar archive until one works. _am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' _am_tools=${am_cv_prog_tar_$1-$_am_tools} # Do not fold the above two line into one, because Tru64 sh and # Solaris sh will not grok spaces in the rhs of `-'. for _am_tool in $_am_tools do case $_am_tool in gnutar) for _am_tar in tar gnutar gtar; do AM_RUN_LOG([$_am_tar --version]) && break done am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' am__untar="$_am_tar -xf -" ;; plaintar) # Must skip GNU tar: if it does not support --format= it doesn't create # ustar tarball either. (tar --version) >/dev/null 2>&1 && continue am__tar='tar chf - "$$tardir"' am__tar_='tar chf - "$tardir"' am__untar='tar xf -' ;; pax) am__tar='pax -L -x $1 -w "$$tardir"' am__tar_='pax -L -x $1 -w "$tardir"' am__untar='pax -r' ;; cpio) am__tar='find "$$tardir" -print | cpio -o -H $1 -L' am__tar_='find "$tardir" -print | cpio -o -H $1 -L' am__untar='cpio -i -H $1 -d' ;; none) am__tar=false am__tar_=false am__untar=false ;; esac # If the value was cached, stop now. We just wanted to have am__tar # and am__untar set. test -n "${am_cv_prog_tar_$1}" && break # tar/untar a dummy directory, and stop if the command works rm -rf conftest.dir mkdir conftest.dir echo GrepMe > conftest.dir/file AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) rm -rf conftest.dir if test -s conftest.tar; then AM_RUN_LOG([$am__untar /dev/null 2>&1 && break fi done rm -rf conftest.dir AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) AC_MSG_RESULT([$am_cv_prog_tar_$1])]) AC_SUBST([am__tar]) AC_SUBST([am__untar]) ]) # _AM_PROG_TAR safecopy-1.7/NEWS0000644000175100001440000000013511233347645012733 0ustar ravenusers2005.06.09: Packaging of project for first release 2009.02.05: About to release version 1.0 safecopy-1.7/configure.in0000644000175100001440000000074611726747605014564 0ustar ravenusers#Process this file with autoconf to produce a configure script. AC_INIT(configure.in) AM_INIT_AUTOMAKE(safecopy, 1.7) AC_PREREQ(2.5) #AC_ISC_POSIX CFLAGS="$CFLAGS " #add a space to make these macros not add stupid stuff if it was unset AC_ISC_POSIX AC_PROG_CC AM_PROG_CC_STDC AC_HEADER_STDC AC_OUTPUT([ Makefile src/Makefile ]) AC_MSG_RESULT([[ ----------------------------------------------------------------------- compile configuration completed successfully ]]) safecopy-1.7/ChangeLog0000644000175100001440000000616411726747605014025 0ustar ravenusers2005.06.09: Creation of project (Corvus Corax) 2005.06.12: fix of lseek64 definition problem 2009.02.01: - Added "retry" feature. - Fixed output to be more consistent and posibly machine parseable to create a bad block list more easily. - Fixed calculation of soft and hard errors. 2009.02.03: - Added badblock file creation. - Added incremental mode to improve a filesystem image based on an existing badblock list. - Automatic blocksize calculation based on stat(). - Percentage counter in case of known filesize (or maximum size given on commandline). - Smily indicator based on data read timing. 2009.02.05: - Added head-realignment trick to improve error recovery on some drives. - Added resume functionality - Text output refurbished and made terminal dependant - Badblocks exclusion lists supported - Mark-padding feature (to find read-failure affected files in a safecopied filesystem image) - Documentation updated 2009.02.10: - Added low level IO layer to bypass driver functions on some devices - Changed the logic to skip over bad areas to be independent of hw block sizes - Documentation updated 2009.04.13: - Fixed disk detection on CD / DVD drives - Correct sector address calculation in raw mode acces on different types of CDs - Floppy low level IO now supports twaddle syscall - Man page added to documentation 2009.05.06 - Added support for autodetecting true hardware block and disk sizes using low level calls on CDs - Added support for relative sizes in command line option (e.g. -f 10% ) - Added command line presets for multi staged data rescue that set sensible, overridable defaults. - Fixed problem that lead to previously rescued parts of a file being overwritten with bad block marker data during an incremental run in case of read errors just past the end of a known bad area (bad area grew) - Limited dynamic memory allocation to one block, regardless of fault skip block size used. - Altered behaviour of bad block marker code to keep destination file size equal to source file size, even if the end of the source is unreadable and needs to be skipped. - Command line help is now written to stdout instead of stderr 2009.05.13 - Wrote a test library and test cases to verify safecopys behaviour under controlled conditions. - Rewrote parts of safecopies internal logic to assure passing of all test cases. - Wrote defined specification of safecopies intended behaviour. 2009.07.15 - Test suite scripts have been rewritten to be more portable. - Some fixes in documentation. 2009.07.18 - Support for synchronous direct IO via O_DIRECT added. - Improved the test debug library to simulate delays and timeouts. 2009.07.28 - Added documentation for simulation benchmark creation. - Moved test library in source tree and renamed to "simulator". - Added benchmarking subproject. 2009.09.09 - Fixed a bug with badblock include file handling ( ID: 2854324 ) 2012.03.10 - New --forceopen option to wait for removable drives to come back - New -c (continue) option to resume when copying directly unto devices - Return codes: (0 for success, 2 for abort/ error, 1 for incomplete copy) - Adapted test suite to test for these return codes - Code cleanup safecopy-1.7/install-sh0000755000000000000000000003253711474672310013713 0ustar rootroot#!/bin/sh # install - install a program, script, or datafile scriptversion=2009-04-28.21; # UTC # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the # following copyright and license. # # Copyright (C) 1994 X Consortium # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # Except as contained in this notice, the name of the X Consortium shall not # be used in advertising or otherwise to promote the sale, use or other deal- # ings in this Software without prior written authorization from the X Consor- # tium. # # # FSF changes to this file are in the public domain. # # Calling this script install-sh is preferred over install.sh, to prevent # `make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. nl=' ' IFS=" "" $nl" # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit=${DOITPROG-} if test -z "$doit"; then doit_exec=exec else doit_exec=$doit fi # Put in absolute file names if you don't have them in your path; # or use environment vars. chgrpprog=${CHGRPPROG-chgrp} chmodprog=${CHMODPROG-chmod} chownprog=${CHOWNPROG-chown} cmpprog=${CMPPROG-cmp} cpprog=${CPPROG-cp} mkdirprog=${MKDIRPROG-mkdir} mvprog=${MVPROG-mv} rmprog=${RMPROG-rm} stripprog=${STRIPPROG-strip} posix_glob='?' initialize_posix_glob=' test "$posix_glob" != "?" || { if (set -f) 2>/dev/null; then posix_glob= else posix_glob=: fi } ' posix_mkdir= # Desired mode of installed file. mode=0755 chgrpcmd= chmodcmd=$chmodprog chowncmd= mvcmd=$mvprog rmcmd="$rmprog -f" stripcmd= src= dst= dir_arg= dst_arg= copy_on_change=false no_target_directory= usage="\ Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE or: $0 [OPTION]... SRCFILES... DIRECTORY or: $0 [OPTION]... -t DIRECTORY SRCFILES... or: $0 [OPTION]... -d DIRECTORIES... In the 1st form, copy SRCFILE to DSTFILE. In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. In the 4th, create DIRECTORIES. Options: --help display this help and exit. --version display version info and exit. -c (ignored) -C install only if different (preserve the last data modification time) -d create directories instead of installing files. -g GROUP $chgrpprog installed files to GROUP. -m MODE $chmodprog installed files to MODE. -o USER $chownprog installed files to USER. -s $stripprog installed files. -t DIRECTORY install into DIRECTORY. -T report an error if DSTFILE is a directory. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG " while test $# -ne 0; do case $1 in -c) ;; -C) copy_on_change=true;; -d) dir_arg=true;; -g) chgrpcmd="$chgrpprog $2" shift;; --help) echo "$usage"; exit $?;; -m) mode=$2 case $mode in *' '* | *' '* | *' '* | *'*'* | *'?'* | *'['*) echo "$0: invalid mode: $mode" >&2 exit 1;; esac shift;; -o) chowncmd="$chownprog $2" shift;; -s) stripcmd=$stripprog;; -t) dst_arg=$2 shift;; -T) no_target_directory=true;; --version) echo "$0 $scriptversion"; exit $?;; --) shift break;; -*) echo "$0: invalid option: $1" >&2 exit 1;; *) break;; esac shift done if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then # When -d is used, all remaining arguments are directories to create. # When -t is used, the destination is already specified. # Otherwise, the last argument is the destination. Remove it from $@. for arg do if test -n "$dst_arg"; then # $@ is not empty: it contains at least $arg. set fnord "$@" "$dst_arg" shift # fnord fi shift # arg dst_arg=$arg done fi if test $# -eq 0; then if test -z "$dir_arg"; then echo "$0: no input file specified." >&2 exit 1 fi # It's OK to call `install-sh -d' without argument. # This can happen when creating conditional directories. exit 0 fi if test -z "$dir_arg"; then trap '(exit $?); exit' 1 2 13 15 # Set umask so as not to create temps with too-generous modes. # However, 'strip' requires both read and write access to temps. case $mode in # Optimize common cases. *644) cp_umask=133;; *755) cp_umask=22;; *[0-7]) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw='% 200' fi cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; *) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw=,u+rw fi cp_umask=$mode$u_plus_rw;; esac fi for src do # Protect names starting with `-'. case $src in -*) src=./$src;; esac if test -n "$dir_arg"; then dst=$src dstdir=$dst test -d "$dstdir" dstdir_status=$? else # Waiting for this to be detected by the "$cpprog $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if test ! -f "$src" && test ! -d "$src"; then echo "$0: $src does not exist." >&2 exit 1 fi if test -z "$dst_arg"; then echo "$0: no destination specified." >&2 exit 1 fi dst=$dst_arg # Protect names starting with `-'. case $dst in -*) dst=./$dst;; esac # If destination is a directory, append the input filename; won't work # if double slashes aren't ignored. if test -d "$dst"; then if test -n "$no_target_directory"; then echo "$0: $dst_arg: Is a directory" >&2 exit 1 fi dstdir=$dst dst=$dstdir/`basename "$src"` dstdir_status=0 else # Prefer dirname, but fall back on a substitute if dirname fails. dstdir=` (dirname "$dst") 2>/dev/null || expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$dst" : 'X\(//\)[^/]' \| \ X"$dst" : 'X\(//\)$' \| \ X"$dst" : 'X\(/\)' \| . 2>/dev/null || echo X"$dst" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q' ` test -d "$dstdir" dstdir_status=$? fi fi obsolete_mkdir_used=false if test $dstdir_status != 0; then case $posix_mkdir in '') # Create intermediate dirs using mode 755 as modified by the umask. # This is like FreeBSD 'install' as of 1997-10-28. umask=`umask` case $stripcmd.$umask in # Optimize common cases. *[2367][2367]) mkdir_umask=$umask;; .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; *[0-7]) mkdir_umask=`expr $umask + 22 \ - $umask % 100 % 40 + $umask % 20 \ - $umask % 10 % 4 + $umask % 2 `;; *) mkdir_umask=$umask,go-w;; esac # With -d, create the new directory with the user-specified mode. # Otherwise, rely on $mkdir_umask. if test -n "$dir_arg"; then mkdir_mode=-m$mode else mkdir_mode= fi posix_mkdir=false case $umask in *[123567][0-7][0-7]) # POSIX mkdir -p sets u+wx bits regardless of umask, which # is incompatible with FreeBSD 'install' when (umask & 300) != 0. ;; *) tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 if (umask $mkdir_umask && exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 then if test -z "$dir_arg" || { # Check for POSIX incompatibilities with -m. # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or # other-writeable bit of parent directory when it shouldn't. # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. ls_ld_tmpdir=`ls -ld "$tmpdir"` case $ls_ld_tmpdir in d????-?r-*) different_mode=700;; d????-?--*) different_mode=755;; *) false;; esac && $mkdirprog -m$different_mode -p -- "$tmpdir" && { ls_ld_tmpdir_1=`ls -ld "$tmpdir"` test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" } } then posix_mkdir=: fi rmdir "$tmpdir/d" "$tmpdir" else # Remove any dirs left behind by ancient mkdir implementations. rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null fi trap '' 0;; esac;; esac if $posix_mkdir && ( umask $mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" ) then : else # The umask is ridiculous, or mkdir does not conform to POSIX, # or it failed possibly due to a race condition. Create the # directory the slow way, step by step, checking for races as we go. case $dstdir in /*) prefix='/';; -*) prefix='./';; *) prefix='';; esac eval "$initialize_posix_glob" oIFS=$IFS IFS=/ $posix_glob set -f set fnord $dstdir shift $posix_glob set +f IFS=$oIFS prefixes= for d do test -z "$d" && continue prefix=$prefix$d if test -d "$prefix"; then prefixes= else if $posix_mkdir; then (umask=$mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break # Don't fail if two instances are running concurrently. test -d "$prefix" || exit 1 else case $prefix in *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; *) qprefix=$prefix;; esac prefixes="$prefixes '$qprefix'" fi fi prefix=$prefix/ done if test -n "$prefixes"; then # Don't fail if two instances are running concurrently. (umask $mkdir_umask && eval "\$doit_exec \$mkdirprog $prefixes") || test -d "$dstdir" || exit 1 obsolete_mkdir_used=true fi fi fi if test -n "$dir_arg"; then { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 else # Make a couple of temp file names in the proper directory. dsttmp=$dstdir/_inst.$$_ rmtmp=$dstdir/_rm.$$_ # Trap to clean up those temp files at exit. trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 # Copy the file name to the temp name. (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && # and set any options; do chmod last to preserve setuid bits. # # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $cpprog $src $dsttmp" command. # { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && # If -C, don't bother to copy if it wouldn't change the file. if $copy_on_change && old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && eval "$initialize_posix_glob" && $posix_glob set -f && set X $old && old=:$2:$4:$5:$6 && set X $new && new=:$2:$4:$5:$6 && $posix_glob set +f && test "$old" = "$new" && $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 then rm -f "$dsttmp" else # Rename the file to the real destination. $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || # The rename failed, perhaps because mv can't rename something else # to itself, or perhaps because mv is so ancient that it does not # support -f. { # Now remove or move aside any old file at destination location. # We try this two ways since rm can't unlink itself on some # systems and the destination file might be busy for other # reasons. In this case, the final cleanup might fail but the new # file should still install successfully. { test ! -f "$dst" || $doit $rmcmd -f "$dst" 2>/dev/null || { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } } || { echo "$0: cannot unlink or rename $dst" >&2 (exit 1); exit 1 } } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dst" } fi || exit 1 trap '' 0 fi done # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: safecopy-1.7/missing0000755000000000000000000002623311474672310013302 0ustar rootroot#! /bin/sh # Common stub for a few missing GNU programs while installing. scriptversion=2009-04-28.21; # UTC # Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006, # 2008, 2009 Free Software Foundation, Inc. # Originally by Fran,cois Pinard , 1996. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. if test $# -eq 0; then echo 1>&2 "Try \`$0 --help' for more information" exit 1 fi run=: sed_output='s/.* --output[ =]\([^ ]*\).*/\1/p' sed_minuso='s/.* -o \([^ ]*\).*/\1/p' # In the cases where this matters, `missing' is being run in the # srcdir already. if test -f configure.ac; then configure_ac=configure.ac else configure_ac=configure.in fi msg="missing on your system" case $1 in --run) # Try to run requested program, and just exit if it succeeds. run= shift "$@" && exit 0 # Exit code 63 means version mismatch. This often happens # when the user try to use an ancient version of a tool on # a file that requires a minimum version. In this case we # we should proceed has if the program had been absent, or # if --run hadn't been passed. if test $? = 63; then run=: msg="probably too old" fi ;; -h|--h|--he|--hel|--help) echo "\ $0 [OPTION]... PROGRAM [ARGUMENT]... Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an error status if there is no known handling for PROGRAM. Options: -h, --help display this help and exit -v, --version output version information and exit --run try to run the given command, and emulate it if it fails Supported PROGRAM values: aclocal touch file \`aclocal.m4' autoconf touch file \`configure' autoheader touch file \`config.h.in' autom4te touch the output file, or create a stub one automake touch all \`Makefile.in' files bison create \`y.tab.[ch]', if possible, from existing .[ch] flex create \`lex.yy.c', if possible, from existing .c help2man touch the output file lex create \`lex.yy.c', if possible, from existing .c makeinfo touch the output file tar try tar, gnutar, gtar, then tar without non-portable flags yacc create \`y.tab.[ch]', if possible, from existing .[ch] Version suffixes to PROGRAM as well as the prefixes \`gnu-', \`gnu', and \`g' are ignored when checking the name. Send bug reports to ." exit $? ;; -v|--v|--ve|--ver|--vers|--versi|--versio|--version) echo "missing $scriptversion (GNU Automake)" exit $? ;; -*) echo 1>&2 "$0: Unknown \`$1' option" echo 1>&2 "Try \`$0 --help' for more information" exit 1 ;; esac # normalize program name to check for. program=`echo "$1" | sed ' s/^gnu-//; t s/^gnu//; t s/^g//; t'` # Now exit if we have it, but it failed. Also exit now if we # don't have it and --version was passed (most likely to detect # the program). This is about non-GNU programs, so use $1 not # $program. case $1 in lex*|yacc*) # Not GNU programs, they don't have --version. ;; tar*) if test -n "$run"; then echo 1>&2 "ERROR: \`tar' requires --run" exit 1 elif test "x$2" = "x--version" || test "x$2" = "x--help"; then exit 1 fi ;; *) if test -z "$run" && ($1 --version) > /dev/null 2>&1; then # We have it, but it failed. exit 1 elif test "x$2" = "x--version" || test "x$2" = "x--help"; then # Could not run --version or --help. This is probably someone # running `$TOOL --version' or `$TOOL --help' to check whether # $TOOL exists and not knowing $TOOL uses missing. exit 1 fi ;; esac # If it does not exist, or fails to run (possibly an outdated version), # try to emulate it. case $program in aclocal*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`acinclude.m4' or \`${configure_ac}'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." touch aclocal.m4 ;; autoconf*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`${configure_ac}'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." touch configure ;; autoheader*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`acconfig.h' or \`${configure_ac}'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}` test -z "$files" && files="config.h" touch_files= for f in $files; do case $f in *:*) touch_files="$touch_files "`echo "$f" | sed -e 's/^[^:]*://' -e 's/:.*//'`;; *) touch_files="$touch_files $f.in";; esac done touch $touch_files ;; automake*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." find . -type f -name Makefile.am -print | sed 's/\.am$/.in/' | while read f; do touch "$f"; done ;; autom4te*) echo 1>&2 "\ WARNING: \`$1' is needed, but is $msg. You might have modified some files without having the proper tools for further handling them. You can get \`$1' as part of \`Autoconf' from any GNU archive site." file=`echo "$*" | sed -n "$sed_output"` test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` if test -f "$file"; then touch $file else test -z "$file" || exec >$file echo "#! /bin/sh" echo "# Created by GNU Automake missing as a replacement of" echo "# $ $@" echo "exit 0" chmod +x $file exit 1 fi ;; bison*|yacc*) echo 1>&2 "\ WARNING: \`$1' $msg. You should only need it if you modified a \`.y' file. You may need the \`Bison' package in order for those modifications to take effect. You can get \`Bison' from any GNU archive site." rm -f y.tab.c y.tab.h if test $# -ne 1; then eval LASTARG="\${$#}" case $LASTARG in *.y) SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` if test -f "$SRCFILE"; then cp "$SRCFILE" y.tab.c fi SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` if test -f "$SRCFILE"; then cp "$SRCFILE" y.tab.h fi ;; esac fi if test ! -f y.tab.h; then echo >y.tab.h fi if test ! -f y.tab.c; then echo 'main() { return 0; }' >y.tab.c fi ;; lex*|flex*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a \`.l' file. You may need the \`Flex' package in order for those modifications to take effect. You can get \`Flex' from any GNU archive site." rm -f lex.yy.c if test $# -ne 1; then eval LASTARG="\${$#}" case $LASTARG in *.l) SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` if test -f "$SRCFILE"; then cp "$SRCFILE" lex.yy.c fi ;; esac fi if test ! -f lex.yy.c; then echo 'main() { return 0; }' >lex.yy.c fi ;; help2man*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a dependency of a manual page. You may need the \`Help2man' package in order for those modifications to take effect. You can get \`Help2man' from any GNU archive site." file=`echo "$*" | sed -n "$sed_output"` test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` if test -f "$file"; then touch $file else test -z "$file" || exec >$file echo ".ab help2man is required to generate this page" exit $? fi ;; makeinfo*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a \`.texi' or \`.texinfo' file, or any other file indirectly affecting the aspect of the manual. The spurious call might also be the consequence of using a buggy \`make' (AIX, DU, IRIX). You might want to install the \`Texinfo' package or the \`GNU make' package. Grab either from any GNU archive site." # The file to touch is that specified with -o ... file=`echo "$*" | sed -n "$sed_output"` test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` if test -z "$file"; then # ... or it is the one specified with @setfilename ... infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` file=`sed -n ' /^@setfilename/{ s/.* \([^ ]*\) *$/\1/ p q }' $infile` # ... or it is derived from the source name (dir/f.texi becomes f.info) test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info fi # If the file does not exist, the user really needs makeinfo; # let's fail without touching anything. test -f $file || exit 1 touch $file ;; tar*) shift # We have already tried tar in the generic part. # Look for gnutar/gtar before invocation to avoid ugly error # messages. if (gnutar --version > /dev/null 2>&1); then gnutar "$@" && exit 0 fi if (gtar --version > /dev/null 2>&1); then gtar "$@" && exit 0 fi firstarg="$1" if shift; then case $firstarg in *o*) firstarg=`echo "$firstarg" | sed s/o//` tar "$firstarg" "$@" && exit 0 ;; esac case $firstarg in *h*) firstarg=`echo "$firstarg" | sed s/h//` tar "$firstarg" "$@" && exit 0 ;; esac fi echo 1>&2 "\ WARNING: I can't seem to be able to run \`tar' with the given arguments. You may want to install GNU tar or Free paxutils, or check the command line arguments." exit 1 ;; *) echo 1>&2 "\ WARNING: \`$1' is needed, and is $msg. You might have modified some files without having the proper tools for further handling them. Check the \`README' file, it often tells you about the needed prerequisites for installing this package. You may also peek at any GNU archive site, in case some other package would contain this missing \`$1' program." exit 1 ;; esac exit 0 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: safecopy-1.7/test/0000755000175100001440000000000011726756524013223 5ustar ravenuserssafecopy-1.7/test/test13/0000755000175100001440000000000011726756524014346 5ustar ravenuserssafecopy-1.7/test/test13/simulator.cfg0000644000175100001440000000023211726745167017044 0ustar ravenusersblocksize=1024 filesize=20480 source=test.dat softfailcount=2 softfail=4 hardfail=5 softfail=8 hardfail=9 softfail=12 softfail=13 softfail=14 hardfail=15 safecopy-1.7/test/test13/test1.dat0000644000175100001440000002400011726745167016075 0ustar ravenusersO9O^TŖڷX71g%a! .fF>_yz`M4]b~~!f֜ S D iXH5h$1 R h<-& ?wP[±:A) 8qԀO aF19i4sk~ 'bat,̲hX>q`5D=h7y<1<6 &i=ۤވn~Cc쨅`M]#OA~hRðo?O1-j֣9 2~\AǷZڽ;ՙ hF! ZMNriRr4:mwfR>jfk+?r̓B%/ӃEʍ4,8@k,q9l?cיrrI% NRUoGȳTUd&Oy,m/0bU-h"㍕y> Zy{oqh[@m利;q }fƗgP\Qt3V9Y>$0ܘ8X,-jSVԺџ) R \ľ>&~nD=I9K^J,u+(i)M̜̉Ox*G8O+zm;I@CY.>IFB%_u#)78@-qciW3Q}/bB:Ɉc?zĂYZ+t%jM{5{8wj6E: ;!PM L2W\Z~@Ez\.n{#+ s4+/K7zn!"IH:يMy8 +cer49I[i`@;(j+̂VNa*7Pl_Wޤ8=5Z/$2mByuU-`Rމ&L>3K͝Y՚vg+\}Ӊ!DQ|F\辙tFp'6oojف'&0k4ek(tUoj RqJ$XZ_R&qR(RC5јM#F&"!aQrEy'2LP򚾪zI#Z0YaFhF ` [ $t1ȵJ:>|)?LUrBmcK陟dA!TzY"{UVPZ$6)y>k&ȓ~@AA -Yit2u&|#?4μ$(HTh+:Px@:p@>v!..<`J3kDR`#"5/sԙ>:DĞ:'pzrQn]S@Wt*ܝɘ]d2)D\\HEsa2!Bqߡ; O'SQYyN,j'kg#!g܊[ix=15m82jd?'tl7=inO] $n k6dF](" B>MT{IaA']=Sє Ͱ@ 6'wIY0 ɤ@ \eq观T]Ppz+$&cʬxn(}3hN8vnb:7//Ǒۼ̫"O&3͌_xZg3 VV5u i[esjfHIⱓ욇15dXtղNjKf$6yX"}IH+Ѹ*]tnٖUVR o'W*6 ӻ7~ -0:)'UYEޚRn͏NGl2Qtv/KDMlB6* X!V $_ev](]EL+N96Pd*|F,iyt+( YM/%,JV<'V]A\v1dH'^ E䵾>Lp"U9m L<.{w  2ql%+v jXmh$ e#_ܼ!1R:c 4pO }GBjc{kUe~hY̼tWwF(I+vrFz9ԪXFTPk/q7V?YmT^ʯHEc(зt<)jZ<4pm\ZΝe U*>\xB_n xLIy~ĕ. Z_ r-xr7ZwXP^^bgv 249XryqhcՆ hnqQ ǒ&WޯzwA#7]͔rN+XJL@,ͷe1[UMBuiL(Wq3A)JA"aF6^}k?`[z?yPe'- n ݬPe(5LHN#DhW/>?n?-=nRPr{J]J]jailrnY Pl ĝ0&`~d~{zs6"aJLxE}'Ĝ:]O6/!\fG0F\;(%<ڹzϖ?ANWqW4z'nAuobIUpbwrHlQ~}ȚEɨG;ti-v k=ڂ/e Qo?Uhы˒-L"Vd]^B0ySxc4KkZ䬆K:0We*q.G*+8* WD8P[|U.nK:"p"5WzD Ηw[, ;b\JB?jf']e%f&毰TO{iϫl[ ~HT6YтQA@>>U~urEvaN u!;`Yʁ]/%a}Q)a=P nNVE7`GK냴[^wmk(la_ B-CC$%wM %2VR C(=2.&ѴZnH( n⧼~E91Ā>eV8ԦE~\HvrfBEOI~hFS}4TS,@>kr;Dq ZP3ywb H-4 \9?,,Xg;gzݞCgo/@\SRόvȎd;RoM-;Ǒ, ^ |/؈鿑t>S Jk508cڶe fa~`'97;u8//1Ðe>eC iFņZlvoL!hA4h'.r_\O?&o!E*e[%<^_>@=‚#k,+60%vZFZ,V#wUpJXnr $\9Q8g&K5sHxi|RbŚ%w!lp[ݍjyVwV ARel\mup߈R w^xL@LMvr_~32q;YR:V!;cA*t|"[$tXCRz{mF{\yt#Og%$&%@K}=swFOGU jXUb7 Ղ;q F9 hɗܤb&,|-6V-Pz&N;]s $t|C[Wm#a:AXGvkM)ڃxgvp0*:$ *AMe2t\p͊?VMJVYt gM_fq ֪q<3nV}^afiW&%NJ=^X v|j̟(TQ c+<]^{Y$g)i&豫S6E>xtsj(fs_`G1EIh1/ ʶE1,P2&xŏ;s >}дY8ƐH/ȷfA,X\oZ.j-+~qsz3+«rgo 9MFG&Wf$ͷ;,xc{3D]nvѱ2vΆb2JÐtFnw(UM5-9й"Lxk%re%CWhF2oy~l_Q')+[S7I! qMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADsafecopy-1.7/test/test13/test2.dat0000644000175100001440000005000011726745167016075 0ustar ravenusersO9O^TŖڷX71g%a! .fF>_yz`M4]b~~!f֜ S D iXH5h$1 R h<-& ?wP[±:A) 8qԀO aF19i4sk~ 'bat,̲hX>q`5D=h7y<1<6 &i=ۤވn~Cc쨅`M]#OA~hRðo?O1-j֣9 2~\AǷZڽ;ՙ hF! ZMNriRr4:mwfR>jfk+?r̓B%/ӃEʍ4,8@k,q9l?cיrrI% NRUoGȳTUd&Oy,m/0bU-h"㍕y> Zy{oqh[@m利;q }fƗgP\Qt3V9Y>$0ܘ8X,-jSVԺџ) R \ľ>&~nD=I9K^J,u+(i)M̜̉Ox*G8O+zm;I@CY.>IFB%_u#)78@-qciW3Q}/bB:Ɉc?zĂYZ+t%jM{5{8wj6E: ;!PM L2W\Z~@Ez\.n{#+ s4+/K7zn!"IH:يMy8 +cer49I[i`@;(j+̂VNa*7Pl_Wޤ8=5Z/$2mByuU-`Rމ&L>3K͝Y՚vg+\}Ӊ!DQ|F\辙tFp'6oojف'&0k4ek(tUoj RqJ$XZ_R&qR(RC5јM#F&"!aQrEy'2LP򚾪zI#Z0YaFhF ` [ $t1ȵJ:>|)?LUrBmcK陟dA!TzY"{UVPZ$6)y>k&ȓ~@AA -Yit2u&|#?4μ$(HTh+:Px@:p@>v!..<`J3kDR`#"5/sԙ>:DĞ:'pzrQn]S@Wt*ܝɘ]d2)D\\HEsa2!Bqߡ; O'SQYyN,j'kg#!g܊[ix=15m82jd?'tl7=inO] $n k6dF](" B>MT{IaA']=Sє Ͱ@ 6'wIY0 ɤ@ \eq观T]Ppz+$&cʬxn(}3hN8vnb:7//Ǒۼ̫"O&3͌_xZg3 VV5u i[esjfHIⱓ욇15dXtղNjKf$6yX"}IH+Ѹ*]tnٖUVR o'W*6 ӻ7~ -0:)'UYEޚRn͏NGl2Qtv/KDMlB6* X!V $_ev](]EL+N96Pd*|F,iyt+( YM/%,JV<'V]A\v1dH'^ E䵾>Lp"U9m L<.{w  2ql%+v jXmh$ e#_ܼ!1R:c 4pO }GBjc{kUe~hY̼tWwF(I+vrFz9ԪXFTPk/q7V?YmT^ʯHEc(зt<)jZ<4pm\ZΝe U*>\xB_n xLIy~ĕ. Z_ r-xr7ZwXP^^bgv 249XryqhcՆ hnqQ ǒ&WޯzwA#7]͔rN+XJL@,ͷe1[UMBuiL(Wq3A)JA"aF6^}k?`[z?yPe'- n ݬPe(5LHN#DhW/>?n?-=nRPr{J]J]jailrnY Pl ĝ0&`~d~{zs6"aJLxE}'Ĝ:]O6/!\fG0F\;(%<ڹzϖ?ANWqW4z'nAuobIUpbwrHlQ~}ȚEɨG;ti-v k=ڂ/e Qo?Uhы˒-L"Vd]^B0ySxc4KkZ䬆K:0We*q.G*+8* WD8P[|U.nK:"p"5WzD Ηw[, ;b\JB?jf']e%f&毰TO{iϫl[ ~HT6YтQA@>>U~urEvaN u!;`Yʁ]/%a}Q)a=P nNVE7`GK냴[^wmk(la_ B-CC$%wM %2VR C(=2.&ѴZnH( n⧼~E91Ā>eV8ԦE~\HvrfBEOI~hFS}4TS,@>kr;Dq ZP3ywb H-4 \9?,,Xg;gzݞCgo/@\SRόvȎd;RoM-;Ǒ, ^ |/؈鿑t>S Jk508cڶe fa~`'97;u8//1Ðe>eC iFņZlvoL!hA4h'.r_\O?&o!E*e[%<^_>@=‚#k,+60%vZFZ,V#wUpJXnr $\9Q8g&K5sHxi|RbŚ%w!lp[ݍjyVwV ARel\mup߈R w^xL@LMvr_~32q;YR:V!;cA*t|"[$tXCRz{mF{\yt#Og%$&%@K}=swFOGU jXUb7 Ղ;q F9 hɗܤb&,|-6V-Pz&N;]s $t|C[Wm#a:AXGvkM)ڃxgvp0*:$ *AMe2t\p͊?VMJVYt gM_fq ֪q<3nV}^afiW&%NJ=^X v|j̟(TQ c+<]^{Y$g)i&豫S6E>xtsj(fs_`G1EIh1/ ʶE1,P2&xŏ;s >}дY8ƐH/ȷfA,X\oZ.j-+~qsz3+«rgo 9MFG&Wf$ͷ;,xc{3D]nvѱ2vΆb2JÐtFnw(UM5-9й"Lxk%re%CWhF2oy~l_Q')+[S7I! qMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAAD޲EVWI":/LȰWf3e(o|V/Z>qBZɷYA42?ՃȡK?VY?A3GΉHNL{`8Ouc:p ?Yh*p;%GEd,VTHadW!d S#'4ZR'hd$ry5X+3]sd;>,؁`;ep:qLҹV9)ʴ6䘈_4Cr}L T!'" {=CxCjF< XB4UqđX[Tr;rύ-NqnQ&Vim'ZKv"o>續7HsJF]<:mk?<tX;eA5gϼC{onR{/TZ}v1+~XW\*<ˡô@*vث.4+૝qH2%=6KO1+0B'5m:{s /EF yW0NHZi*6 D[ΨU+cVhNI`CKGǽRm^${k+Db_dQ{H2V|Dջ4.G Ioho|p=G",=9Vƨڇ#EO N'Gqf~S $ ǔmo6vy^\ݚBM+UwE]8n\JYY22ř ܖ~)kE5TN}*Y8<>0v. 8Ztҽ]e%)rL<9pU_KI{ޡѺ.9VW@NT2ȝ$t`UmTbiř*k-MeOLc'tS(vK fid#KoCֿL< BX\DX )cO`yri2)O?A^5Mf)wyjꏚ}ΎIll:gJQX8G%4R_WQ_cWAc@܊)L|E>j,un}n1C&Q{jQ4jVl<ʲ d &9u )11fy'G>Ѭ[QR6%l*a/t%φ` É 5{ZgrT<3#F~>ywEDUU1;4e0]XBe5r-}`h:5\53 @A+ xA\ϛ g'#ڳ2j1ErH"̴{d9+6%kխl \INVlHj]3Tn  ҿDzqkڇ؄놻w1][fd,..Fo$bs=33oQ}х"\/y3Qjޢ^x0`"|YJLս/$܅`1lrl1^zOx4yy&!6x΁y̙8$8:eXmp\;wvFBXӽgw5}kT rϰGpnM!‚MARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAAD +r^U`_))-$~*~Yz+ ,BL};"aƗRn/! $эjG%ᄫEkSt7%yM]/dX*IIɔPmyFBS{?FBG-[/pX?#W &Jŏ|?,!Lwɒjb빿kW=Yוs[/I5Y=O;r2=޸5Qq3wL"6t'<8^(% A̞VlҦPK??{m 38E32ܦjWz{ba10Z>c*Vl=yS>S:"O ?gg̈́xȎh9FyʙHDE;:TǾ[^e2δmdK8X[Hv0oO^m߽^xOO%g{~.Mz""i~^cS o\*Dȁ3Ϛ|1H-\v".W7Ma*D.1ƼZX\cRZC=@G)=`T "|6{LHJ>\QvlqO9FaA&4Ne8:(B▙RҗUvdtX>=~ٷ^$ɂ%R6Mk|nir*KR!,Hl3۠xFoG hFŐ ,\2w=MšMSqۺy1GQ]KQ`1P7uoQӯݩ~,{A=e.?yw~e}=xyDًet6]R$#^C2Ňґ|a08=b&Yb#^:1VK z_R~&j IO~KTIД"V@r{}E+Bfv`"L=zn~,$ټm*Iq}9J aOʗW|S"+gX7uP<`B𴿺.dbvdS Jp`j'm--+2r0Dgx?qL:l'w?Q(j3D${Mθ[p&P+cOE h o ^2'@5&T|'|f5f?ضC]k('dwy>#x[7𧜛f+T7LϚ2Q =G/)^19!S+T\Wk3٥9 mhaFB)iWG0KXDUBX_n9:{AbB3+H}-ݾmBR 32[FJܑyx>^ե+$Oߤ:]`W?;wdN5/@@t~4nXvRp)@x~-G )?Mv™OƓf̩BX|I^G8t)jH4Ev%t(~s*Az9gR*15fi`D4.(<$iNҿ͖E%UlQU$m*AgTETg%4lߖA&Jl& s̃0|w, ECpPCSji,]D̻8:utsTeemćʹe?t}Â2Ѷ(H &o=7Hab Yk̸귖5Ե+e,^>|4y8,-tp9+KɺU9ԭwU!?΋AQK$;ܭKX}Α?^ V*)s-u2+OesU}[խd@,kP88I|lprƯ= !j̓]ErVTi.埃'b[$Tu1By[cךּ,CIHe3 [j jmճ_ՐFO|t巙 YwRR-8X,uY5WlNS"EzWLJ|D*p l9(bT$r^,hʠRP`d~(75:z$?cE߰)B(dїu+3wLf>wM]<(Ԙ@MC]ۍ hi4 £58H-4|r4v4(&+ZjG0^Q)W*b&R~.q;<[/@S /Dg۪ڻ390},E6՛ H!jl LF2M;l盕I-LwGr˝)y(zV'\O ӻdqeC[+D& ;Ƒni}Oh .D:TJҘ}#Xg%oކ9Gew#K݆)eru mQI nOAa8 Se7pN*F^fiLW>d $)o,ߤ#}6/x\& 3 ,Uj8 8gC}-.;֣sh^m\.dUuX tbAjx. WZՓ 5h)IvAclӎo>.lʱP,5_IzS!5G/iC85/Xc G*yz;ˍ`1/c!V `kBzS)%ޅdN9+7cKH, 1WQd @aRiޟ*perDcARB6KdـG/8?IlyI#a'8W!ӈ`r|;Vcx/[p DxV)MVT2L k(82E=WmҊekczu! n|$pIP#!ak=M"%+7ˠکocԿO Hp*m^U b'H:#iX$O2sP嚖dP MiUF%w==`@_zd$W{Q<ꜱInthkHMw8D~=.,nh<Ƶt˟^f)Ny':m!oh^Kw f9c]dV? grN^9!.W&Ky>*1BCYv r=6.cxFJ=L\r,yNu ;x-)=F,|4*튀k4|ジ,M^1+safecopy-1.7/test/test13/test.dat0000644000175100001440000005000011726745167016013 0ustar ravenusersO9O^TŖڷX71g%a! .fF>_yz`M4]b~~!f֜ S D iXH5h$1 R h<-& ?wP[±:A) 8qԀO aF19i4sk~ 'bat,̲hX>q`5D=h7y<1<6 &i=ۤވn~Cc쨅`M]#OA~hRðo?O1-j֣9 2~\AǷZڽ;ՙ hF! ZMNriRr4:mwfR>jfk+?r̓B%/ӃEʍ4,8@k,q9l?cיrrI% NRUoGȳTUd&Oy,m/0bU-h"㍕y> Zy{oqh[@m利;q }fƗgP\Qt3V9Y>$0ܘ8X,-jSVԺџ) R \ľ>&~nD=I9K^J,u+(i)M̜̉Ox*G8O+zm;I@CY.>IFB%_u#)78@-qciW3Q}/bB:Ɉc?zĂYZ+t%jM{5{8wj6E: ;!PM L2W\Z~@Ez\.n{#+ s4+/K7zn!"IH:يMy8 +cer49I[i`@;(j+̂VNa*7Pl_Wޤ8=5Z/$2mByuU-`Rމ&L>3K͝Y՚vg+\}Ӊ!DQ|F\辙tFp'6oojف'&0k4ek(tUoj RqJ$XZ_R&qR(RC5јM#F&"!aQrEy'2LP򚾪zI#Z0YaFhF ` [ $t1ȵJ:>|)?LUrBmcK陟dA!TzY"{UVPZ$6)y>k&ȓ~@AA -Yit2u&|#?4μ$(HTh+:Px@:p@>v!..<`J3kDR`#"5/sԙ>:DĞ:'pzrQn]S@Wt*ܝɘ]d2)D\\HEsa2!Bqߡ; O'SQYyN,j'kg#!g܊[ix=15m82jd?'tl7=inO] $n k6dF](" B>MT{IaA']=Sє Ͱ@ 6'wIY0 ɤ@ \eq观T]Ppz+$&cʬxn(}3hN8vnb:7//Ǒۼ̫"O&3͌_xZg3 VV5u i[esjfHIⱓ욇15dXtղNjKf$6yX"}IH+Ѹ*]tnٖUVR o'W*6 ӻ7~ -0:)'UYEޚRn͏NGl2Qtv/KDMlB6* X!V $_ev](]EL+N96Pd*|F,iyt+( YM/%,JV<'V]A\v1dH'^ E䵾>Lp"U9m L<.{w  2ql%+v jXmh$ e#_ܼ!1R:c 4pO }GBjc{kUe~hY̼tWwF(I+vrFz9ԪXFTPk/q7V?YmT^ʯHEc(зt<)jZ<4pm\ZΝe U*>\xB_n xLIy~ĕ. Z_ r-xr7ZwXP^^bgv 249XryqhcՆ hnqQ ǒ&WޯzwA#7]͔rN+XJL@,ͷe1[UMBuiL(Wq3A)JA"aF6^}k?`[z?yPe'- n ݬPe(5LHN#DhW/>?n?-=nRPr{J]J]jailrnY Pl ĝ0&`~d~{zs6"aJLxE}'Ĝ:]O6/!\fG0F\;(%<ڹzϖ?ANWqW4z'nAuobIUpbwrHlQ~}ȚEɨG;ti-v k=ڂ/e Qo?Uhы˒-L"Vd]^B0ySxc4KkZ䬆K:0We*q.G*+8* WD8P[|U.nK:"p"5WzD Ηw[, ;b\JB?jf']e%f&毰TO{iϫl[ ~HT6YтQA@>>U~urEvaN u!;`Yʁ]/%a}Q)a=P nNVE7`GK냴[^wmk(la_ B-CC$%wM %2VR C(=2.&ѴZnH( n⧼~E91Ā>eV8ԦE~\HvrfBEOI~hFS}4TS,@>kr;Dq ZP3ywb H-4 \9?,,Xg;gzݞCgo/@\SRόvȎd;RoM-;Ǒ, ^ |/؈鿑t>S Jk508cڶe fa~`'97;u8//1Ðe>eC iFņZlvoLP3%(7O #:t]N7 Y'E?*őhKCBC:o5xԂljX½N1vm95 qFwy|sqml:.otu7Oﰘ=L Wph}Teq4ĉ5$܎N|9nVxH(nzglWȃ8E=m$ ~6"b)o A#Zni)g>\axbN)wR-#@FnߺEܘ~%TAҨ`{Fy `IR'JpyUhkmŨ+d0\K>$ 7KAN;d,2Ҕ- Qw*'0h05NF"]3 Hx|Qgdb)^/~f2ODӞwͶ~F@ڿKFfSײ bM<%^R ww^+n'zQ8񽕅i/>F}^Zjvl]Gz*E(Kk'=kJ, #XgGB48<ѲJQZە ,xN:uyCX/4ChT@Ԡ_ȨZ !ũfhsg (de\U7 ioq^P{hѪ򃡤r#U#.N&n".ORdG_Ta&z؉sR.=`G3P _biS%x$=$S2B^ppQWz8 懘"Fm&;D.Е4RAknć}U?*Ec{)Ҹ8ˍ/Ozf"N(<[f,FCž$<rգm#"J 8]UKP9=V'IsfgPS>}QHl'-ԋY o'%,xP D|T?MHnԒDNu!ϤQ؃q̀7ACSu&$Bw[t7+Dn8gd}`)<ȩm)!InmSOM`!MW| nԚE@;xJMpR´='UQ^|g/9*@4WHXl[[b_JI -i pc5Kȣh~3]ο'ّnWdL-Bb}*KYpW e {"J9ɶ,3PPdmmn#Vcs5# 5 (TB({Rr;jDV[1J#BӮYY}esӈvhDZ~GpO2X쏩QvԚnz@Ldq}SpRڐxw"cFR>5*Y &k5`qP:@)K9/ii7&w3j+W],nJb3-*) V]AO N:{Uw8|RJWB'Hԏ)Ta[d{tȫ[uU鲚&I>טO]:z>`ߒjnQݺhIxtsB$QHJ diXhڰ& hv.D)aK+ /~ZzUd_5]Z80bUJy#yÒq-0P 8bT|"[8g3^A/QSZZ٤T+t`}5sMN߭m9hwDY{T/L3*G|τX z3CZnOZu:H<8Ezᦜ\5 |ю50 |~5s z=OXPIbk(//5:KdjgP`3+J CR m6oD"U/b֘JꞁczzJR޾OԽ4sY u)F 3j3bȓƾpzb8OL#AgaPaHCYٳΐ}[Lm~NBkũn\ֿXy\$$-!(fZT, r-!{5c͗S溌jeo_mӳC7+_:rV+?WU&ڙOd`h TTw7Ǜŷ[y;ozxa>!hA4h'.r_\O?&o!E*e[%<^_>@=‚#k,+60%vZFZ,V#wUpJXnr $\9Q8g&K5sHxi|RbŚ%w!lp[ݍjyVwV ARel\mup߈R w^xL@LMvr_~32q;YR:V!;cA*t|"[$tXCRz{mF{\yt#Og%$&%@K}=swFOGU jXUb7 Ղ;q F9 hɗܤb&,|-6V-Pz&N;]s $t|C[Wm#a:AXGvkM)ڃxgvp0*:$ *AMe2t\p͊?VMJVYt gM_fq ֪q<3nV}^afiW&%NJ=^X v|j̟(TQ c+<]^{Y$g)i&豫S6E>xtsj(fs_`G1EIh1/ ʶE1,P2&xŏ;s >}дY8ƐH/ȷfA,X\oZ.j-+~qsz3+«rgo 9MFG&Wf$ͷ;,xc{3D]nvѱ2vΆb2JÐtFnw(UM5-9й"Lxk%re%CWhF2oy~l_Q')+[S7I! q;`I3 i}21;mZ잉XaG2J$G*u6hf{^dA0'9g>Ji^E}^iDԕF\O>f~ @pN]7-ݾxةl(P8Eq9YQvwIc}i8j`Q !Iye/DK&(h9h> 6h3,{FB mx!wG|ަ'P" ht >^FKyryw D :;"w>8Q6~#Q.Ňv_<bgcS=~/Ad-5 tFiO"S'a9x','m u oEz +س ֟dJz=IJYx.ۊ = N0wA`I /}3 XQ֩";w"atzzHCJM f8;ϣ6 ]꼰JFΈRGF|r2RO ehH^ I2LC~< O*B7r(/`mv-:q(&d+I!,DU#+aG̭?.HW9*0K[ ݘI8hPz rhX!n![F#Q?F'3К*9av@gcem8c@/JUGE". _FK^Z֢-2?dW+=>ےm*b=#Q )r5Ri%MP':D+o~Äha]cT.79aA C}&24|NuRON0S¯t"vc>j6zMQXS&{eEhaJ6eJ%;{d;+>YIBvTlm8ܾWh΅ӎ7Vr ^qoEؖ-kE>'hvi4΄gM{皡V?V :_s,f}Q&g4In>IƣBԝo7gc@D_'"h珞'qBZɷYA42?ՃȡK?VY?A3GΉHNL{`8Ouc:p ?Yh*p;%GEd,VTHadW!d S#'4ZR'hd$ry5X+3]sd;>,؁`;ep:qLҹV9)ʴ6䘈_4Cr}L T!'" {=CxCjF< XB4UqđX[Tr;rύ-NqnQ&Vim'ZKv"o>續7HsJF]<:mk?<tX;eA5gϼC{onR{/TZ}v1+~XW\*<ˡô@*vث.4+૝qH2%=6KO1+0B'5m:{s /EF yW0NHZi*6 D[ΨU+cVhNI`CKGǽRm^${k+Db_dQ{H2V|Dջ4.G Ioho|p=G",=9Vƨڇ#EO N'Gqf~S $ ǔmo6vy^\ݚBM+UwE]8n\JYY22ř ܖ~)kE5TN}*Y8<>0v. 8Ztҽ]e%)rL<9pU_KI{ޡѺ.9VW@NT2ȝ$t`UmTbiř*k-MeOLc'tS(vK fid#KoCֿL< BX\DX )cO`yri2)O?A^5Mf)wyjꏚ}ΎIll:gJQX8G%4R_WQ_cWAc@܊)L|E>j,un}n1C&Q{jQ4jVl<ʲ d &9u )11fy'G>Ѭ[QR6%l*a/t%φ` É 5{ZgrT<3#F~>ywEDUU1;4e0]XBe5r-}`h:5\53 @A+ xA\ϛ g'#ڳ2j1ErH"̴{d9+6%kխl \INVlHj]3Tn  ҿDzqkڇ؄놻w1][fd,..Fo$bs=33oQ}х"\/y3Qjޢ^x0`"|YJLս/$܅`1lrl1^zOx4yy&!6x΁y̙8$8:eXmp\;wvFBXӽgw5}kT rϰGpnM!‚IgɄ=;"^'хax?G":0 *JuˡFazU{]Nfl|eFKEBZaX^ T{3dzД /=!Ś"@ )^6/0v7Pwv%3+?-$ >Ҁ-5{A)̐1F7f=HGn]W!(G5QhKI|kme,%j-}?ɹ*1JyE<8͐_9*f뉦?'n)GTU?0ɤ7)An+w'E ={#ąY2!_gpc=5縩=</_ިb̠LN` Llzq2T*:hWG(!X*7!z %N9xmrPTT Rs|?R/V!S+1h5I>%"kqVW]A,xUw S\P F?rB[`Wv=\@l/h[UڇS?˥BBkD*)_s' ^ #=vC̜`Wg+wRM 8=F6*rL~#],ͪaj>߈4(gPrXwB{_j>`_9ݰq3Q4-RNiV@JWA@ZC`Hz+@> b+GӾ۟O\VlɃdGdG{ /9UGٜNE:rPM"^:KEnBsw/'/v*i仠a;ҵKJӂ%`tӆ]|*,ZY,hז4qU04!,PcQ,'&w1w>6'B=%ARs QR!ԕ%Rz9>6U!5hg(=(Eˀ!9֭1z9J/]:a#|-ΫYnMRP~K"_%4h[8;|Ħk~~R7OҜ65p1-YNcQ!W#k1nq اb34&'-]nKNZ^I\]i&DzIԆ'V%WH<ͺ"uH{'2D^"zτADQS=A5y&| 󈉽w[wk+HfIht~)hP@2B5 )mWLH|M};eqgrTob^KJ( ĆZ6kxqXZvsE (HSIrݿȆDVP:./u3t6f^m*4 Jx:W|C'HƜ%lDSC}uZt~GOD2 H_[ӰX/!l5m;U%$]zPݻSz4 6& ,z4?0ZTnd?ZwURCT!g`zNXTNmxW>yK{>^pVQ:̢Nb.A倬{HMHSDcZ߄x6A!)ҴDh),E k'J,m S p+Čp4P}C9~Sie7D ތQ}&yjإPjRBZFr\b'):Ȑ>F |NnD'`շ\i͓l4 `ؤGC |.$`:Ncj͞% QyNS4,둱b/VC@:/GS%]嵤PEYbe6Ylj!$z>k%ootG8KDau=Px|TW 3T@+Ip{gȰjc{0?0pF"*Vp8u*NU}mJH{ܢxwwRRVc+>c3:ML+gJx:+=SMZ$LPR͂& Ӯ1FHyߤt{p`=!%w;\=|HBTZ5Q:xp%xVQ/#)׃D65yPl:JҜ=UoKnܧ`=,]{eWIg%C`]T@4}&t?e^lQ sWO2WZE]6 7Xx#AYfo@1-hT"\ΉIH4&xlh?#׊Yu¹- WPěqD}Z,J[4I^Vܑ9&bɵ Z4e|?.u Pnn:r,O:a Ÿ^mGA2k7bZDJ=fK/wzA\=FtG<@ɡI2\8H_ǯK{B;2jƉb?v.h/~z|bC]Sœ.&мICybHׂDzê?:xLtE|y:4Yw>^sUru29l}s;ɔLˠ> ,"a~JN2E^, ex,.G!Mq:/ Aʞ8ޘt,S [: K!ZG]j7=x/ސӦHDy$D"1V~MHPJɫ3V|>sc԰t]NS1>f4 45)m9k9*I [ Oӈ̩=+09W,>聃 CJ5#Ap<0"oACwǗ U}K} ){^LXBtDel0PZ2j莚^#8 FFtM*W'|= L)} GUgQ$֛asR[I%&U% ْGޘY vF>3 ̯3  Mv2v!0X>%;.'{ʩVpL.!vغCB$q2$EV\r ~[BE Hr"TN.p@~pI;?D'?s+f5,w9q@Wi翀Nv'H'9v:2VaiiFa({av RX=? ;N3C3ɳ +r^U`_))-$~*~Yz+ ,BL};"aƗRn/! $эjG%ᄫEkSt7%yM]/dX*IIɔPmyFBS{?FBG-[/pX?#W &Jŏ|?,!Lwɒjb빿kW=Yוs[/I5Y=O;r2=޸5Qq3wL"6t'<8^(% A̞VlҦPK??{m 38E32ܦjWz{ba10Z>c*Vl=yS>S:"O ?gg̈́xȎh9FyʙHDE;:TǾ[^e2δmdK8X[Hv0oO^m߽^xOO%g{~.Mz""i~^cS o\*Dȁ3Ϛ|1H-\v".W7Ma*D.1ƼZX\cRZC=@G)=`T "|6{LHJ>\QvlqO9FaA&4Ne8:(B▙RҗUvdtX>=~ٷ^$ɂ%R6Mk|nir*KR!,Hl3۠xFoG hFŐ ,\2w=MšMSqۺy1GQ]KQ`1P7uoQӯݩ~,{A=e.?yw~e}=xyDًet6]R$#^C2Ňґ|a08=b&Yb#^:1VK z_R~&j IO~KTIД"V@r{}E+Bfv`"L=zn~,$ټm*Iq}9J aOʗW|S"+gX7uP<`B𴿺.dbvdS Jp`j'm--+2r0Dgx?qL:l'w?Q(j3D${Mθ[p&P+cOE h o ^2'@5&T|'|f5f?ضC]k('dwy>#x[7𧜛f+T7LϚ2Q =G/)^19!S+T\Wk3٥9 mhaFB)iWG0KXDUBX_n9:{AbB3+H}-ݾmBR 32[FJܑyx>^ե+$Oߤ:]`W?;wdN5/@@t~4nXvRp)@x~-G )?Mv™OƓf̩BX|I^G8t)jH4Ev%t(~s*Az9gR*15fi`D4.(<$iNҿ͖E%UlQU$m*AgTETg%4lߖA&Jl& s̃0|w, ECpPCSji,]D̻8:utsTeemćʹe?t}Â2Ѷ(H &o=7Hab Yk̸귖5Ե+e,^>|4y8,-tp9+KɺU9ԭwU!?΋AQK$;ܭKX}Α?^ V*)s-u2+OesU}[խd@,kP88I|lprƯ= !j̓]ErVTi.埃'b[$Tu1By[cךּ,CIHe3 [j jmճ_ՐFO|t巙 YwRR-8X,uY5WlNS"EzWLJ|D*p l9(bT$r^,hʠRP`d~(75:z$?cE߰)B(dїu+3wLf>wM]<(Ԙ@MC]ۍ hi4 £58H-4|r4v4(&+ZjG0^Q)W*b&R~.q;<[/@S /Dg۪ڻ390},E6՛ H!jl LF2M;l盕I-LwGr˝)y(zV'\O ӻdqeC[+D& ;Ƒni}Oh .D:TJҘ}#Xg%oކ9Gew#K݆)eru mQI nOAa8 Se7pN*F^fiLW>d $)o,ߤ#}6/x\& 3 ,Uj8 8gC}-.;֣sh^m\.dUuX tbAjx. WZՓ 5h)IvAclӎo>.lʱP,5_IzS!5G/iC85/Xc G*yz;ˍ`1/c!V `kBzS)%ޅdN9+7cKH, 1WQd @aRiޟ*perDcARB6KdـG/8?IlyI#a'8W!ӈ`r|;Vcx/[p DxV)MVT2L k(82E=WmҊekczu! n|$pIP#!ak=M"%+7ˠکocԿO Hp*m^U b'H:#iX$O2sP嚖dP MiUF%w==`@_zd$W{Q<ꜱInthkHMw8D~=.,nh<Ƶt˟^f)Ny':m!oh^Kw f9c]dV? grN^9!.W&Ky>*1BCYv r=6.cxFJ=L\r,yNu ;x-)=F,|4*튀k4|ジ,M^1+safecopy-1.7/test/test13/test3.dat0000644000175100001440000005000011726745167016076 0ustar ravenusersO9O^TŖڷX71g%a! .fF>_yz`M4]b~~!f֜ S D iXH5h$1 R h<-& ?wP[±:A) 8qԀO aF19i4sk~ 'bat,̲hX>q`5D=h7y<1<6 &i=ۤވn~Cc쨅`M]#OA~hRðo?O1-j֣9 2~\AǷZڽ;ՙ hF! ZMNriRr4:mwfR>jfk+?r̓B%/ӃEʍ4,8@k,q9l?cיrrI% NRUoGȳTUd&Oy,m/0bU-h"㍕y> Zy{oqh[@m利;q }fƗgP\Qt3V9Y>$0ܘ8X,-jSVԺџ) R \ľ>&~nD=I9K^J,u+(i)M̜̉Ox*G8O+zm;I@CY.>IFB%_u#)78@-qciW3Q}/bB:Ɉc?zĂYZ+t%jM{5{8wj6E: ;!PM L2W\Z~@Ez\.n{#+ s4+/K7zn!"IH:يMy8 +cer49I[i`@;(j+̂VNa*7Pl_Wޤ8=5Z/$2mByuU-`Rމ&L>3K͝Y՚vg+\}Ӊ!DQ|F\辙tFp'6oojف'&0k4ek(tUoj RqJ$XZ_R&qR(RC5јM#F&"!aQrEy'2LP򚾪zI#Z0YaFhF ` [ $t1ȵJ:>|)?LUrBmcK陟dA!TzY"{UVPZ$6)y>k&ȓ~@AA -Yit2u&|#?4μ$(HTh+:Px@:p@>v!..<`J3kDR`#"5/sԙ>:DĞ:'pzrQn]S@Wt*ܝɘ]d2)D\\HEsa2!Bqߡ; O'SQYyN,j'kg#!g܊[ix=15m82jd?'tl7=inO] $n k6dF](" B>MT{IaA']=Sє Ͱ@ 6'wIY0 ɤ@ \eq观T]Ppz+$&cʬxn(}3hN8vnb:7//Ǒۼ̫"O&3͌_xZg3 VV5u i[esjfHIⱓ욇15dXtղNjKf$6yX"}IH+Ѹ*]tnٖUVR o'W*6 ӻ7~ -0:)'UYEޚRn͏NGl2Qtv/KDMlB6* X!V $_ev](]EL+N96Pd*|F,iyt+( YM/%,JV<'V]A\v1dH'^ E䵾>Lp"U9m L<.{w  2ql%+v jXmh$ e#_ܼ!1R:c 4pO }GBjc{kUe~hY̼tWwF(I+vrFz9ԪXFTPk/q7V?YmT^ʯHEc(зt<)jZ<4pm\ZΝe U*>\xB_n xLIy~ĕ. Z_ r-xr7ZwXP^^bgv 249XryqhcՆ hnqQ ǒ&WޯzwA#7]͔rN+XJL@,ͷe1[UMBuiL(Wq3A)JA"aF6^}k?`[z?yPe'- n ݬPe(5LHN#DhW/>?n?-=nRPr{J]J]jailrnY Pl ĝ0&`~d~{zs6"aJLxE}'Ĝ:]O6/!\fG0F\;(%<ڹzϖ?ANWqW4z'nAuobIUpbwrHlQ~}ȚEɨG;ti-v k=ڂ/e Qo?Uhы˒-L"Vd]^B0ySxc4KkZ䬆K:0We*q.G*+8* WD8P[|U.nK:"p"5WzD Ηw[, ;b\JB?jf']e%f&毰TO{iϫl[ ~HT6YтQA@>>U~urEvaN u!;`Yʁ]/%a}Q)a=P nNVE7`GK냴[^wmk(la_ B-CC$%wM %2VR C(=2.&ѴZnH( n⧼~E91Ā>eV8ԦE~\HvrfBEOI~hFS}4TS,@>kr;Dq ZP3ywb H-4 \9?,,Xg;gzݞCgo/@\SRόvȎd;RoM-;Ǒ, ^ |/؈鿑t>S Jk508cڶe fa~`'97;u8//1Ðe>eC iFņZlvoL!hA4h'.r_\O?&o!E*e[%<^_>@=‚#k,+60%vZFZ,V#wUpJXnr $\9Q8g&K5sHxi|RbŚ%w!lp[ݍjyVwV ARel\mup߈R w^xL@LMvr_~32q;YR:V!;cA*t|"[$tXCRz{mF{\yt#Og%$&%@K}=swFOGU jXUb7 Ղ;q F9 hɗܤb&,|-6V-Pz&N;]s $t|C[Wm#a:AXGvkM)ڃxgvp0*:$ *AMe2t\p͊?VMJVYt gM_fq ֪q<3nV}^afiW&%NJ=^X v|j̟(TQ c+<]^{Y$g)i&豫S6E>xtsj(fs_`G1EIh1/ ʶE1,P2&xŏ;s >}дY8ƐH/ȷfA,X\oZ.j-+~qsz3+«rgo 9MFG&Wf$ͷ;,xc{3D]nvѱ2vΆb2JÐtFnw(UM5-9й"Lxk%re%CWhF2oy~l_Q')+[S7I! q;`I3 i}21;mZ잉XaG2J$G*u6hf{^dA0'9g>Ji^E}^iDԕF\O>f~ @pN]7-ݾxةl(P8Eq9YQvwIc}i8j`Q !Iye/DK&(h9h> 6h3,{FB mx!wG|ަ'P" ht >^FKyryw D :;"w>8Q6~#Q.Ňv_<bgcS=~/Ad-5 tFiO"S'a9x','m u oEz +س ֟dJz=IJYx.ۊ = N0wA`I /}3 XQ֩";w"atzzHCJM f8;ϣ6 ]꼰JFΈRGF|r2RO ehH^ I2LC~< O*B7r(/`mv-:q(&d+I!,DU#+aG̭?.HW9*0K[ ݘI8hPz rhX!n![F#Q?F'3К*9av@gcem8c@/JUGE". _FK^Z֢-2?dW+=>ےm*b=#Q )r5Ri%MP':D+o~Äha]cT.79aAMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAAD޲EVWI":/LȰWf3e(o|V/Z>qBZɷYA42?ՃȡK?VY?A3GΉHNL{`8Ouc:p ?Yh*p;%GEd,VTHadW!d S#'4ZR'hd$ry5X+3]sd;>,؁`;ep:qLҹV9)ʴ6䘈_4Cr}L T!'" {=CxCjF< XB4UqđX[Tr;rύ-NqnQ&Vim'ZKv"o>續7HsJF]<:mk?<tX;eA5gϼC{onR{/TZ}v1+~XW\*<ˡô@*vث.4+૝qH2%=6KO1+0B'5m:{s /EF yW0NHZi*6 D[ΨU+cVhNI`CKGǽRm^${k+Db_dQ{H2V|Dջ4.G Ioho|p=G",=9Vƨڇ#EO N'Gqf~S $ ǔmo6vy^\ݚBM+UwE]8n\JYY22ř ܖ~)kE5TN}*Y8<>0v. 8Ztҽ]e%)rL<9pU_KI{ޡѺ.9VW@NT2ȝ$t`UmTbiř*k-MeOLc'tS(vK fid#KoCֿL< BX\DX )cO`yri2)O?A^5Mf)wyjꏚ}ΎIll:gJQX8G%4R_WQ_cWAc@܊)L|E>j,un}n1C&Q{jQ4jVl<ʲ d &9u )11fy'G>Ѭ[QR6%l*a/t%φ` É 5{ZgrT<3#F~>ywEDUU1;4e0]XBe5r-}`h:5\53 @A+ xA\ϛ g'#ڳ2j1ErH"̴{d9+6%kխl \INVlHj]3Tn  ҿDzqkڇ؄놻w1][fd,..Fo$bs=33oQ}х"\/y3Qjޢ^x0`"|YJLս/$܅`1lrl1^zOx4yy&!6x΁y̙8$8:eXmp\;wvFBXӽgw5}kT rϰGpnM!‚IgɄ=;"^'хax?G":0 *JuˡFazU{]Nfl|eFKEBZaX^ T{3dzД /=!Ś"@ )^6/0v7Pwv%3+?-$ >Ҁ-5{A)̐1F7f=HGn]W!(G5QhKI|kme,%j-}?ɹ*1JyE<8͐_9*f뉦?'n)GTU?0ɤ7)An+w'E ={#ąY2!_gpc=5縩=</_ިb̠LN` Llzq2T*:hWG(!X*7!z %N9xmrPTT Rs|?R/V!S+1h5I>%"kqVW]A,xUw S\P F?rB[`Wv=\@l/h[UڇS?˥BBkD*)_s' ^ #=vC̜`Wg+wRM 8=F6*rL~#],ͪaj>߈4(gPrXwB{_j>`_9ݰq3Q4-RNiV@JWA@ZC`Hz+@> b+GӾ۟O\VlɃdGdG{ /9UGٜNE:rPM"^:KEnBsw/'/v*i仠a;ҵKJӂ%`tӆ]|*,ZY,hז4qU04!,PcQ,'&w1w>FBG-[/pX?#W &Jŏ|?,!Lwɒjb빿kW=Yוs[/I5Y=O;r2=޸5Qq3wL"6t'<8^(% A̞VlҦPK??{m 38E32ܦjWz{ba10Z>c*Vl=yS>S:"O ?gg̈́xȎh9FyʙHDE;:TǾ[^e2δmdK8X[Hv0oO^m߽^xOO%g{~.Mz""i~^cS o\*Dȁ3Ϛ|1H-\v".W7Ma*D.1ƼZX\cRZC=@G)=`T "|6{LHJ>\QvlqO9FaA&4Ne8:(B▙RҗUvdtX>=~ٷ^$ɂ%R6Mk|nir*KR!,Hl3۠xFoG hFŐ ,\2w=MšMSqۺy1GQ]KQ`1P7uoQӯݩ~,{A=e.?yw~e}=xyDًet6]R$#^C2Ňґ|a08=b&Yb#^:1VK z_R~&j IO~KTIД"V@r{}E+Bfv`"L=zn~,$ټm*Iq}9J aOʗW|S"+gX7uP<`B𴿺.dbvdS Jp`j'm--+2r0Dgx?qL:l'w?Q(j3D${Mθ[p&P+cOE h o ^2'@5&T|'|f5f?ضC]k('dwy>#x[7𧜛f+T7LϚ2Q =G/)^19!S+T\Wk3٥9 mhaFB)iWG0KXDUBX_n9:{AbB3+H}-ݾmBR 32[FJܑyx>^ե+$Oߤ:]`W?;wdN5/@@t~4nXvRp)@x~-G )?Mv™OƓf̩BX|I^G8t)jH4Ev%t(~s*Az9gR*15fi`D4.(<$iNҿ͖E%UlQU$m*AgTETg%4lߖA&Jl& s̃0|w, ECpPCSji,]D̻8:utsTeemćʹe?t}Â2Ѷ(H &o=7Hab Yk̸귖5Ե+e,^>|4y8,-tp9+KɺU9ԭwU!?΋AQK$;ܭKX}Α?^ V*)s-u2+OesU}[խd@,kP88I|lprƯ= !j̓]ErVTi.埃'b[$Tu1By[cךּ,CIHe3 [j jmճ_ՐFO|t巙 YwRR-8X,uY5WlNS"EzWLJ|D*p l9(bT$r^,hʠRP`d~(75:z$?cE߰)B(dїu+3wLf>wM]<(Ԙ@MC]ۍ hi4 £58H-4|r4v4(&+ZjG0^Q)W*b&R~.q;<[/@S /Dg۪ڻ390},E6՛ H!jl LF2M;l盕I-LwGr˝)y(zV'\O ӻdqeC[+D& ;Ƒni}Oh .D:TJҘ}#Xg%oކ9Gew#K݆)eru mQI nOAa8 Se7pN*F^fiLW>d $)o,ߤ#}6/x\& 3 ,Uj8 8gC}-.;֣sh^m\.dUuX tbAjx. WZՓ 5h)IvAclӎo>.lʱP,5_IzS!5G/iC85/Xc G*yz;ˍ`1/c!V `kBzS)%ޅdN9+7cKH, 1WQd @aRiޟ*perDcARB6KdـG/8?IlyI#a'8W!ӈ`r|;Vcx/[p DxV)MVT2L k(82E=WmҊekczu! n|$pIP#!ak=M"%+7ˠکocԿO Hp*m^U b'H:#iX$O2sP嚖dP MiUF%w==`@_zd$W{Q<ꜱInthkHMw8D~=.,nh<Ƶt˟^f)Ny':m!oh^Kw f9c]dV? grN^9!.W&Ky>*1BCYv r=6.cxFJ=L\r,yNu ;x-)=F,|4*튀k4|ジ,M^1+safecopy-1.7/test/test13/test.sh0000755000175100001440000000363511726745167015674 0ustar ravenusers#!/bin/sh test_name="safecopy, continuing aborted safecopy run with arbitrary sizes" source "../libtestsuite.sh" function test_current() { testsuite_debug "copying reference files for safecopy" cp "test1.dat" "$testsuite_tmpdir/test2.dat" >/dev/null 2>&1 cp "test2.dat" "$testsuite_tmpdir/test3.dat" >/dev/null 2>&1 testsuite_assert_files_identical "test1.dat" "$testsuite_tmpdir/test2.dat" testsuite_assert_files_identical "test2.dat" "$testsuite_tmpdir/test3.dat" testsuite_debug "Test, safecopy must copy the first half of the damaged file" LD_PRELOAD="$preload" $safecopy -M "MARKBAAD" -R 2 -b 1024 -f 1* -l 10 debug "$testsuite_tmpdir/test1.dat" >"$testsuite_tmpdir/test1.out" 2>&1 if [ $? != 1 ]; then testsuite_error "Run of safecopy returned wrong exit code. Output:" testsuite_debug_file "$testsuite_tmpdir/test1.out" fi testsuite_assert_files_identical "test1.dat" "$testsuite_tmpdir/test1.dat" testsuite_debug "Test, safecopy must continue with the second half" LD_PRELOAD="$preload" $safecopy -M "MARKBAAD" -R 2 -b 1024 -f 1* -c 10 debug "$testsuite_tmpdir/test2.dat" >"$testsuite_tmpdir/test2.out" 2>&1 if [ $? != 1 ]; then testsuite_error "Run of safecopy returned wrong exit code. Output:" testsuite_debug_file "$testsuite_tmpdir/test2.out" fi testsuite_assert_files_identical "test2.dat" "$testsuite_tmpdir/test2.dat" testsuite_debug "Test, continue in the middle with limited length" testsuite_debug " Must recover soft recoverable blocks and not touch rest" LD_PRELOAD="$preload" $safecopy -M "MARKBAAD" -R 3 -b 1024 -f 1* -c 5 -l 13 debug "$testsuite_tmpdir/test3.dat" >"$testsuite_tmpdir/test3.out" 2>&1 if [ $? != 1 ]; then testsuite_error "Run of safecopy returned wrong exit code. Output:" testsuite_debug_file "$testsuite_tmpdir/test3.out" fi testsuite_assert_files_identical "test3.dat" "$testsuite_tmpdir/test3.dat" } testsuite_runtest safecopy-1.7/test/config_in.sh0000644000175100001440000000024111233350360015464 0ustar ravenusers#!/bin/false safecopy="$testsuite_basedir/src/safecopy" debuglib="$testsuite_basedir/simulator/src/libsimulatorlb.so.1.0" preload="$debuglib: $LD_PRELOAD" safecopy-1.7/test/test7/0000755000175100001440000000000011726756524014271 5ustar ravenuserssafecopy-1.7/test/test7/simulator.cfg0000644000175100001440000000020311202053544016741 0ustar ravenusersblocksize=1000 filesize=20000 source=test.dat softfailcount=2 hardfail=2 hardfail=4 hardfail=9 hardfail=10 hardfail=11 hardfail=12 safecopy-1.7/test/test7/test4.badblocks0000644000175100001440000000002511202053544017154 0ustar ravenusers1 2 3 4 8 9 10 11 12 safecopy-1.7/test/test7/test1.dat0000644000175100001440000004704011202053544016005 0ustar ravenusersiB֤/gW*WаQ2 UŶi jRT z.Bl#V'^mݙVͨ،Q!zUIznΛhdֵVtwPĹSp袆 ;k}w*E.Y* !FSΏ[¬9IFe0 oBv:C;}uLBNFQnfϑtdw_~E1N6/c5 >%"Y+mxU\K%WNa,ںgdT]`2xar2NPf *ȍLl>E\kX;/b П~aqi)!9ݬiI0 DQ =f4m3^`Z((]b17y[) `[pC5q GքIO}+DR!I;& SSLXW9-FnEEÊAOn>sE>E,jFe"x;#q/Bi(WwzEt54QR_%̳\J~ >RDDN'q[qptjE1 Kָ9a2Ѳ( yZ;{ݕBKu.|u6k3:]t#S8eb$ƦaѽS5IpGTo)ҽ9]XF,IX`48uj$ OQIZ=M MdSVsLi$v9Z`D +gal/)<8S]4ޯ  =j8hMcAq_rq5N2U/KIH%5}|I,F"v!*2U-;?9 U^zmŏYceװ6ۯ KP'f\D :]^G_y dr"~ n:Ϛa_p˩\I5HkspwZQ?MY)?_=P2ed!gaEqbdj!$i~%;"9Z5"+#Ω:gԷ|::a$rH^7L|ӣy%FJY,P"vU+nMg`XV_VLy2!%P, 79F1Q{>c̨|0b$ET;Oj0 MddWI|jͱBKKXD+5;\FժZig YfLX^2d.W6yL#Z%yڢwoSV%؂=L(#["*S mo)Knjd-o[5!m0':K׹Rz(QMHJ < xeP3f_~Ɯf 2Mtz'7L%5<44[(WhD՛RX[:Lo!{*YŞc,2EWCr@ ݾ7&|%5e+f]MlB_93,HBg11>o~2@)⣲;u[*#ZI(պ\1JSg|!7d Gr|=tƢ\7s,gP"qﺚadkn@5Om n73xmJ|vCEmdiOwf^lҩf\+7VNPmR.VKa:61գ8 H.r+qvp1Zu/Yh.jMڈ)[]];Ľ4X(wf\`?c tتldnaƕ4|lI樟ԠCvr̍#,Edҧd L3ɵ}^}Y$߯pYk= ZB+ۮ:9c@˞MG<Kх4ש{] Tb_GU\*e0.OZ^Ϡ:-5aEё)ȌQ@sPB;ڼSv(Ƽfu%uVTLHMx2ԪO_ZOf$HEF :0á2YP Z7i'f>8 !J+^[zQ%zw:(bδͿ%MkI]"Eq7\/$E#e|yfPɕm$=R ~ҕj3܄Q>!GPFSO[יf"! jYp|䒂h/~|o!<!XPΙSgWZg #Xzўcb-]TŁ EţμgxU'C#)/Ǖ|҉l[Wy7a}৔ ^OH6eMӂܠ9q`=KuE7lCG2;XI9s 9!2-}5L)fKn;VVHtg_ 4\#;[“ɷ[>>֍[gȥx"ӟN/SbzL専C3$Wks+kvݹGNvzɰ|)|2+ҫ#G/Dj#Xf`F 0D><ŽKFGXw ]:gy(B#D?/jwIfd0)_}\SKAVU%gB\Z9C) *d8#=؎s,KSn,th߃w$`KH|OvRwnzClNMq==3/Tp%\s:ɏ?W}ϵ91H%2̂07<UdJkV0kcyOZ#ܔO6N9x9hhKpSk 4ލ['Q_>I(Cy~қ}}SZ5!&3l/e蘸!T<*"0ԁ@vLsGR5wwG]4M` _%S50,O UI^|XLiBooc&Xfv16_N"ْEnM}K IYrQ~Zf`iQӢKџ! 󴗝Mq҄ rQ#V ,TU'(-b3ѳwkGoV!|0`U 3:~׶[z)xY^^v>Gp{ۢI G}àsn͟_WlpO b r҄@"hv8D4F!o<|S08c tih%aG:hDSS]U1yr$:ʜ]d\;A:ICTZvMt5Ӏhz4{ MAn{+(UIe[$j7M:Ak߮w s "tg瘰 R\l*<8Rq [.28 AES NrF0m@a :?DyQ1jLPugc9fIRY8{>^n#V u]*,tV-F8W 0Pܽxʌ}F<.#+A"+Y470gYϸHT{q޸ʧH_)8xW65[X9SLIaWqs[Y;w-f:v;a"&}P8mVmꡊRq?mGвd9X3& L,bRѶqJяT^̭ai0&VkqۗjBx Eҏ;GmV؂%h Ρ+3os pYy盫G ~HR;o>j&mXO2^ͦ0EOq5P`;D 󲃐'B>a0.8/[B LÒ#{l0>μܓ1f z֭-dG&"y 0 @.X'<΋Bΐ9m}oUM=P̐gf>:háu#]@cKVHoLZa2GM=(ڴ{EM,pBowͼ%!!Q|݅ ﹶ\ܕL\A&D.مPeI _sXUKeq7xRM]aO%zsx Ow~@Zص!d|$b%cvjq5D[+&\D ;FESiu_<,Z_\HlNGV^L Kiʹmo9RPr|]\nBl^8 :szYV'ɽ!tƉv Dh KNL/B*LkVpֱ67)\\VN=M:z2 ,P Wb D'Dlrp(Բ4Sq-`x~f @:ǽ1ɛ9{r m1rx)mX$ƞ.3uwkm viRg*G17EdbJR>}35TU@*|-#@KVn,^%c[H.k1XoInhc_j{?9~}i_P\ QF٘฀u"fF搼H^7UhCr",1ɕ$gN8L`./b=ӵvq{MO@ !s4"\zу݃%dG?>sm@28zXf.=줌J9lVB ʸꁐ)J3=CqC*$/[ʜ Gz/ 6Yr*j֯x( / HVQvIĄq4ƫbfW}'lQ7#zC<6rj 7R?0v4R n6Uv˂C'g!3|^7Άyabo &q]:hb`?vk().l(l */S\#~\rA>OjL S½]ЁtfG8+{";7K|SbrfNzRZSW|Fxi~ E0~#SmbbXfq&XS"`^7{qVqZ7wyT#hV.AAK9rTcet^_ZC]'r S[$AG DķF/,;LJ 8S|θ؄W K*vOA3:[^%DF53SB37^ &Pݱ h3qՋ/Ƅ'V&X -BF-CLì^78|V=-jC ^$b//-`BW%1~rPh=5R$}2*xiD[ǃ(@-~(+ qac#,G1hL JĀ*c?U"d{C#4 ErhTQRANa/.HP XF<'Ma87oW; {X~&>s9 v#ÒRL`63}pnE9u a㬖:C7z0z$.SK5:w Y^HG+Ǒ/]2ГgV-jzQ.CPs;ВzZ-l)ի $i;`yZu؄pQ^{F`Օvf8gxWAW: gˌ,dHvT2Qc6Tp6y=|AADDҨck\A߾T%b?^^(h]GBfBtU`?km[|y #%qƸ*0oe&׏0d*QF4w͚JOstiIͮXzՌ&i h~Sa)DZ\īiA!7K+? (bnP%gFHkp|̠1lb$חPyu]LQj/ &ͩ`c9!Z:ز?Wi` }Ԗ`.TG+ÓyC999 ӋVOvS냼Yya2'J ʪli z\'"9h6[}JQ/safecopy-1.7/test/test7/test2.dat0000644000175100001440000004704011202053544016006 0ustar ravenusersiB֤/gW*WаQ2 UŶi jRT z.Bl#V'^mݙVͨ،Q!zUIznΛhdֵVtwPĹSp袆 ;k}w*E.Y* !FSΏ[¬9IFe0 oBv:C;}uLBNFQnfϑtdw_~E1N6/c5 >%"Y+mxU\K%WNa,ںgdT]`2xar2NPf *ȍLl>E\kX;/b П~aqi)!9ݬiI0 DQ =f4m3^`Z((]b17y[) `[pC5q GքIO}+DR!I;& SSLXW9-FnEEÊAOn>sE>E,jFe"x;#q/Bi(WwzEt54QR_%̳\J~ >RDDN'q[qptjE1 Kָ9a2Ѳ( yZ;{ݕBKu.|u6k3:]t#S8eb$ƦaѽS5IpGTo)ҽ9]XF,IX`48uj$ OQIZ=M MdSVsLi$v9Z`D +gal/)<8S]4ޯ  =j8hMcAq_rq5N2U/KIH%5}|I,F"v!*2U-;?9 U^zmŏYceװ6ۯ KP'f\D :]^G_y dr"~ n:Ϛa_p˩\I5HkspwZQ?MY)?_=P2ed!gaEqbdj!$i~%;"9Z5"+#Ω:gԷ|::a$rH^7L|ӣy%FJY,P"vU+nMg`XV_VLy2!%P, 79F1Q{>c̨|0b$ET;Oj0 MddWI|jͱBKKXD+5;\FժZig YfLX^2d.W6yL#Z%yڢwoSV%؂=L(#["*S mo)Knjd-o[5!m0':K׹Rz(QMHJ < xeP3f_~Ɯf 2Mtz'7L%5<44[(WhD՛RX[:Lo!{*YŞc,2EWCr@ ݾ7&|%5e+f]MlB_93,HBg11>o~2@)⣲;u[*#ZI(պ\1JSg|!7d Gr|=tƢ\7s,gP"qﺚadkn@5Om n73xmJ|vCEmdiOwf^lҩf\+7VNPmR.VKa:61գ8 H.r+qvp1Zu/Yh.jMڈ)[]];Ľ4X(wf\`?c tتldnaƕ4|lI樟ԠCvr̍#,Edҧd L3ɵ}^}Y$߯pYk= ZB+ۮ:9c@˞MG<Kх4ש{] Tb_GU\*e0.OZ^Ϡ:-5aEё)ȌQ@sPB;ڼSv(Ƽfu%uVTLHMx2ԪO_ZOf$HEF :0á2YP Z7i'f>8 !J+^[zQ%zw:(bδͿ%MkI]"Eq7\/$E#e|yfPɕm$=R ~ҕj3܄Q>!GPFSO[יf"! jYp|䒂h/~|o!<!XPΙSgWZg #Xzўcb-]TŁ EţμgxU'C#)/Ǖ|҉l[Wy7a}৔ ^OH6eMӂܠ9q`=KuE7lCG2;XI9s 9!2-}5L)fKn;VVHtg_ 4\#;[“ɷ[>>֍[gȥx"ӟN/SbzL専C3$Wks+kvݹGNvzɰ|)|2+ҫ#G/Dj#Xf`F 0D><ŽKFGXw ]:gy(B#D?/jwIfd0)_}\SKAVU%gB\Z9C) *d8#=؎s,KSn,th߃w$`KH|OvRwnzClNMq==3/Tp%\s:ɏ?W}ϵ91H%2̂07<UdJkV0kcyOZ#ܔO6N9x9hhKpSk 4ލ['Q_>I(Cy~қ}}SZ5!&3l/e蘸!T<*"0ԁ@vLsGR5wwG]4M` _%S50,O UI^|XLiBooc&Xfv16_N"ْEnM}K IYrQ~Zf`iQӢKџ! 󴗝Mq҄ rQ#V ,TU'(-b3ѳwkGoV!|0`U 3:~׶[z)xY^^v>Gp{ۢI G}àsn͟_WlpO b r҄@"hv8D4F!o<|S08c tih%aG:hDSS]U1yr$:ʜ]d\;A:ICTZvMt5Ӏhz4{ MAn{+(UIe[$j7M:Ak߮w s "tg瘰 R\l*<8Rq [.28 AES NrF0m@a :?DyQ1jLPugc9fIRY8{>^n#V u]*,tV-F8W 0Pܽxʌ}F<.#+A"+Y470gYϸHT{q޸ʧH_)8xW65[X9SLIaWMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAqs[Y;w-f:v;a"&}P8mVmꡊRq?mGвd9X3& L,bRѶqJяT^̭ai0&VkqۗjBx Eҏ;GmV؂%h Ρ+3os pYy盫G ~HR;o>j&mXO2^ͦ0EOq5P`;D 󲃐'B>a0.8/[B LÒ#{l0>μܓ1f z֭-dG&"y 0 @.X'<΋Bΐ9m}oUM=P̐gf>:háu#]@cKVHoLZa2GM=(ڴ{EM,pBowͼ%!!Q|݅ ﹶ\ܕL\A&D.مPeI _sXUKeq7xRM]aO%zsx Ow~@Zص!d|$b%cvjq5D[+&\D ;FESiu_<,Z_\HlNGV^L Kiʹmo9RPr|]\nBl^8 :szYV'ɽ!tƉv Dh KNL/B*LkVpֱ67)\\VN=M:z2 ,P Wb D'Dlrp(Բ4Sq-`x~f @:ǽ1ɛ9{r m1rx)mX$ƞ.3uwkm viRg*G17EdbJR>}35TU@*|-#@KVn,^%c[H.k1XoInhc_j{?9~}i_P\ QF٘฀u"fF搼H^7UhCr",1ɕ$gN8L`./b=ӵvq{MO@ !s4"\zу݃%dG?>sm@28zXf.=줌J9lVB ʸꁐ)J3=CqC*$/[ʜ Gz/ 6Yr*j֯x( / HVQvIĄq4ƫbfW}'lQ7#zC<6rj 7R?0v4R n6Uv˂C'g!3|^7Άyabo &q]:hb`?vk().l(l */S\#~\rA>OjL S½]ЁtfG8+{";7K|SbrfNzRZSW|Fxi~ E0~#SmbbXfq&XS"`^7{qVqZ7wyT#hV.AAK9rTcet^_ZC]'r S[$AG DķF/,;LJ 8S|θ؄W K*vOA3:[^%DF53SB37^ &Pݱ h3qՋ/Ƅ'V&X -BF-CLì^78|V=-jC ^$b//-`BW%1~rPh=5R$}2*xiD[ǃ(@-~(+ qac#,G1hL JĀ*c?U"d{C#4 ErhTQRANa/.HP XF<'Ma87oW; {X~&>s9 v#ÒRL`63}pnE9u a㬖:C7z0z$.SK5:w Y^HG+Ǒ/]2ГgV-jzQ.CPs;ВzZ-l)ի $i;`yZu؄pQ^{F`Օvf8gxWAW: gˌ,dHvT2Qc6Tp6y=|AADDҨck\A߾T%b?^^(h]GBfBtU`?km[|y #%qƸ*0oe&׏0d*QF4w͚JOstiIͮXzՌ&i h~Sa)DZ\īiA!7K+? (bnP%gFHkp|̠1lb$חPyu]LQj/ &ͩ`c9!Z:ز?Wi` }Ԗ`.TG+ÓyC999 ӋVOvS냼Yya2'J ʪli z\'"9h6[}JQ/safecopy-1.7/test/test7/test.dat0000644000175100001440000004704011202053544015724 0ustar ravenusersiB֤/gW*WаQ2 UŶi jRT z.Bl#V'^mݙVͨ،Q!zUIznΛhdֵVtwPĹSp袆 ;k}w*E.Y* !FSΏ[¬9IFe0 oBv:C;}uLBNFQnfϑtdw_~E1N6/c5 >%"Y+mxU\K%WNa,ںgdT]`2xar2NPf *ȍLl>E\kX;/b П~aqi)!9ݬiI0 DQ =f4m3^`Z((]b17y[) `[pC5q GքIO}+DR!I;& SSLXW9-FnEEÊAOn>sE>E,jFe"x;#q/Bi(WwzEt54QR_%̳\J~ >RDDN'q[qptjE1 Kָ9a2Ѳ( yZ;{ݕBKu.|u6k3:]t#S8eb$ƦaѽS5IpGTo)ҽ9]XF,IX`48uj$ OQIZ=M MdSVsLi$v9Z`D +gal/)<8S]4ޯ  =j8hMcAq_rq5N2U/KIH%5}|I,F"v!*2U-;?9 U^zmŏYceװ6ۯ KP'f\D :]^G_y dr"~ n:Ϛa_p˩\I5HkspwZQ?MY)?_=P2ed!gaEqbdj!$i~%;"9Z5"+#Ω:gԷo!V Hu7H&jOu;ߗZӻFv;y0hjv]/؋Vшo!z`*9(3Qo9ZyoCE{2|XH,7\/2mQo4{ 3aLgvfE1Q uKJF~%o + INԖQeļ{zŵPOϺ}L: r=k~וLݸ QZ씝+]fkj KL'ʟ<<' Zi+{8l]nf+oYIo G{o>w i~ ь.\ ('d ʚ&kаH5Yzx8rl9o.&`J'}'` g˺Pj[xv5@zHp_J[!4C T0؆fo}*]<)yjŞuOtX)k=6s9s^gGܬZ~t­ϰȓ%L쭦$$ )01qk_gD>iXZQ\RB ˜ hLZ0g u5W1*+Ńn^W!ٴ^Z7p`%60^{rb]~]LrXm&{%X&I˚H:T-}Iex`հ]$GNX7HF\͔)YZ/+W1Q?(XŖb/΂ iYԛ#A+d֟iE5]pT{Rd܅7^,iu:deIaۜ ŌDcXZmAd@K&iv02}d"ŭ #tAmaAU^޽Oɵie2Kf3Ĝ_U6٣|nzAI7f H\~}z#Tu։QGuIʙۺwgʽf-'P%)韻gq7Ԅ8ĸf,@;0_ǐ2;T̯ڀ IŝbO2=~?99 r(5Z61U:50u٩6Bceʤ@ sddsv~s6O/QVK\bue7;I 1,<{8{uʑ8>˰IyVBĆ o6m>1O̳:B=vԦ/v!k5euU-ڌ'sKˇPsƨvl: 1]έA#z4:L-hP3IR 266vs܌3xw3Nta2Bɓmkڬu2Q>r536h80ͯpW yeJVmq M꺠U)$eBtpp`wYڣ3sJ$\* HAA!Ll z|?pz9Ruks @8{S/NK0d[Nߢ }wXc'/ Xv& ؘr<"S!}Q_D-Cc+HgG. ?<4NDzd3Piȉۓ"Tq>=׬ x5D ~)1+1Hn>>(z@ -#Qb! sBv )A1 2up<ӨJl pS"N3%RX5LGY*< 3u"o*Xfod666>Rd^ˡp UF~+`7o8] u|Ri/V$az =h˻~4}:e&I8Mf\ˋ'd=}BkrDg^2JD 5EEjTWN-jcq^%%vvrO7e! )hئ?CCYr1&ZP*hq!Sψa.)w~=Q숽@MzgYAkZK/Dݱ9nnǗcwua;d^e9 ]zkydC+\UofHtQ{fʓPY2$DoB(]'hmW0K5E$0řJ}íSg; ,7XdVw ~rNZҊ|yd Kә*ޯųOEZôH3 jżYiűM򱏯ns3ǂl`He U}E׎,!c1cӤ`AQ]`0K˒lXqS>|::a$rH^7L|ӣy%FJY,P"vU+nMg`XV_VLy2!%P, 79F1Q{>c̨|0b$ET;Oj0 MddWI|jͱBKKXD+5;\FժZig YfLX^2d.W6yL#Z%yڢwoSV%؂=L(#["*S mo)Knjd-o[5!m0':K׹Rz(QMHJ < xeP3f_~Ɯf 2Mtz'7L%5<44[(WhD՛RX[:Lo!{*YŞc,2EWCr@ ݾ7&|%5e+f]MlB_93,HBg11>o~2@)⣲;u[*#ZI(պ\1JSg|!7d Gr|=tƢ\7s,gP"qﺚadkn@5Om n73xmJ|vCEmdiOwf^lҩf\+7VNPmR.VKa:61գ8 H.r+qvp1Zu/Yh.jMڈ)[]];Ľ4X(wf\`?c tتldnaƕ4|lI樟ԠCvr̍#,Edҧd L3ɵ}^}Y$߯pYk= ZB+ۮ:9c@˞MG<Kх4ש{] Tb_GU\*e0.OZ^Ϡ:-5aEё)ȌQ@sPB;ڼSv(Ƽfu%uVTLHMx2ԪO_ZOf$HEF :0á2YP Z7i'f>8 !J+^[zQ%zw:(bδͿ%MkI]"Eq7\/$E#e|yfPɕm$=R ~ҕj3܄Q>!GPFSO[יf"! jYp|䒂h/~|o!<!XPΙSgWZg #Xzўcb-]TŁ EţμgxU'C#)/Ǖ|҉l[Wy7a}৔ ^OH6eMӂܠ9q`=KuE7lCG2;XI9s 9!2-}5L)fKn;VVHtg_ 4\#;[“ɷ[>>֍[gȥx"ӟN/SbzL専C3$Wks+kvݹGNvzɰ|)|2+ҫ#G/Dj#Xf`F 0D><ŽKFGXw ]:gy(B#D?/jwIfd0)_}\SKAVU%gB\Z9C) *d8#=؎s,KSn,th߃w$`KH|OvRwnzClNMq==3/Tp%\s:ɏ?W}ϵ91H%2̂07<UdJkV0kcyOZ#ܔO6N9x9hhKpSk 4ލ['Q_>I(Cy~қ}}SZ5!&3l/e蘸!T<*"0ԁ@vLsGR5wwG]4M` _%S50,O UI^|XLiBooc&Xfv16_N"ْEnM}K IYrQ~Zf`iQӢKџ! 󴗝Mq҄ rQ#V ,TU'(-b3ѳwkGoV!|0`U 3:~׶[z)xY^^v>Gp{ۢI G}àsn͟_WlpO b r҄@"hv8D4F!o<|S08c tih%aG:hDSS]U1yr$:ʜ]d\;A:ICTZvMt5Ӏhz4{ MAn{+(UIe[$j7M:Ak߮w s "tg瘰 R\l*<8Rq [.28 AES NrF0m@a :?DyQ1jLPugc9fIRY8{>^n#V u]*,tV-F8W 0Pܽxʌ}F<.#+A"+Y470gYϸHT{q޸ʧH_)8xW65[X9SLIaW]я%}"$l#eV#f~!t3[$knZ-a1k]~n|=ΦoN^S;Ǎ5lDm Da4Eޜ۱|!#E*VwEr2JsbY6h٧ވ'Q|ӟg' A_[^Q_ZO<;FvWƿK,* ÆiNO%H_% uw *Ӗ hЪ7PPXT}woNm3gMu\-q3j%IH cpQwm,fs4ޏDj3l^"w\'6El[Ĥx;=))M@[$l{VA4-6Rd/y'|Z{2VtkҀӽP!SH]暵(3r"dkʨsl7|LfEuiϒt)3=X}ׅ xG HϞ\2׹ݺmZ"' ݰsd~gv=OSRhf^l4&.:(-]3}' zI63;BOOr:/bxpKoM0#`:y9A{:tV7g*W_(D@ës'\mXI=FeH$ڳ*k"w&x')mj@'<{no)5p-pT[4md!r!ڡ77leG22_;kV*ej=Yb"^ҪNdfWY*~}z$*,O!~zlV޺#A~ \eVj-6n•|bzDm.5n x"n f;6*lNm" &a ~)}6ďW@̍XfQ݋^?YrPp;BŒ6P)*K]n)G :V?5%C%}sw6'̽Ilgg=L{%2cͣ D-J1X!3.5s*Ga:4@^WoRF쩶k G_X.d3H+\Ϸ[[fύI)o;/՘co\20.1Û|NGUJt5'wS8-rӈ~)[r14/n,~ #5^uX¹6QyrB-z6a8y K6Wqӝ4`q0 ;ؿQJ]rQI"䞽]N._; [}_VEPLb'3R*=iW+.EҎV;-TCC^go?ҍT~_]rKGT4  #D!)TS|_Jl-8~,iB0֧e)݉ӎҞ%`dzNށV,Hs6 s-4iy:`( ר"eAFl>Yk;ZTvx\\ ?, xr@!Iu7n 1O/*XMφ7\ֶ7>$U`u7" NjW{6rQm~29 Ե*tM@9Pƙyx+=<}h0IHŻk`u:E>֣7"(ZFH;3]rtv[:6WBM!ӎܨ?3_mJd 1^лZ~0N͉#͉vgoT^KRc@6WLSoɓNul2Ju( \Orᩝ`zDv,rA'i Eۢ[ f]bmr>EM!up4[3"@=_rݵ?[ .iҭ9:)5%_KհYskBN ` ~!Ô>ǿhcNoU<D,O:,0o.P|;: 1drRhuFAz˜N]C|݉z?ND4'WmbngUTKF;3dBjg5>*=8'eI§3<yKĹ24H}y\Txi֛g+/u3TEB+Ci39}S}gN᜗Ь/m٠{sE[eS=p>1#;`jzhd-~}0DAFbvݓgQ`aV݄!OeDy>Fd$h{kC%dO}$N乪ko={? 6-<#ouagj୭E3V BՙR,gg0#I\ ,'n' *Ba SZ?6 Fg3IуbAٴQ"s#NBa fK#/hBu2g9Z+}(8x&rK?=- P[m}1ύ85MX=jS@6>K\l{Ə/ +An]~ɧgrUf_8>3 #V0ѓ5mTT> FzV2F6Kݢ7]C0'RΜS,u{ɞR8˧ɞ 9~Fz..Us&}&{|Md5%஌muWryp :6-RN FҭyQv1jʧJt!&͏[0̩h6é1ݘY|~|s/M5Ǽ8=aXh+? S TpUV!jpւ#怒WvkEm'T=ɉ]q_^ZKs*w=[\N-YAͨ됆*kkIl؍LȶZ6ABCy& >C~ncv#u@P{ʸ S}'d>(JtۑV,%UfxgYRFRMTz爖YSQA9%պ27fL#_ l[y5m(cRW;>S-9ȣu &zה+)+&̙dfH;ٌ?p%ak:Fh #,yɫ)hƖBG'SFt4JQ@l$#7gmpJmeDowRSƊ\D8`-)l[j?=H~PfI^?!{]PnCHJم_iCoT M2FmG|Yq`iFq#P8()s*ӡ#P#g/)_o[Y{4VDQU^_+#4[2}:9z^)3%9rC=0apԵT!Xgy HgJseI饵V7i`CVc.T"m @» T⎡%1iP`*|2R[M=F^󦅕*J +:B w&1qu%xH \۞0Ba65|X=a/s@[-1_DkLUFDAjiREXSewlhpX9hl>kE6D:5cE QNk'(GE![5\ͱ,U?oxG.,i'kYLftROPQAd>N>[+Jo6c U}YƔXɬڋ-S~u=~JhtjIRzB=:2E!Ura j NH<ě=H_yD[S^S zxQX/L9FS~*!!SZ`\CNts/k>\~L pi:>qD(U54%t,?[w:[:2W y!ȟ!)T3E*AG|2mbui7p_FG%<l>DX3'!GPqbM a$09:҈%*#Z&RQhPjyr5 rV -BwaG=Kk1bBS u/0YY 0eF1~8n{@pHKwq[bᬑ$"ɖ^~MTËLQXDxP?LL%}=jce'X6ш|I|ٷ A_=z׆ZY{6umY1 Npi թHNJn0EܬƟP(ne19Rdlx=CY N{pddKH ۖ>/WlP&XXMWO3!Ŝ1,;%1J$և`G&i͒JVj_@r# Mn+EKnYD)Fn[0u,zA)=$ 1᥃X">&D_菶ߩ,wm6 ̮8Avp#MnX*e Ɩ9Ĺ{xX01B9QvoOG ~CQT2]#9Ai(: "r&,m2i Ipa"#D>;s&#I\lDPEEm,nLR@j!& mE>eN-y?TYi_9}t6"F=@(@=8-2Zvg&['Nǹ " c|c$h5|pnL i_0i2[֛ZQJUTweU, A8d)M<#Yo/"Y w6. ݣz``-dNy&As]DFAԩT k3cvCUHH zvv@]90C&$7jyf??vgBGAÙg'N-mqN:t`KEkC7}eΉr6}PL2zӆq&͛mI4/zMjmE091gE 7Ý%a{a\Id@SS =^3{g@НVY>!y@oߏ=`NJnh(~ N7-fG)m"0zi!G٦X/atr:[!1\by1K+>8y_xzXd>[Κ?e k85$=- e/~f׭}@H20qs[Y;w-f:v;a"&}P8mVmꡊRq?mGвd9X3& L,bRѶqJяT^̭ai0&VkqۗjBx Eҏ;GmV؂%h Ρ+3os pYy盫G ~HR;o>j&mXO2^ͦ0EOq5P`;D 󲃐'B>a0.8/[B LÒ#{l0>μܓ1f z֭-dG&"y 0 @.X'<΋Bΐ9m}oUM=P̐gf>:háu#]@cKVHoLZa2GM=(ڴ{EM,pBowͼ%!!Q|݅ ﹶ\ܕL\A&D.مPeI _sXUKeq7xRM]aO%zsx Ow~@Zص!d|$b%cvjq5D[+&\D ;FESiu_<,Z_\HlNGV^L Kiʹmo9RPr|]\nBl^8 :szYV'ɽ!tƉv Dh KNL/B*LkVpֱ67)\\VN=M:z2 ,P Wb D'Dlrp(Բ4Sq-`x~f @:ǽ1ɛ9{r m1rx)mX$ƞ.3uwkm viRg*G17EdbJR>}35TU@*|-#@KVn,^%c[H.k1XoInhc_j{?9~}i_P\ QF٘฀u"fF搼H^7UhCr",1ɕ$gN8L`./b=ӵvq{MO@ !s4"\zу݃%dG?>sm@28zXf.=줌J9lVB ʸꁐ)J3=CqC*$/[ʜ Gz/ 6Yr*j֯x( / HVQvIĄq4ƫbfW}'lQ7#zC<6rj 7R?0v4R n6Uv˂C'g!3|^7Άyabo &q]:hb`?vk().l(l */S\#~\rA>OjL S½]ЁtfG8+{";7K|SbrfNzRZSW|Fxi~ E0~#SmbbXfq&XS"`^7{qVqZ7wyT#hV.AAK9rTcet^_ZC]'r S[$AG DķF/,;LJ 8S|θ؄W K*vOA3:[^%DF53SB37^ &Pݱ h3qՋ/Ƅ'V&X -BF-CLì^78|V=-jC ^$b//-`BW%1~rPh=5R$}2*xiD[ǃ(@-~(+ qac#,G1hL JĀ*c?U"d{C#4 ErhTQRANa/.HP XF<'Ma87oW; {X~&>s9 v#ÒRL`63}pnE9u a㬖:C7z0z$.SK5:w Y^HG+Ǒ/]2ГgV-jzQ.CPs;ВzZ-l)ի $i;`yZu؄pQ^{F`Օvf8gxWAW: gˌ,dHvT2Qc6Tp6y=|AADDҨck\A߾T%b?^^(h]GBfBtU`?km[|y #%qƸ*0oe&׏0d*QF4w͚JOstiIͮXzՌ&i h~Sa)DZ\īiA!7K+? (bnP%gFHkp|̠1lb$חPyu]LQj/ &ͩ`c9!Z:ز?Wi` }Ԗ`.TG+ÓyC999 ӋVOvS냼Yya2'J ʪli z\'"9h6[}JQ/safecopy-1.7/test/test7/test3.dat0000644000175100001440000004704011202053544016007 0ustar ravenusersiB֤/gW*WаQ2 UŶi jRT z.Bl#V'^mݙVͨ،Q!zUIznΛhdֵVtwPĹSp袆 ;k}w*E.Y* !FSΏ[¬9IFe0 oBv:C;}uLBNFQnfϑtdw_~E1N6/c5 >%"Y+mxU\K%WNa,ںgdT]`2xar2NPf *ȍLl>E\kX;/b П~aqi)!9ݬiI0 DQ =f4m3^`Z((]b17y[) `[pC5q GքIO}+DR!I;& SSLXW9-FnEEÊAOn>sE>E,jFe"x;#q/Bi(WwzEt54QR_%̳\J~ >RDDN'q[qptjE1 Kָ9a2Ѳ( yZ;{ݕBKu.|u6k3:]t#S8eb$ƦaѽS5IpGTo)ҽ9]XF,IX`48uj$ OQIZ=M MdSVsLi$v9Z`D +gal/)<8S]4ޯ  =j8hMcAq_rq5N2U/KIH%5}|I,F"v!*2U-;?9 U^zmŏYceװ6ۯ KP'f\D :]^G_y dr"~ n:Ϛa_p˩\I5HkspwZQ?MY)?_=P2ed!gaEqbdj!$i~%;"9Z5"+#Ω:gԷ|::a$rH^7L|ӣy%FJY,P"vU+nMg`XV_VLy2!%P, 79F1Q{>c̨|0b$ET;Oj0 MddWI|jͱBKKXD+5;\FժZig YfLX^2d.W6yL#Z%yڢwoSV%؂=L(#["*S mo)Knjd-o[5!m0':K׹Rz(QMHJ < xeP3f_~Ɯf 2Mtz'7L%5<44[(WhD՛RX[:Lo!{*YŞc,2EWCr@ ݾ7&|%5e+f]MlB_93,HBg11>o~2@)⣲;u[*#ZI(պ\1JSg|!7d Gr|=tƢ\7s,gP"qﺚadkn@5Om n73xmJ|vCEmdiOwf^lҩf\+7VNPmR.VKa:61գ8 H.r+qvp1Zu/Yh.jMڈ)[]];Ľ4X(wf\`?c tتldnaƕ4|lI樟ԠCvr̍#,Edҧd L3ɵ}^}Y$߯pYk= ZB+ۮ:9c@˞MG<Kх4ש{] Tb_GU\*e0.OZ^Ϡ:-5aEё)ȌQ@sPB;ڼSv(Ƽfu%uVTLHMx2ԪO_ZOf$HEF :0á2YP Z7i'f>8 !J+^[zQ%zw:(bδͿ%MkI]"Eq7\/$E#e|yfPɕm$=R ~ҕj3܄Q>!GPFSO[יf"! jYp|䒂h/~|o!<!XPΙSgWZg #Xzўcb-]TŁ EţμgxU'C#)/Ǖ|҉l[Wy7a}৔ ^OH6eMӂܠ9q`=KuE7lCG2;XI9s 9!2-}5L)fKn;VVHtg_ 4\#;[“ɷ[>>֍[gȥx"ӟN/SbzL専C3$Wks+kvݹGNvzɰ|)|2+ҫ#G/Dj#Xf`F 0D><ŽKFGXw ]:gy(B#D?/jwIfd0)_}\SKAVU%gB\Z9C) *d8#=؎s,KSn,th߃w$`KH|OvRwnzClNMq==3/Tp%\s:ɏ?W}ϵ91H%2̂07<UdJkV0kcyOZ#ܔO6N9x9hhKpSk 4ލ['Q_>I(Cy~қ}}SZ5!&3l/e蘸!T<*"0ԁ@vLsGR5wwG]4M` _%S50,O UI^|XLiBooc&Xfv16_N"ْEnM}K IYrQ~Zf`iQӢKџ! 󴗝Mq҄ rQ#V ,TU'(-b3ѳwkGoV!|0`U 3:~׶[z)xY^^v>Gp{ۢI G}àsn͟_WlpO b r҄@"hv8D4F!o<|S08c tih%aG:hDSS]U1yr$:ʜ]d\;A:ICTZvMt5Ӏhz4{ MAn{+(UIe[$j7M:Ak߮w s "tg瘰 R\l*<8Rq [.28 AES NrF0m@a :?DyQ1jLPugc9fIRY8{>^n#V u]*,tV-F8W 0Pܽxʌ}F<.#+A"+Y470gYϸHT{q޸ʧH_)8xW65[X9SLIaWMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBA JpwO^01$z=sXKJuP?J5L=P}}?:6sѡOю|wN¬۪QT.ڭj<āaf̓ӭ1U8jok|d(DSSޱ{%&*w$y+ty%>YRFRMTz爖YSQA9%պ27fL#_ l[y5m(cRW;>S-9ȣu &zה+)+&̙dfH;ٌ?p%ak:Fh #,yɫ)hƖBG'SFt4JQ@l$#7gmpJmeDowRSƊ\D8`-)l[j?=H~PfI^?!{]PnCHJم_iCoT M2FmG|Yq`iFq#P8()s*ӡ#P#g/)_o[Y{4VDQU^_+#4[2}:9z^)3%9rC=0apԵT!Xgy HgJseI饵V7i`CVc.T"m @» T⎡%1iP`*|2R[M=F^󦅕*J +:B w&1qu%xH \۞0Ba65|X=a/s@[-1_DkLUFDAjiREXSewlhpX9hl>kE6D:5cE QNk'(GE![5\ͱ,U?oxG.,i'kYLftROPQAd>N>[+Jo6c U}YƔXɬڋ-S~u=~JhtjIRzB=:2E!Ura j NH<ě=H_yD[S^S zxQX/L9FS~*!!SZ`\CNts/k>\~L pi:>qD(U54%t,?[w:[:2W y!ȟ!)T3E*AG|2mbui7p_FG%<l>DX3'!GPqbM a$09:҈%*#Z&RQhPjyr5 rV -BwaG=Kk1bBS u/0YY 0eF1~8n{@pHKwq[bᬑ$"ɖ^~MTËLQXDxP?LL%}=jce'X6ш|I|ٷ A_=z׆ZY{6umY1 Npi թHNJn0EܬƟP(ne19Rdlx=CY N{pddKH ۖ>/WlP&XXMWO3!Ŝ1,;%1J$և`G&i͒JVj_@r# Mn+EKnYD)Fn[0u,zA)=$ 1᥃X">&D_菶ߩ,wm6 ̮8Avp#MnX*e Ɩ9Ĺ{xX01B9QvoOG ~CQT2]#9Ai(: "r&,m2i Ipa"#D>;s&#I\lDPEEm,nLR@j!& mE>eN-y?TYi_9}t6"F=@(@=8-2Zvg&['Nǹ " c|c$h5|pnL i_0i2[֛ZQJUTweU, A8d)M<#Yo/"Y w6. ݣz``-dNy&As]DFAԩT k3cvCUHH zvv@]90C&$7jyf??vgBGAÙg'N-mqN:t`KEkC7}eΉr6}PL2zӆq&͛mI4/zMjmE091gE 7Ý%a{a\Id@SS =^3{g@НVY>!y@oߏ=`NJnh(~ N7-fG)m"0zi!G٦X/atr:[!1\by1K+>8y_xzXd>[Κ?e k85$=- e/~f׭}@H20qs[Y;w-f:v;a"&}P8mVmꡊRq?mGвd9X3& L,bRѶqJяT^̭ai0&VkqۗjBx Eҏ;GmV؂%h Ρ+3os pYy盫G ~HR;o>j&mXO2^ͦ0EOq5P`;D 󲃐'B>a0.8/[B LÒ#{l0>μܓ1f z֭-dG&"y 0 @.X'<΋Bΐ9m}oUM=P̐gf>:háu#]@cKVHoLZa2GM=(ڴ{EM,pBowͼ%!!Q|݅ ﹶ\ܕL\A&D.مPeI _sXUKeq7xRM]aO%zsx Ow~@Zص!d|$b%cvjq5D[+&\D ;FESiu_<,Z_\HlNGV^L Kiʹmo9RPr|]\nBl^8 :szYV'ɽ!tƉv Dh KNL/B*LkVpֱ67)\\VN=M:z2 ,P Wb D'Dlrp(Բ4Sq-`x~f @:ǽ1ɛ9{r m1rx)mX$ƞ.3uwkm viRg*G17EdbJR>}35TU@*|-#@KVn,^%c[H.k1XoInhc_j{?9~}i_P\ QF٘฀u"fF搼H^7UhCr",1ɕ$gN8L`./b=ӵvq{MO@ !s4"\zу݃%dG?>sm@28zXf.=줌J9lVB ʸꁐ)J3=CqC*$/[ʜ Gz/ 6Yr*j֯x( / HVQvIĄq4ƫbfW}'lQ7#zC<6rj 7R?0v4R n6Uv˂C'g!3|^7Άyabo &q]:hb`?vk().l(l */S\#~\rA>OjL S½]ЁtfG8+{";7K|SbrfNzRZSW|Fxi~ E0~#SmbbXfq&XS"`^7{qVqZ7wyT#hV.AAK9rTcet^_ZC]'r S[$AG DķF/,;LJ 8S|θ؄W K*vOA3:[^%DF53SB37^ &Pݱ h3qՋ/Ƅ'V&X -BF-CLì^78|V=-jC ^$b//-`BW%1~rPh=5R$}2*xiD[ǃ(@-~(+ qac#,G1hL JĀ*c?U"d{C#4 ErhTQRANa/.HP XF<'Ma87oW; {X~&>s9 v#ÒRL`63}pnE9u a㬖:C7z0z$.SK5:w Y^HG+Ǒ/]2ГgV-jzQ.CPs;ВzZ-l)ի $i;`yZu؄pQ^{F`Օvf8gxWAW: gˌ,dHvT2Qc6Tp6y=|AADDҨck\A߾T%b?^^(h]GBfBtU`?km[|y #%qƸ*0oe&׏0d*QF4w͚JOstiIͮXzՌ&i h~Sa)DZ\īiA!7K+? (bnP%gFHkp|̠1lb$חPyu]LQj/ &ͩ`c9!Z:ز?Wi` }Ԗ`.TG+ÓyC999 ӋVOvS냼Yya2'J ʪli z\'"9h6[}JQ/safecopy-1.7/test/test7/test1.badblocks0000644000175100001440000000003511202053544017152 0ustar ravenusers1 2 3 4 7 8 9 10 11 12 13 14 safecopy-1.7/test/test7/test6.dat0000644000175100001440000004704011202053544016012 0ustar ravenusersiB֤/gW*WаQ2 UŶi jRT z.Bl#V'^mݙVͨ،Q!zUIznΛhdֵVtwPĹSp袆 ;k}w*E.Y* !FSΏ[¬9IFe0 oBv:C;}uLBNFQnfϑtdw_~E1N6/c5 >%"Y+mxU\K%WNa,ںgdT]`2xar2NPf *ȍLl>E\kX;/b П~aqi)!9ݬiI0 DQ =f4m3^`Z((]b17y[) `[pC5q GքIO}+DR!I;& SSLXW9-FnEEÊAOn>sE>E,jFe"x;#q/Bi(WwzEt54QR_%̳\J~ >RDDN'q[qptjE1 Kָ9a2Ѳ( yZ;{ݕBKu.|u6k3:]t#S8eb$ƦaѽS5IpGTo)ҽ9]XF,IX`48uj$ OQIZ=M MdSVsLi$v9Z`D +gal/)<8S]4ޯ  =j8hMcAq_rq5N2U/KIH%5}|I,F"v!*2U-;?9 U^zmŏYceװ6ۯ KP'f\D :]^G_y dr"~ n:Ϛa_p˩\I5HkspwZQ?MY)?_=P2ed!gaEqbdj!$i~%;"9Z5"+#Ω:gԷ˰IyVBĆ o6m>1O̳:B=vԦ/v!k5euU-ڌ'sKˇPsƨvl: 1]έA#z4:L-hP3IR 266vs܌3xw3Nta2Bɓmkڬu2Q>r536h80ͯpW yeJVmq M꺠U)$eBtpp`wYڣ3sJ$\* HAA!Ll z|?pz9@ -#Qb! sBv )A1 2up<ӨJl pS"N3%RX5LGY*< 3u"o*Xfod666>Rd^ˡp UF~+`7o8] u|Ri/V$az =h˻~4}:e&I8Mf\ˋ'd=}BkrDg^2JD 5EEjTWN-jcq^%%vvrO7e! )hئ?CCYr1&ZP*hq!Sψa.)w~=Q숽@MzgYAkZK/Dݱ9nnǗcwua;d^e9 ]zkydC+\UofHtQ{fʓPY2$DoB(]'hmW0K5E$0řJ}íSg; ,7XdVw ~rNZҊ|yd Kә*ޯųOEZôH3 jżYiűM򱏯ns3ǂl`He U}E׎,!c1cӤ`AQ]`0K˒lXqS>|::a$rH^7L|ӣy%FJY,P"vU+nMg`XV_VLy2!%P, 79F1Q{>c̨|0b$ET;Oj0 MddWI|jͱBKKXD+5;\FժZig YfLX^2d.W6yL#Z%yڢwoSV%؂=L(#["*S mo)Knjd-o[5!m0':K׹Rz(QMHJ < xeP3f_~Ɯf 2Mtz'7L%5<44[(WhD՛RX[:Lo!{*YŞc,2EWCr@ ݾ7&|%5e+f]MlB_93,HBg11>o~2@)⣲;u[*#ZI(պ\1JSg|!7d Gr|=tƢ\7s,gP"qﺚadkn@5Om n73xmJ|vCEmdiOwf^lҩf\+7VNPmR.VKa:61գ8 H.r+qvp1Zu/Yh.jMڈ)[]];Ľ4X(wf\`?c tتldnaƕ4|lI樟ԠCvr̍#,Edҧd L3ɵ}^}Y$߯pYk= ZB+ۮ:9c@˞MG<Kх4ש{] Tb_GU\*e0.OZ^Ϡ:-5aEё)ȌQ@sPB;ڼSv(Ƽfu%uVTLHMx2ԪO_ZOf$HEF :0á2YP Z7i'f>8 !J+^[zQ%zw:(bδͿ%MkI]"Eq7\/$E#e|yfPɕm$=R ~ҕj3܄Q>!GPFSO[יf"! jYp|䒂h/~|o!<!XPΙSgWZg #Xzўcb-]TŁ EţμgxU'C#)/Ǖ|҉l[Wy7a}৔ ^OH6eMӂܠ9q`=KuE7lCG2;XI9s 9!2-}5L)fKn;VVHtg_ 4\#;[“ɷ[>>֍[gȥx"ӟN/SbzL専C3$Wks+kvݹGNvzɰ|)|2+ҫ#G/Dj#Xf`F 0D><ŽKFGXw ]:gy(B#D?/jwIfd0)_}\SKAVU%gB\Z9C) *d8#=؎s,KSn,th߃w$`KH|OvRwnzClNMq==3/Tp%\s:ɏ?W}ϵ91H%2̂07<UdJkV0kcyOZ#ܔO6N9x9hhKpSk 4ލ['Q_>I(Cy~қ}}SZ5!&3l/e蘸!T<*"0ԁ@vLsGR5wwG]4M` _%S50,O UI^|XLiBooc&Xfv16_N"ْEnM}K IYrQ~Zf`iQӢKџ! 󴗝Mq҄ rQ#V ,TU'(-b3ѳwkGoV!|0`U 3:~׶[z)xY^^v>Gp{ۢI G}àsn͟_WlpO b r҄@"hv8D4F!o<|S08c tih%aG:hDSS]U1yr$:ʜ]d\;A:ICTZvMt5Ӏhz4{ MAn{+(UIe[$j7M:Ak߮w s "tg瘰 R\l*<8Rq [.28 AES NrF0m@a :?DyQ1jLPugc9fIRY8{>^n#V u]*,tV-F8W 0Pܽxʌ}F<.#+A"+Y470gYϸHT{q޸ʧH_)8xW65[X9SLIaWMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMAMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMAMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBA/M5Ǽ8=aXh+? S TpUV!jpւ#怒WvkEm'T=ɉ]q_^ZKs*w=[\N-YAͨ됆*kkIl؍LȶZ6ABCy& >C~ncv#u@P{ʸ S}'d>(JtۑV,%UfxgYRFRMTz爖YSQA9%պ27fL#_ l[y5m(cRW;>S-9ȣu &zה+)+&̙dfH;ٌ?p%ak:Fh #,yɫ)hƖBG'SFt4JQ@l$#7gmpJmeDowRSƊ\D8`-)l[j?=H~PfI^?!{]PnCHJم_iCoT M2FmG|Yq`iFq#P8()s*ӡ#P#g/)_o[Y{4VDQU^_+#4[2}:9z^)3%9rC=0apԵT!Xgy HgJseI饵V7i`CVc.T"m @» T⎡%1iP`*|2R[M=F^󦅕*J +:B w&1qu%xH \۞0Ba65|X=a/s@[-1_DkLUFDAjiREXSewlhpX9hl>kE6D:5cE QNk'(GE![5\ͱ,U?oxG.,i'kYLftROPQAd>N>[+Jo6c U}YƔXɬڋ-S~u=~JhtjIRzB=:2E!Ura j NH<ě=H_yD[S^S zxQX/L9FS~*!!SZ`\CNts/k>\~L pi:>qD(U54%t,?[w:[:2W y!ȟ!)T3E*AG|2mbui7p_FG%<l>DX3'!GPqbM a$09:҈%*#Z&RQhPjyr5 rV -BwaG=Kk1bBS u/0YY 0eF1~8n{@pHKwq[bᬑ$"ɖ^~MTËLQXDxP?LL%}=jce'X6ш|I|ٷ A_=z׆ZY{6umY1 Npi թHNJn0EܬƟP(ne19Rdlx=CY N{pddKH ۖ>/WlP&XXMWO3!Ŝ1,;%1J$և`G&i͒JVj_@r# Mn+EKnYD)Fn[0u,zA)=$ 1᥃X">&D_菶ߩ,wm6 ̮8Avp#MnX*e Ɩ9Ĺ{xX01B9QvoOG ~CQT2]#9Ai(: "r&,m2i Ipa"#D>;s&#I\lDPEEm,nLR@j!& mE>eN-y?TYi_9}t6"F=@(@=8-2Zvg&['Nǹ " c|c$h5|pnL i_0i2[֛ZQJUTweU, A8d)M<#Yo/"Y w6. ݣz``-dNy&As]DFAԩT k3cvCUHH zvv@]90C&$7jyf??vgBGAÙg'N-mqN:t`KEkC7}eΉr6}PL2zӆq&͛mI4/zMjmE091gE 7Ý%a{a\Id@SS =^3{g@НVY>!y@oߏ=`NJnh(~ N7-fG)m"0zi!G٦X/atr:[!1\by1K+>8y_xzXd>[Κ?e k85$=- e/~f׭}@H20qs[Y;w-f:v;a"&}P8mVmꡊRq?mGвd9X3& L,bRѶqJяT^̭ai0&VkqۗjBx Eҏ;GmV؂%h Ρ+3os pYy盫G ~HR;o>j&mXO2^ͦ0EOq5P`;D 󲃐'B>a0.8/[B LÒ#{l0>μܓ1f z֭-dG&"y 0 @.X'<΋Bΐ9m}oUM=P̐gf>:háu#]@cKVHoLZa2GM=(ڴ{EM,pBowͼ%!!Q|݅ ﹶ\ܕL\A&D.مPeI _sXUKeq7xRM]aO%zsx Ow~@Zص!d|$b%cvjq5D[+&\D ;FESiu_<,Z_\HlNGV^L Kiʹmo9RPr|]\nBl^8 :szYV'ɽ!tƉv Dh KNL/B*LkVpֱ67)\\VN=M:z2 ,P Wb D'Dlrp(Բ4Sq-`x~f @:ǽ1ɛ9{r m1rx)mX$ƞ.3uwkm viRg*G17EdbJR>}35TU@*|-#@KVn,^%c[H.k1XoInhc_j{?9~}i_P\ QF٘฀u"fF搼H^7UhCr",1ɕ$gN8L`./b=ӵvq{MO@ !s4"\zу݃%dG?>sm@28zXf.=줌J9lVB ʸꁐ)J3=CqC*$/[ʜ Gz/ 6Yr*j֯x( / HVQvIĄq4ƫbfW}'lQ7#zC<6rj 7R?0v4R n6Uv˂C'g!3|^7Άyabo &q]:hb`?vk().l(l */S\#~\rA>OjL S½]ЁtfG8+{";7K|SbrfNzRZSW|Fxi~ E0~#SmbbXfq&XS"`^7{qVqZ7wyT#hV.AAK9rTcet^_ZC]'r S[$AG DķF/,;LJ 8S|θ؄W K*vOA3:[^%DF53SB37^ &Pݱ h3qՋ/Ƅ'V&X -BF-CLì^78|V=-jC ^$b//-`BW%1~rPh=5R$}2*xiD[ǃ(@-~(+ qac#,G1hL JĀ*c?U"d{C#4 ErhTQRANa/.HP XF<'Ma87oW; {X~&>s9 v#ÒRL`63}pnE9u a㬖:C7z0z$.SK5:w Y^HG+Ǒ/]2ГgV-jzQ.CPs;ВzZ-l)ի $i;`yZu؄pQ^{F`Օvf8gxWAW: gˌ,dHvT2Qc6Tp6y=|AADDҨck\A߾T%b?^^(h]GBfBtU`?km[|y #%qƸ*0oe&׏0d*QF4w͚JOstiIͮXzՌ&i h~Sa)DZ\īiA!7K+? (bnP%gFHkp|̠1lb$חPyu]LQj/ &ͩ`c9!Z:ز?Wi` }Ԗ`.TG+ÓyC999 ӋVOvS냼Yya2'J ʪli z\'"9h6[}JQ/safecopy-1.7/test/test7/test3.badblocks0000644000175100001440000000003111202053544017150 0ustar ravenusers1 2 3 4 5 7 8 9 10 11 12 safecopy-1.7/test/test7/test.sh0000755000175100001440000001211511726747607015611 0ustar ravenusers#!/bin/sh test_name="safecopy, incremental recovery with blocksize variation" source "../libtestsuite.sh" function test_current() { testsuite_debug "copying reference files for safecopy" cp "test2.dat" "$testsuite_tmpdir/test3.dat" >/dev/null 2>&1 cp "test2.dat" "$testsuite_tmpdir/test4.dat" >/dev/null 2>&1 cp "test2.dat" "$testsuite_tmpdir/test5.dat" >/dev/null 2>&1 cp "test2.dat" "$testsuite_tmpdir/test6.dat" >/dev/null 2>&1 testsuite_assert_files_identical "test2.dat" "$testsuite_tmpdir/test3.dat" testsuite_assert_files_identical "test2.dat" "$testsuite_tmpdir/test4.dat" testsuite_assert_files_identical "test2.dat" "$testsuite_tmpdir/test5.dat" testsuite_assert_files_identical "test2.dat" "$testsuite_tmpdir/test6.dat" testsuite_debug "Test, first run with big skipsize and resolution to produce output with holes" LD_PRELOAD="$preload" $safecopy -R 2 -b 1150 -f 4* -r 4* -o "$testsuite_tmpdir/test1.badblocks" debug "$testsuite_tmpdir/test1.dat" >"$testsuite_tmpdir/test1.out" 2>&1 if [ $? != 1 ]; then testsuite_error "Run of safecopy returned wrong exit code. Output:" testsuite_debug_file "$testsuite_tmpdir/test1.out" fi testsuite_assert_files_identical "test1.dat" "$testsuite_tmpdir/test1.dat" testsuite_assert_files_identical "test1.badblocks" "$testsuite_tmpdir/test1.badblocks" testsuite_debug "Test, first run with big skipsize and resolution to produce output with holes + marking" LD_PRELOAD="$preload" $safecopy -M "MARKBAAD" -R 2 -b 1150 -f 4* -r 4* -o "$testsuite_tmpdir/test2.badblocks" debug "$testsuite_tmpdir/test2.dat" >"$testsuite_tmpdir/test2.out" 2>&1 if [ $? != 1 ]; then testsuite_error "Run of safecopy returned wrong exit code. Output:" testsuite_debug_file "$testsuite_tmpdir/test2.out" fi testsuite_assert_files_identical "test2.dat" "$testsuite_tmpdir/test2.dat" testsuite_assert_files_identical "test1.badblocks" "$testsuite_tmpdir/test2.badblocks" testsuite_debug "Test, incremental, big skipsize, small resolution." testsuite_debug " Must transpose badblocks to correct new sectorsize." testsuite_debug " Must recover data at the end of bad areas but not overwrite already recovered data." LD_PRELOAD="$preload" $safecopy -R 2 -b 1024 -f 8* -i 1150 -I "$testsuite_tmpdir/test1.badblocks" -o "$testsuite_tmpdir/test3.badblocks" debug "$testsuite_tmpdir/test3.dat" >"$testsuite_tmpdir/test3.out" 2>&1 if [ $? != 1 ]; then testsuite_error "Run of safecopy returned wrong exit code. Output:" testsuite_debug_file "$testsuite_tmpdir/test3.out" fi testsuite_assert_files_identical "test3.dat" "$testsuite_tmpdir/test3.dat" testsuite_assert_files_identical "test3.badblocks" "$testsuite_tmpdir/test3.badblocks" testsuite_debug "Test, incremental, small skipsize and atomic resolution." testsuite_debug " Must recover all recoverable data" LD_PRELOAD="$preload" $safecopy -R 2 -b 1024 -f 1* -r 1 -i 1150 -I "$testsuite_tmpdir/test1.badblocks" -o "$testsuite_tmpdir/test4.badblocks" debug "$testsuite_tmpdir/test4.dat" >"$testsuite_tmpdir/test4.out" 2>&1 if [ $? != 1 ]; then testsuite_error "Run of safecopy returned wrong exit code. Output:" testsuite_debug_file "$testsuite_tmpdir/test4.out" fi testsuite_assert_files_identical "test4.dat" "$testsuite_tmpdir/test4.dat" testsuite_assert_files_identical "test4.badblocks" "$testsuite_tmpdir/test4.badblocks" testsuite_debug "Test, incremental, big skipsize, small resolution this time with marking." testsuite_debug " Must recover data at the end of bad areas." testsuite_debug " this one may overwrite successfully rescued data as long" testsuite_debug " as it affects only blocks marked as bad in the include file" testsuite_debug " (will affect block 7 starting at position 8050" testsuite_debug " since its marked for the bad data starting at 9000)" LD_PRELOAD="$preload" $safecopy -M "MARKBAAD" -R 2 -b 1024 -f 8* -i 1150 -I "$testsuite_tmpdir/test1.badblocks" -o "$testsuite_tmpdir/test5.badblocks" debug "$testsuite_tmpdir/test5.dat" >"$testsuite_tmpdir/test5.out" 2>&1 if [ $? != 1 ]; then testsuite_error "Run of safecopy returned wrong exit code. Output:" testsuite_debug_file "$testsuite_tmpdir/test5.out" fi testsuite_assert_files_identical "test5.dat" "$testsuite_tmpdir/test5.dat" testsuite_assert_files_identical "test3.badblocks" "$testsuite_tmpdir/test5.badblocks" testsuite_debug "Test, incremental, small skipsize and atomic resolution, with marking." testsuite_debug " Must only differ from test4.dat by shifts of marker strings, no real data differences" LD_PRELOAD="$preload" $safecopy -M "MARKBAAD" -R 2 -b 1024 -f 1* -r 1 -i 1150 -I "$testsuite_tmpdir/test1.badblocks" -o "$testsuite_tmpdir/test6.badblocks" debug "$testsuite_tmpdir/test6.dat" >"$testsuite_tmpdir/test6.out" 2>&1 if [ $? != 1 ]; then testsuite_error "Run of safecopy returned wrong exit code. Output:" testsuite_debug_file "$testsuite_tmpdir/test6.out" fi testsuite_assert_files_identical "test6.dat" "$testsuite_tmpdir/test6.dat" testsuite_assert_files_identical "test4.badblocks" "$testsuite_tmpdir/test6.badblocks" } testsuite_runtest safecopy-1.7/test/test7/test5.dat0000644000175100001440000004704011202053544016011 0ustar ravenusersiB֤/gW*WаQ2 UŶi jRT z.Bl#V'^mݙVͨ،Q!zUIznΛhdֵVtwPĹSp袆 ;k}w*E.Y* !FSΏ[¬9IFe0 oBv:C;}uLBNFQnfϑtdw_~E1N6/c5 >%"Y+mxU\K%WNa,ںgdT]`2xar2NPf *ȍLl>E\kX;/b П~aqi)!9ݬiI0 DQ =f4m3^`Z((]b17y[) `[pC5q GքIO}+DR!I;& SSLXW9-FnEEÊAOn>sE>E,jFe"x;#q/Bi(WwzEt54QR_%̳\J~ >RDDN'q[qptjE1 Kָ9a2Ѳ( yZ;{ݕBKu.|u6k3:]t#S8eb$ƦaѽS5IpGTo)ҽ9]XF,IX`48uj$ OQIZ=M MdSVsLi$v9Z`D +gal/)<8S]4ޯ  =j8hMcAq_rq5N2U/KIH%5}|I,F"v!*2U-;?9 U^zmŏYceװ6ۯ KP'f\D :]^G_y dr"~ n:Ϛa_p˩\I5HkspwZQ?MY)?_=P2ed!gaEqbdj!$i~%;"9Z5"+#Ω:gԷ|::a$rH^7L|ӣy%FJY,P"vU+nMg`XV_VLy2!%P, 79F1Q{>c̨|0b$ET;Oj0 MddWI|jͱBKKXD+5;\FժZig YfLX^2d.W6yL#Z%yڢwoSV%؂=L(#["*S mo)Knjd-o[5!m0':K׹Rz(QMHJ < xeP3f_~Ɯf 2Mtz'7L%5<44[(WhD՛RX[:Lo!{*YŞc,2EWCr@ ݾ7&|%5e+f]MlB_93,HBg11>o~2@)⣲;u[*#ZI(պ\1JSg|!7d Gr|=tƢ\7s,gP"qﺚadkn@5Om n73xmJ|vCEmdiOwf^lҩf\+7VNPmR.VKa:61գ8 H.r+qvp1Zu/Yh.jMڈ)[]];Ľ4X(wf\`?c tتldnaƕ4|lI樟ԠCvr̍#,Edҧd L3ɵ}^}Y$߯pYk= ZB+ۮ:9c@˞MG<Kх4ש{] Tb_GU\*e0.OZ^Ϡ:-5aEё)ȌQ@sPB;ڼSv(Ƽfu%uVTLHMx2ԪO_ZOf$HEF :0á2YP Z7i'f>8 !J+^[zQ%zw:(bδͿ%MkI]"Eq7\/$E#e|yfPɕm$=R ~ҕj3܄Q>!GPFSO[יf"! jYp|䒂h/~|o!<!XPΙSgWZg #Xzўcb-]TŁ EţμgxU'C#)/Ǖ|҉l[Wy7a}৔ ^OH6eMӂܠ9q`=KuE7lCG2;XI9s 9!2-}5L)fKn;VVHtg_ 4\#;[“ɷ[>>֍[gȥx"ӟN/SbzL専C3$Wks+kvݹGNvzɰ|)|2+ҫ#G/Dj#Xf`F 0D><ŽKFGXw ]:gy(B#D?/jwIfd0)_}\SKAVU%gB\Z9C) *d8#=؎s,KSn,th߃w$`KH|OvRwnzClNMq==3/Tp%\s:ɏ?W}ϵ91H%2̂07<UdJkV0kcyOZ#ܔO6N9x9hhKpSk 4ލ['Q_>I(Cy~қ}}SZ5!&3l/e蘸!T<*"0ԁ@vMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBA JpwO^01$z=sXKJuP?J5L=P}}?:6sѡOю|wN¬۪QT.ڭj<āaf̓ӭ1U8jok|d(DSSޱ{%&*w$y+ty%>YRFRMTz爖YSQA9%պ27fL#_ l[y5m(cRW;>S-9ȣu &zה+)+&̙dfH;ٌ?p%ak:Fh #,yɫ)hƖBG'SFt4JQ@l$#7gmpJmeDowRSƊ\D8`-)l[j?=H~PfI^?!{]PnCHJم_iCoT M2FmG|Yq`iFq#P8()s*ӡ#P#g/)_o[Y{4VDQU^_+#4[2}:9z^)3%9rC=0apԵT!Xgy HgJseI饵V7i`CVc.T"m @» T⎡%1iP`*|2R[M=F^󦅕*J +:B w&1qu%xH \۞0Ba65|X=a/s@[-1_DkLUFDAjiREXSewlhpX9hl>kE6D:5cE QNk'(GE![5\ͱ,U?oxG.,i'kYLftROPQAd>N>[+Jo6c U}YƔXɬڋ-S~u=~JhtjIRzB=:2E!Ura j NH<ě=H_yD[S^S zxQX/L9FS~*!!SZ`\CNts/k>\~L pi:>qD(U54%t,?[w:[:2W y!ȟ!)T3E*AG|2mbui7p_FG%<l>DX3'!GPqbM a$09:҈%*#Z&RQhPjyr5 rV -BwaG=Kk1bBS u/0YY 0eF1~8n{@pHKwq[bᬑ$"ɖ^~MTËLQXDxP?LL%}=jce'X6ш|I|ٷ A_=z׆ZY{6umY1 Npi թHNJn0EܬƟP(ne19Rdlx=CY N{pddKH ۖ>/WlP&XXMWO3!Ŝ1,;%1J$և`G&i͒JVj_@r# Mn+EKnYD)Fn[0u,zA)=$ 1᥃X">&D_菶ߩ,wm6 ̮8Avp#MnX*e Ɩ9Ĺ{xX01B9QvoOG ~CQT2]#9Ai(: "r&,m2i Ipa"#D>;s&#I\lDPEEm,nLR@j!& mE>eN-y?TYi_9}t6"F=@(@=8-2Zvg&['Nǹ " c|c$h5|pnL i_0i2[֛ZQJUTweU, A8d)M<#Yo/"Y w6. ݣz``-dNy&As]DFAԩT k3cvCUHH zvv@]90C&$7jyf??vgBGAÙg'N-mqN:t`KEkC7}eΉr6}PL2zӆq&͛mI4/zMjmE091gE 7Ý%a{a\Id@SS =^3{g@НVY>!y@oߏ=`NJnh(~ N7-fG)m"0zi!G٦X/atr:[!1\by1K+>8y_xzXd>[Κ?e k85$=- e/~f׭}@H20qs[Y;w-f:v;a"&}P8mVmꡊRq?mGвd9X3& L,bRѶqJяT^̭ai0&VkqۗjBx Eҏ;GmV؂%h Ρ+3os pYy盫G ~HR;o>j&mXO2^ͦ0EOq5P`;D 󲃐'B>a0.8/[B LÒ#{l0>μܓ1f z֭-dG&"y 0 @.X'<΋Bΐ9m}oUM=P̐gf>:háu#]@cKVHoLZa2GM=(ڴ{EM,pBowͼ%!!Q|݅ ﹶ\ܕL\A&D.مPeI _sXUKeq7xRM]aO%zsx Ow~@Zص!d|$b%cvjq5D[+&\D ;FESiu_<,Z_\HlNGV^L Kiʹmo9RPr|]\nBl^8 :szYV'ɽ!tƉv Dh KNL/B*LkVpֱ67)\\VN=M:z2 ,P Wb D'Dlrp(Բ4Sq-`x~f @:ǽ1ɛ9{r m1rx)mX$ƞ.3uwkm viRg*G17EdbJR>}35TU@*|-#@KVn,^%c[H.k1XoInhc_j{?9~}i_P\ QF٘฀u"fF搼H^7UhCr",1ɕ$gN8L`./b=ӵvq{MO@ !s4"\zу݃%dG?>sm@28zXf.=줌J9lVB ʸꁐ)J3=CqC*$/[ʜ Gz/ 6Yr*j֯x( / HVQvIĄq4ƫbfW}'lQ7#zC<6rj 7R?0v4R n6Uv˂C'g!3|^7Άyabo &q]:hb`?vk().l(l */S\#~\rA>OjL S½]ЁtfG8+{";7K|SbrfNzRZSW|Fxi~ E0~#SmbbXfq&XS"`^7{qVqZ7wyT#hV.AAK9rTcet^_ZC]'r S[$AG DķF/,;LJ 8S|θ؄W K*vOA3:[^%DF53SB37^ &Pݱ h3qՋ/Ƅ'V&X -BF-CLì^78|V=-jC ^$b//-`BW%1~rPh=5R$}2*xiD[ǃ(@-~(+ qac#,G1hL JĀ*c?U"d{C#4 ErhTQRANa/.HP XF<'Ma87oW; {X~&>s9 v#ÒRL`63}pnE9u a㬖:C7z0z$.SK5:w Y^HG+Ǒ/]2ГgV-jzQ.CPs;ВzZ-l)ի $i;`yZu؄pQ^{F`Օvf8gxWAW: gˌ,dHvT2Qc6Tp6y=|AADDҨck\A߾T%b?^^(h]GBfBtU`?km[|y #%qƸ*0oe&׏0d*QF4w͚JOstiIͮXzՌ&i h~Sa)DZ\īiA!7K+? (bnP%gFHkp|̠1lb$חPyu]LQj/ &ͩ`c9!Z:ز?Wi` }Ԗ`.TG+ÓyC999 ӋVOvS냼Yya2'J ʪli z\'"9h6[}JQ/safecopy-1.7/test/test7/test4.dat0000644000175100001440000004704011202053544016010 0ustar ravenusersiB֤/gW*WаQ2 UŶi jRT z.Bl#V'^mݙVͨ،Q!zUIznΛhdֵVtwPĹSp袆 ;k}w*E.Y* !FSΏ[¬9IFe0 oBv:C;}uLBNFQnfϑtdw_~E1N6/c5 >%"Y+mxU\K%WNa,ںgdT]`2xar2NPf *ȍLl>E\kX;/b П~aqi)!9ݬiI0 DQ =f4m3^`Z((]b17y[) `[pC5q GքIO}+DR!I;& SSLXW9-FnEEÊAOn>sE>E,jFe"x;#q/Bi(WwzEt54QR_%̳\J~ >RDDN'q[qptjE1 Kָ9a2Ѳ( yZ;{ݕBKu.|u6k3:]t#S8eb$ƦaѽS5IpGTo)ҽ9]XF,IX`48uj$ OQIZ=M MdSVsLi$v9Z`D +gal/)<8S]4ޯ  =j8hMcAq_rq5N2U/KIH%5}|I,F"v!*2U-;?9 U^zmŏYceװ6ۯ KP'f\D :]^G_y dr"~ n:Ϛa_p˩\I5HkspwZQ?MY)?_=P2ed!gaEqbdj!$i~%;"9Z5"+#Ω:gԷ˰IyVBĆ o6m>1O̳:B=vԦ/v!k5euU-ڌ'sKˇPsƨvl: 1]έA#z4:L-hP3IR 266vs܌3xw3Nta2Bɓmkڬu2Q>r536h80ͯpW yeJVmq M꺠U)$eBtpp`wYڣ3sJ$\* HAA!Ll z|?pz9@ -#Qb! sBv )A1 2up<ӨJl pS"N3%RX5LGY*< 3u"o*Xfod666>Rd^ˡp UF~+`7o8] u|Ri/V$az =h˻~4}:e&I8Mf\ˋ'd=}BkrDg^2JD 5EEjTWN-jcq^%%vvrO7e! )hئ?CCYr1&ZP*hq!Sψa.)w~=Q숽@MzgYAkZK/Dݱ9nnǗcwua;d^e9 ]zkydC+\UofHtQ{fʓPY2$DoB(]'hmW0K5E$0řJ}íSg; ,7XdVw ~rNZҊ|yd Kә*ޯųOEZôH3 jżYiűM򱏯ns3ǂl`He U}E׎,!c1cӤ`AQ]`0K˒lXqS>|::a$rH^7L|ӣy%FJY,P"vU+nMg`XV_VLy2!%P, 79F1Q{>c̨|0b$ET;Oj0 MddWI|jͱBKKXD+5;\FժZig YfLX^2d.W6yL#Z%yڢwoSV%؂=L(#["*S mo)Knjd-o[5!m0':K׹Rz(QMHJ < xeP3f_~Ɯf 2Mtz'7L%5<44[(WhD՛RX[:Lo!{*YŞc,2EWCr@ ݾ7&|%5e+f]MlB_93,HBg11>o~2@)⣲;u[*#ZI(պ\1JSg|!7d Gr|=tƢ\7s,gP"qﺚadkn@5Om n73xmJ|vCEmdiOwf^lҩf\+7VNPmR.VKa:61գ8 H.r+qvp1Zu/Yh.jMڈ)[]];Ľ4X(wf\`?c tتldnaƕ4|lI樟ԠCvr̍#,Edҧd L3ɵ}^}Y$߯pYk= ZB+ۮ:9c@˞MG<Kх4ש{] Tb_GU\*e0.OZ^Ϡ:-5aEё)ȌQ@sPB;ڼSv(Ƽfu%uVTLHMx2ԪO_ZOf$HEF :0á2YP Z7i'f>8 !J+^[zQ%zw:(bδͿ%MkI]"Eq7\/$E#e|yfPɕm$=R ~ҕj3܄Q>!GPFSO[יf"! jYp|䒂h/~|o!<!XPΙSgWZg #Xzўcb-]TŁ EţμgxU'C#)/Ǖ|҉l[Wy7a}৔ ^OH6eMӂܠ9q`=KuE7lCG2;XI9s 9!2-}5L)fKn;VVHtg_ 4\#;[“ɷ[>>֍[gȥx"ӟN/SbzL専C3$Wks+kvݹGNvzɰ|)|2+ҫ#G/Dj#Xf`F 0D><ŽKFGXw ]:gy(B#D?/jwIfd0)_}\SKAVU%gB\Z9C) *d8#=؎s,KSn,th߃w$`KH|OvRwnzClNMq==3/Tp%\s:ɏ?W}ϵ91H%2̂07<UdJkV0kcyOZ#ܔO6N9x9hhKpSk 4ލ['Q_>I(Cy~қ}}SZ5!&3l/e蘸!T<*"0ԁ@vLsGR5wwG]4M` _%S50,O UI^|XLiBooc&Xfv16_N"ْEnM}K IYrQ~Zf`iQӢKџ! 󴗝Mq҄ rQ#V ,TU'(-b3ѳwkGoV!|0`U 3:~׶[z)xY^^v>Gp{ۢI G}àsn͟_WlpO b r҄@"hv8D4F!o<|S08c tih%aG:hDSS]U1yr$:ʜ]d\;A:ICTZvMt5Ӏhz4{ MAn{+(UIe[$j7M:Ak߮w s "tg瘰 R\l*<8Rq [.28 AES NrF0m@a :?DyQ1jLPugc9fIRY8{>^n#V u]*,tV-F8W 0Pܽxʌ}F<.#+A"+Y470gYϸHT{q޸ʧH_)8xW65[X9SLIaWMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBA/M5Ǽ8=aXh+? S TpUV!jpւ#怒WvkEm'T=ɉ]q_^ZKs*w=[\N-YAͨ됆*kkIl؍LȶZ6ABCy& >C~ncv#u@P{ʸ S}'d>(JtۑV,%UfxgYRFRMTz爖YSQA9%պ27fL#_ l[y5m(cRW;>S-9ȣu &zה+)+&̙dfH;ٌ?p%ak:Fh #,yɫ)hƖBG'SFt4JQ@l$#7gmpJmeDowRSƊ\D8`-)l[j?=H~PfI^?!{]PnCHJم_iCoT M2FmG|Yq`iFq#P8()s*ӡ#P#g/)_o[Y{4VDQU^_+#4[2}:9z^)3%9rC=0apԵT!Xgy HgJseI饵V7i`CVc.T"m @» T⎡%1iP`*|2R[M=F^󦅕*J +:B w&1qu%xH \۞0Ba65|X=a/s@[-1_DkLUFDAjiREXSewlhpX9hl>kE6D:5cE QNk'(GE![5\ͱ,U?oxG.,i'kYLftROPQAd>N>[+Jo6c U}YƔXɬڋ-S~u=~JhtjIRzB=:2E!Ura j NH<ě=H_yD[S^S zxQX/L9FS~*!!SZ`\CNts/k>\~L pi:>qD(U54%t,?[w:[:2W y!ȟ!)T3E*AG|2mbui7p_FG%<l>DX3'!GPqbM a$09:҈%*#Z&RQhPjyr5 rV -BwaG=Kk1bBS u/0YY 0eF1~8n{@pHKwq[bᬑ$"ɖ^~MTËLQXDxP?LL%}=jce'X6ш|I|ٷ A_=z׆ZY{6umY1 Npi թHNJn0EܬƟP(ne19Rdlx=CY N{pddKH ۖ>/WlP&XXMWO3!Ŝ1,;%1J$և`G&i͒JVj_@r# Mn+EKnYD)Fn[0u,zA)=$ 1᥃X">&D_菶ߩ,wm6 ̮8Avp#MnX*e Ɩ9Ĺ{xX01B9QvoOG ~CQT2]#9Ai(: "r&,m2i Ipa"#D>;s&#I\lDPEEm,nLR@j!& mE>eN-y?TYi_9}t6"F=@(@=8-2Zvg&['Nǹ " c|c$h5|pnL i_0i2[֛ZQJUTweU, A8d)M<#Yo/"Y w6. ݣz``-dNy&As]DFAԩT k3cvCUHH zvv@]90C&$7jyf??vgBGAÙg'N-mqN:t`KEkC7}eΉr6}PL2zӆq&͛mI4/zMjmE091gE 7Ý%a{a\Id@SS =^3{g@НVY>!y@oߏ=`NJnh(~ N7-fG)m"0zi!G٦X/atr:[!1\by1K+>8y_xzXd>[Κ?e k85$=- e/~f׭}@H20qs[Y;w-f:v;a"&}P8mVmꡊRq?mGвd9X3& L,bRѶqJяT^̭ai0&VkqۗjBx Eҏ;GmV؂%h Ρ+3os pYy盫G ~HR;o>j&mXO2^ͦ0EOq5P`;D 󲃐'B>a0.8/[B LÒ#{l0>μܓ1f z֭-dG&"y 0 @.X'<΋Bΐ9m}oUM=P̐gf>:háu#]@cKVHoLZa2GM=(ڴ{EM,pBowͼ%!!Q|݅ ﹶ\ܕL\A&D.مPeI _sXUKeq7xRM]aO%zsx Ow~@Zص!d|$b%cvjq5D[+&\D ;FESiu_<,Z_\HlNGV^L Kiʹmo9RPr|]\nBl^8 :szYV'ɽ!tƉv Dh KNL/B*LkVpֱ67)\\VN=M:z2 ,P Wb D'Dlrp(Բ4Sq-`x~f @:ǽ1ɛ9{r m1rx)mX$ƞ.3uwkm viRg*G17EdbJR>}35TU@*|-#@KVn,^%c[H.k1XoInhc_j{?9~}i_P\ QF٘฀u"fF搼H^7UhCr",1ɕ$gN8L`./b=ӵvq{MO@ !s4"\zу݃%dG?>sm@28zXf.=줌J9lVB ʸꁐ)J3=CqC*$/[ʜ Gz/ 6Yr*j֯x( / HVQvIĄq4ƫbfW}'lQ7#zC<6rj 7R?0v4R n6Uv˂C'g!3|^7Άyabo &q]:hb`?vk().l(l */S\#~\rA>OjL S½]ЁtfG8+{";7K|SbrfNzRZSW|Fxi~ E0~#SmbbXfq&XS"`^7{qVqZ7wyT#hV.AAK9rTcet^_ZC]'r S[$AG DķF/,;LJ 8S|θ؄W K*vOA3:[^%DF53SB37^ &Pݱ h3qՋ/Ƅ'V&X -BF-CLì^78|V=-jC ^$b//-`BW%1~rPh=5R$}2*xiD[ǃ(@-~(+ qac#,G1hL JĀ*c?U"d{C#4 ErhTQRANa/.HP XF<'Ma87oW; {X~&>s9 v#ÒRL`63}pnE9u a㬖:C7z0z$.SK5:w Y^HG+Ǒ/]2ГgV-jzQ.CPs;ВzZ-l)ի $i;`yZu؄pQ^{F`Օvf8gxWAW: gˌ,dHvT2Qc6Tp6y=|AADDҨck\A߾T%b?^^(h]GBfBtU`?km[|y #%qƸ*0oe&׏0d*QF4w͚JOstiIͮXzՌ&i h~Sa)DZ\īiA!7K+? (bnP%gFHkp|̠1lb$חPyu]LQj/ &ͩ`c9!Z:ز?Wi` }Ԗ`.TG+ÓyC999 ӋVOvS냼Yya2'J ʪli z\'"9h6[}JQ/safecopy-1.7/test/README0000644000175100001440000000171311210452244014061 0ustar ravenuserssafecopy test suite libtestsuite.sh: test suite script library config_in.sh: config file for test suite test.sh: run all tests libsafecopydebug: wrapper library that hooks on libc functions (open, read, seek) to simulate fake IO errors test0: test wether test libc wrapper library works test1: test wether safecopy can copy a simple plain file without errors test2: test for softerror recovery test3: test for combined softerror harderror recovery test4: test for filesize safety and badblock correctness with unreadable end of file test5: test completely unreadable file test6: test multiple passes with same block size test7: test multiple passes with different block size test8: test multiple passes with start offset and size limit test9: test multiple passes with same block size plus sector exclude list test10: test multiple passes with different block plus sector exclude list test11: test multiple passes with start offset, size limit plus sector exclude list safecopy-1.7/test/test3/0000755000175100001440000000000011726756524014265 5ustar ravenuserssafecopy-1.7/test/test3/simulator.cfg0000644000175100001440000000013711202053543016742 0ustar ravenusersblocksize=1024 filesize=10240 source=test.dat softfailcount=2 softfail=2 hardfail=5 hardfail=6 safecopy-1.7/test/test3/test1.dat0000644000175100001440000002400011202053543015767 0ustar ravenusersŁcA< B줡YW#G`=m|^@1q3|Mf Si+HبV!BXw =vEgSf6$FW/~$5ìaN{:3{nսQ` #$׍(v_n""P#4ܕ{ Gc/DjLVŞ#LeA׭gV͊\?JE\;SAMcJZ RA%ߗdi =(@L9dj\l(3ZDQOkK3އjZ 3@An(GCZ9X'k*.zɘں㆕6Ƨ0\؅D5G#eTOPf'xoW6o` 4RGLv Eh$s7[dheuUm2RNU6\2As.akc ƬS9ڵX[ŮN1l9R%LwKbHD;c86=C([KZfd xg;LKWz'MwyGᱚE\}oi Gc+`v9eɹikʠn)p8X(bI)Ѐloטк?Rl\rdhUWCV1uȂV?3U`a :c[*^j +K, ѶrcqcJ<=AczgzNL }__nQ3dF0#u?$S/-\a7RDN!zZ% ۾Ppu[ >!Z%+p$t=rW~ǃgAبyf;`oPUiIZ*΅M&VY/ps{ex[^+[y1d|CACk:ȬՉS夐\04愞^ReɎMѼb\]>\F1[+RBMI¾-}54HufɱYRlF]cxYKaDSmcr4y[~^Էig:1\1 ZX.x%_h*g;tX$'#ne;+z )8hڠd&,W":*rs0ɴ[ v7>clO6N<$?$"ŒVwvL]7lBd6#Q^T4O@Թυǃa*1;1d?d+>` D׭yiI|+h aD{9(7h*[Z97R%xQI\^,W"<di=Bwbd x wVJ $Єȵ>޲3TJŷWp1F}K7 L{A꺫r(c,E<>so_#Ak7炊*=:P!?Jk)og y(<<|`,/&zQt6lv40զcfU[ua(.8$RG>)8]xY0hNyD82dzv ӟ hn^%ڽsx8_(og?K>x8Fr=BU:v'>,,xfk/jZ͋NkYkTʂM,VK%vkA!5NR'c-<6Yf^Q4 p `' g}1ˏdx74qӧ9:iɰW=`)Cgw[:߀,{A &&D_Z_y,fk55$W ;+F:~8Hph7b E=QOw4)^|كvD'\˸!İ|gn|Hw+) ([t-G5'W)ëVd$jjvA$o֩jI"=u: Y'Άĩ&'J۵mdi.O=PlW)So\s9Vj{c쩄NKBS@*x4+h;z-]~Y+o$_ZX.h"]7;2M`a%ҪX69b^ q79r8("@InZ20ƣvi* 𔛖vr`pbb=gO~T}ނãIoI 'h ϧq ]: OB(;0F~Քff_9 un=J0f"99KMpޜ)dPftph 4Ek}J+e~ܐSQrZEN5FQeKZ;:n߯"F.MXP2]w5U#Wʼn $5Cakz$bkgzc0@)ߊBlqz>7%5N=`D[,|@6B1;vYW2ii8mk%-7E.(&hz*Ç+G X)giۋR[s5bRl9Kx֛S@LkclVU2Slj\+$߸E+԰k )&H lڷ@8Lfm"0TGz{NlWy*y:H֎)'Pa͸57D`3F$JP,#o+29$8KB<)Vў ,Ө, b'Qb l4|-xV {q󀻯M)^{_{ՑZ$tvq=M(&~#F(EGZJd-ӌE5Ī5ⶱ/$Ċq/<F#t5R B/k~!G`'[%N _@lyЂsuJ 9g]̲Zhu ܻ2}y~%rO}vKbQmyH8nW1^k!\@;P҈4ō8}d1ѽlcL{ݯ[PqQ:M;Y)֍˗z!rCymBKYu-8ًE1k"5FdvG`>8fi;2MJi${[cFifC\[)QaĢ#n1.o#rP#=p%Z"YnZ*РHF*qU 3W%8>Ȗޫ0_VPE2BIF0u0JUcY]i{:@1E$4%,*I D`%@M!+19(Ӓ65dq1 (DZ,(pw4ULU!r`FOC<gRI$hz\-^qh*nSo;/;rq'= C Cq_@-9VsNL/2劵u0XuEv@Bm}n`0]0wS SQ\=0> >y/V0 /M HQezcp*op*OV6n)g)Q6Q=$c*Bƚ ?.&+XgEܚoYgL|߅l& I/ѡI'> ~:\@/w8V|79gv"IpWВ k!>֯z~>̜GVio|:'v< 0مd"~[ HrŒoj"Wn,8W+U~@Vۅazܠsvyf+Hz:kbů@< (*&p;`;/!=Y aE٩لZ O˹=,TٺX\q8>{K}3qq)W >:LYBT6+0jwƠ[>{'08`yYc~b#yu1ih<7tqWJYfeܐHQ"*V hfDIt"TR:#Q2ȠJf}1BOo'60m'2ubsO3: 4\e  檊ZqZ Uǐ15@`<[l^ЏwLWXvAm>3Xߐo˫NqH?l҅a\T.ګ5InNPU9A`-vgx}/Fhzt-^XBhfk#:#t4Ę3GivG-4ZWuϒ?ꌋ A͇9YcRB415^˒G~d@՗UH@b?GG۳qԔ>Hꆖ%=[3Y CK8r,Kg Z+"JgnLEfd,͒_r`xrm뱃l⳽Nk̗q8k(Ȟt!,6Y.yp?-g9T[++ GGV-~"J~Qt0%zHϷvY 6͇y(doޠ7(>|/qc5J"$jiV!bЈ5k$y!) wX7̀Y}&Z yVeO[fHWboN} XС|fvAk C\H^lO*P9cR*ىD6? 41()6 8\؉@A=#2(TTَFB 8Y3hT23H[e!w 7Z ~YNeP6秛cȾď<0_yzl7͇ L d}P!2 A7J<#w2oDjzH2 ^{۾sg#wƱhڛ.j~6&^]hwcTRwCnRZ1$=ŋԎ7@,D bh2fL#aYj_+a_9A+fB>(H Y  ?mlZxZ\l6/V$K0'# .ND2+GFj: õWXm@0`\qބrL &B1 s:JQC XR*Q,tƉYw5Rj!ż0ίab&S|-KdBP[5N۵- <_PK^bH29iPbpyQ y[֡ڃ[ a" =F 0#I-&m2uOP&8<U==gRw>9rאg4ZBԳhɗ/R8RĪzX'\.m,2?jO{LFC@/#ǵ?0el to]Idp˕1ReQuBuQ +ET 46- Oqѷe=Nf0[Tv<%֌*{h,CkZ \!ӪɉW*#R1yX-;6sBBR1BrzEN ~9C\8- 4HHT h~a>^qG32$tqw  SYb0C UK@h}晤<Ϥ6;#G`<X*k3EǀCpp[*U'gݒ1; 8ePΘMEQJHSRU8EHOW+ۄlODX\LY)jk1Q idT҂{9I`i!ÉcD,*!{#vr0%_a6L@s0`h`s3v] QU]?Ԗ9E{HZt\tMsofd4]<>zySrhZùp3&v_t Kh3/6Vt. Tiw_u/q 0v` -ł]FtacŦđ sxwu!>)Ҿ͉{?safecopy-1.7/test/test3/test2.dat0000644000175100001440000000400011202053543015766 0ustar ravenusersŁcA< B줡YW#G`=m|^@1q3|Mf Si+HبV!BXw =vEgSf6$FW/~$5ìaN{:3{nսQ` #$׍(v_n""P#4ܕ{ Gc/DjLVŞ#LeA׭gV͊\?JE\;SAMcJZ RA%ߗdi =(@L9dj\l(3ZDQOkK3އjZ 3@An(GCZ9X'k*.zɘں㆕6Ƨ0\؅D5G#eTOPf'xoW6o` 4RGLv Eh$s7[dheuUm2RNU6\2As.akc ƬS9ڵX[ŮN1l9R%LwKbHD;c86=C([KZfd xg;LKWz'MwyGᱚE\}oi Gc+`v9eɹikʠn)p8X(bI)Ѐloטк?Rl\rdhUWCV1uȂV?3U`a :c[*^j +K, ѶrcqcJ<=AczgzNL }__nQ3dF0#u?$S/-\a7RDN!zZ% ۾Ppu[ >!Z%+p$t=rW~ǃgAبyf;`oPUiIZ*΅M&VY/ps{ex[^+[y1d|CACk:ȬՉS夐\04愞^ReɎMѼb\]>\F1[+RBMI¾-}54HufɱYRlF]cxYKaDSmcr4y[~^Էig:1\1 ZX.x%_h*g;tX$'#ne;+z )8hڠd&,W":*rs0ɴ[ v7>clO6N<$?$"ŒVwvL]7lBd6#Q^T4O@Թυǃa*1;1d?d+>` D׭yiI|+h aD{9(7h*[Z97R%xQI\^,W"<di=Bwbd x wVJ $Єȵ>޲3TJŷWp1F}K7 L{A꺫r(c,E<>so_#Ak7炊*=:P!?Jk)safecopy-1.7/test/test3/test.dat0000644000175100001440000002400011202053543015706 0ustar ravenusersŁcA< B줡YW#G`=m|^@1q3|Mf Si+HبV!BXw =vEgSf6$FW/~$5ìaN{:3{nսQ` #$׍(v_n""P#4ܕ{ Gc/DjLVŞ#LeA׭gV͊\?JE\;SAMcJZ RA%ߗdi =(@L9dj\l(3ZDQOkK3އjZ 3@An(GCZ9X'k*.zɘں㆕6Ƨ0\؅D5G#eTOPf'xoW6o` 4RGLv Eh$s7[dheuUm2RNU6\2As.akc ƬS9ڵX[ŮN1l9R%LwKbHD;c86=C([KZfd xg;LKWz'MwyGᱚE\}oi Gc+`v9eɹikʠn)p8X(bI)Ѐloטк?Rl\rdhUWCV1uȂV?3U`a :c[*^j +K, ѶrcqcJ<=AczgzNL }__nQ3dF0#u?$S/-\a7RDN!zZ% ۾Ppu[ >!Z%+p$t=rW~ǃgAبyf;`oPUiIZ*΅M&VY/ps{ex[^+[y1d|CACk:ȬՉS夐\04愞^ReɎMѼb\]>\F1[+RBMI¾-}54HufɱYRlF]cxYKaDSmcr4y[~^Էig:1\1 ZX.x%_h*g;tX$'#ne;+z )8hڠd&,W":*rs0ɴ[ v7>clO6N<$?$"ŒVwvL]7lBd6#Q^T4O@Թυǃa*1;1d?d+>` D׭yiI|+h aD{9(7h*[Z97R%xQI\^,W"<di=Bwbd x wVJ $Єȵ>޲3TJŷWp1F}K7 L{A꺫r(c,E<>so_#Ak7炊*=:P!?Jk)og y(<<|`,/&zQt6lv40զcfU[ua(.8$RG>)8]xY0hNyD82dzv ӟ hn^%ڽsx8_(og?K>x8Fr=BU:v'>,,xfk/jZ͋NkYkTʂM,VK%vkA!5NR'c-<6Yf^Q4 p `' g}1ˏdx74qӧ9:iɰW=`)Cgw[:߀,{A &&D_Z_y,fk55$W ;+F:~8Hph7b E=QOw4)^|كvD'\˸!İ|gn|Hw+) ([t-G5'W)ëVd$jjvA$o֩jI"=u: Y'Άĩ&'J۵mdi.O=PlW)So\s9Vj{c쩄NKBS@*x4+h;z-]~Y+o$_ZX.h"]7;2M`a%ҪX69b^ q79r8("@InZ20ƣvi* 𔛖vr`pbb=gO~T}ނãIoI 'h ϧq ]: OB(;0F~Քff_9 un=J0f"99KMpޜ)dPftph 4Ek}J+e~ܐSQrZEN5FQeKZ;:n߯"F.MXP2]w5U#Wʼn $5Cakz$bkgzc0@)ߊBlqz>7%5N=`D[,|@6B1;vYW2ii8mk%-7E.(&hz*Ç+G X)giۋR[s5bRl9Kx֛S@LkclVU2Slj\+$߸E+԰k )&H lڷ@8Lfm"0TGz{NlWy*y:H֎)'Pa͸57D`3F$JP,#o+29$8KB<)Vў ,Ө, b'Qb l4|-xV {q󀻯M)^{_{ՑZ$tvq=M(&~#F(EGZJd-ӌE5Ī5ⶱ/$Ċq/<F#t5R B/k~!G`'[%N _@lyЂsuJ 9g]̲Zhu ܻ2}y~%rO}vKbQmyH8nW1^k!\@;P҈4ō8}d1ѽlcL{ݯ[PqQ:M;Y)֍˗z!rCymBKYu-8ًE1k"5FdvG`>8fi;2MJi${[cFifC\[)QaĢ#n1.o#rP#=p%Z"YnZ*РHF*qU 3W%8>Ȗޫ0_VPE2BIF0u0JUcY]i{:@1E$4%,*I D`%@M!+19(Ӓ65dq1 (DZ,(pw4ULU!r`FOC<gRI$hz\-^qh*nSo;/;rq'= C Cq_@-9VsNL/2劵u0XuEv@Bm}n`0]0wS SQ\=00lx['|849m` Ț]ܯ_rzfNy JhmWyzc.6KWN' sPi0~ʖɍsx% ת8 QQf:\F;!lrļ~%D#b:ЯXC^VRQfkE0Ų+^2k4^昚߆ ٧Aǡ~AR1\_~So&[DVQZ'RJ)aChx;i3G +bTוtaM^6Lye(}405yWu:UUN, Q:3ͼ -v 0El Ъ[EwExݍLPBfFUfn.*A^IMYӱldk_ V7 3 ѕo99{io#ǐwi(KJ1zǢlU(Qc+v`Rh%sL7F]t"yxY,1~>_c*V"ϑ`S^RM@iz+*by>&=b7Kneq`m+׺|;gԀ8_3MO'(E?yr[& x/cT 5{J3PΗj}2UB@p`B9H`'\P9}{\N!6F}Tb5)Rx XekRepdick^b; &U?:?Sٟ8n r? Zݛ%<7g`|3:~4G<`CD 9@YK%f^Q>Sd&ٙE ־s =় 8Gu5"v  FwZT,xN OCYly|4E4<8Muo ygE t:?-&HV/*ҧ*$jJX"pFmV Zj2ŽߧP]j\va]]U:q@AbʒBJU :ʙ/eHp_S(%9)C6%FBZ&qh8&/TQ{>E޼4Z(i"> >y/V0 /M HQezcp*op*OV6n)g)Q6Q=$c*Bƚ ?.&+XgEܚoYgL|߅l& I/ѡI'> ~:\@/w8V|79gv"IpWВ k!>֯z~>̜GVio|:'v< 0مd"~[ HrŒoj"Wn,8W+U~@Vۅazܠsvyf+Hz:kbů@< (*&p;`;/!=Y aE٩لZ O˹=,TٺX\q8>{K}3qq)W >:LYBT6+0jwƠ[>{'08`yYc~b#yu1ih<7tqWJYfeܐHQ"*V hfDIt"TR:#Q2ȠJf}1BOo'60m'2ubsO3: 4\e  檊ZqZ Uǐ15@`<[l^ЏwLWXvAm>3Xߐo˫NqH?l҅a\T.ګ5InNPU9A`-vgx}/Fhzt-^XBhfk#:#t4Ę3GivG-4ZWuϒ?ꌋ A͇9YcRB415^˒G~d@՗UH@b?GG۳qԔ>Hꆖ%=[3Y CK8r,Kg Z+"JgnLEfd,͒_r`xrm뱃l⳽Nk̗q8k(Ȟt!,6Y.yp?-g9T[++ GGV-~"J~Qt0%zHϷvY 6͇y(doޠ7(>|/qc5J"$jiV!bЈ5k$y!) wX7̀Y}&Z yVeO[fHWboN} XС|fvAk C\H^lO*P9cR*ىD6? 41()6 8\؉@A=#2(TTَFB 8Y3hT23H[e!w 7Z ~YNeP6秛cȾď<0_yzl7͇ L d}P!2 A7J<#w2oDjzH2 ^{۾sg#wƱhڛ.j~6&^]hwcTRwCnRZ1$=ŋԎ7@,D bh2fL#aYj_+a_9A+fB>(H Y  ?mlZxZ\l6/V$K0'# .ND2+GFj: õWXm@0`\qބrL &B1 s:JQC XR*Q,tƉYw5Rj!ż0ίab&S|-KdBP[5N۵- <_PK^bH29iPbpyQ y[֡ڃ[ a" =F 0#I-&m2uOP&8<U==gRw>9rאg4ZBԳhɗ/R8RĪzX'\.m,2?jO{LFC@/#ǵ?0el to]Idp˕1ReQuBuQ +ET 46- Oqѷe=Nf0[Tv<%֌*{h,CkZ \!ӪɉW*#R1yX-;6sBBR1BrzEN ~9C\8- 4HHT h~a>^qG32$tqw  SYb0C UK@h}晤<Ϥ6;#G`<X*k3EǀCpp[*U'gݒ1; 8ePΘMEQJHSRU8EHOW+ۄlODX\LY)jk1Q idT҂{9I`i!ÉcD,*!{#vr0%_a6L@s0`h`s3v] QU]?Ԗ9E{HZt\tMsofd4]<>zySrhZùp3&v_t Kh3/6Vt. Tiw_u/q 0v` -ł]FtacŦđ sxwu!>)Ҿ͉{?safecopy-1.7/test/test3/test3.dat0000644000175100001440000002400011202053543015771 0ustar ravenusersŁcA< B줡YW#G`=m|^@1q3|Mf Si+HبV!BXw =vEgSf6$FW/~$5ìaN{:3{nսQ` #$׍(v_n""P#4ܕ{ Gc/DjLVŞ#LeA׭gV͊\?JE\;SAMcJZ RA%ߗdi =(@L9dj\l(3ZDQOkK3އjZ 3@An(GCZ9X'k*.zɘں㆕6Ƨ0\؅D5G#eTOPf'xoW6o` 4RGLv Eh$s7[dheuUm2RNU6\2As.akc ƬS9ڵX[ŮN1l9R%LwKbHD;c86=C([KZfd xg;LKWz'MwyGᱚE\}oi Gc+`v9eɹikʠn)p8X(bI)Ѐloטк?Rl\rdhUWCV1uȂV?3U`a :c[*^j +K, ѶrcqcJ<=AczgzNL }__nQ3dF0#u?$S/-\a7RDN!zZ% ۾Ppu[ >!Z%+p$t=rW~ǃgAبyf;`oPUiIZ*΅M&VY/ps{ex[^+[y1d|CACk:ȬՉS夐\04愞^ReɎMѼb\]>\F1[+RBMI¾-}54HufɱYRlF]cxYKaDSmcr4y[~^Էig:1\1 ZX.x%_h*g;tX$'#ne;+z )8hڠd&,W":*rs0ɴ[ v7>clO6N<$?$"ŒVwvL]7lBd6#Q^T4O@Թυǃa*1;1d?d+>` D׭yiI|+h aD{9(7h*[Z97R%xQI\^,W"<di=Bwbd x wVJ $Єȵ>޲3TJŷWp1F}K7 L{A꺫r(c,E<>so_#Ak7炊*=:P!?Jk)(;0F~Քff_9 un=J0f"99KMpޜ)dPftph 4Ek}J+e~ܐSQrZEN5FQeKZ;:n߯"F.MXP2]w5U#Wʼn $5Cakz$bkgzc0@)ߊBlqz>7%5N=`D[,|@6B1;vYW2ii8mk%-7E.(&hz*Ç+G X)giۋR[s5bRl9Kx֛S@LkclVU2Slj\+$߸E+԰k )&H lڷ@8Lfm"0TGz{NlWy*y:H֎)'Pa͸57D`3F$JP,#o+29$8KB<)Vў ,Ө, b'Qb l4|-xV {q󀻯M)^{_{ՑZ$tvq=M(&~#F(EGZJd-ӌE5Ī5ⶱ/$Ċq/<F#t5R B/k~!G`'[%N _@lyЂsuJ 9g]̲Zhu ܻ2}y~%rO}vKbQmyH8nW1^k!\@;P҈4ō8}d1ѽlcL{ݯ[PqQ:M;Y)֍˗z!rCymBKYu-8ًE1k"5FdvG`>8fi;2MJi${[cFifC\[)QaĢ#n1.o#rP#=p%Z"YnZ*РHF*qU 3W%8>Ȗޫ0_VPE2BIF0u0JUcY]i{:@1E$4%,*I D`%@M!+19(Ӓ65dq1 (DZ,(pw4ULU!r`FOC<gRI$hz\-^qh*nSo;/;rq'= C Cq_@-9VsNL/2劵u0XuEv@Bm}n`0]0wS SQ\=0> >y/V0 /M HQezcp*op*OV6n)g)Q6Q=$c*Bƚ ?.&+XgEܚoYgL|߅l& I/ѡI'> ~:\@/w8V|79gv"IpWВ k!>֯z~>̜GVio|:'v< 0مd"~[ HrŒoj"Wn,8W+U~@Vۅazܠsvyf+Hz:kbů@< (*&p;`;/!=Y aE٩لZ O˹=,TٺX\q8>{K}3qq)W >:LYBT6+0jwƠ[>{'08`yYc~b#yu1ih<7tqWJYfeܐHQ"*V hfDIt"TR:#Q2ȠJf}1BOo'60m'2ubsO3: 4\e  檊ZqZ Uǐ15@`<[l^ЏwLWXvAm>3Xߐo˫NqH?l҅a\T.ګ5InNPU9A`-vgx}/Fhzt-^XBhfk#:#t4Ę3GivG-4ZWuϒ?ꌋ A͇9YcRB415^˒G~d@՗UH@b?GG۳qԔ>Hꆖ%=[3Y CK8r,Kg Z+"JgnLEfd,͒_r`xrm뱃l⳽Nk̗q8k(Ȟt!,6Y.yp?-g9T[++ GGV-~"J~Qt0%zHϷvY 6͇y(doޠ7(>|/qc5J"$jiV!bЈ5k$y!) wX7̀Y}&Z yVeO[fHWboN} XС|fvAk C\H^lO*P9cR*ىD6? 41()6 8\؉@A=#2(TTَFB 8Y3hT23H[e!w 7Z ~YNeP6秛cȾď<0_yzl7͇ L d}P!2 A7J<#w2oDjzH2 ^{۾sg#wƱhڛ.j~6&^]hwcTRwCnRZ1$=ŋԎ7@,D bh2fL#aYj_+a_9A+fB>(H Y  ?mlZxZ\l6/V$K0'# .ND2+GFj: õWXm@0`\qބrL &B1 s:JQC XR*Q,tƉYw5Rj!ż0ίab&S|-KdBP[5N۵- <_PK^bH29iPbpyQ y[֡ڃ[ a" =F 0#I-&m2uOP&8<U==gRw>9rאg4ZBԳhɗ/R8RĪzX'\.m,2?jO{LFC@/#ǵ?0el to]Idp˕1ReQuBuQ +ET 46- Oqѷe=Nf0[Tv<%֌*{h,CkZ \!ӪɉW*#R1yX-;6sBBR1BrzEN ~9C\8- 4HHT h~a>^qG32$tqw  SYb0C UK@h}晤<Ϥ6;#G`<X*k3EǀCpp[*U'gݒ1; 8ePΘMEQJHSRU8EHOW+ۄlODX\LY)jk1Q idT҂{9I`i!ÉcD,*!{#vr0%_a6L@s0`h`s3v] QU]?Ԗ9E{HZt\tMsofd4]<>zySrhZùp3&v_t Kh3/6Vt. Tiw_u/q 0v` -ł]FtacŦđ sxwu!>)Ҿ͉{?safecopy-1.7/test/test3/test1.badblocks0000644000175100001440000000000411202053543017141 0ustar ravenusers5 6 safecopy-1.7/test/test3/test3.badblocks0000644000175100001440000000000611202053543017145 0ustar ravenusers2 5 6 safecopy-1.7/test/test3/test.sh0000755000175100001440000000360411726747607015610 0ustar ravenusers#!/bin/sh test_name="safecopy, restoring data with persistant and non-persistant IO errors" source "../libtestsuite.sh" function test_current() { testsuite_debug "Test, softerrors must be recovered, hard errors stated in badblocks file." LD_PRELOAD="$preload" $safecopy -R 3 -b 1024 -f 4* -o "$testsuite_tmpdir/test1.badblocks" debug "$testsuite_tmpdir/test1.dat" >"$testsuite_tmpdir/test1.out" 2>&1 if [ $? != 1 ]; then testsuite_error "Run of safecopy returned wrong exit code. Output:" testsuite_debug_file "$testsuite_tmpdir/test1.out" fi testsuite_assert_files_identical "test1.dat" "$testsuite_tmpdir/test1.dat" testsuite_assert_files_identical "test1.badblocks" "$testsuite_tmpdir/test1.badblocks" testsuite_debug "Test, no recovery of soft errors and skipping of blocks behind soft errors. (7,8,9)" LD_PRELOAD="$preload" $safecopy -R 2 -b 1024 -f 4* -o "$testsuite_tmpdir/test2.badblocks" debug "$testsuite_tmpdir/test2.dat" >"$testsuite_tmpdir/test2.out" 2>&1 if [ $? != 1 ]; then testsuite_error "Run of safecopy returned wrong exit code. Output:" testsuite_debug_file "$testsuite_tmpdir/test2.out" fi testsuite_assert_files_identical "test2.dat" "$testsuite_tmpdir/test2.dat" testsuite_assert_files_identical "test2.badblocks" "$testsuite_tmpdir/test2.badblocks" testsuite_debug "Test, no recovery of soft errors but no skipped blocks either." LD_PRELOAD="$preload" $safecopy -R 2 -b 1024 -f 2* -o "$testsuite_tmpdir/test3.badblocks" debug "$testsuite_tmpdir/test3.dat" >"$testsuite_tmpdir/test3.out" 2>&1 if [ $? != 1 ]; then testsuite_error "Run of safecopy returned wrong exit code. Output:" testsuite_debug_file "$testsuite_tmpdir/test3.out" fi testsuite_assert_files_identical "test3.dat" "$testsuite_tmpdir/test3.dat" testsuite_assert_files_identical "test3.badblocks" "$testsuite_tmpdir/test3.badblocks" } testsuite_runtest safecopy-1.7/test/test3/test2.badblocks0000644000175100001440000000002011202053543017140 0ustar ravenusers2 3 4 5 6 7 8 9 safecopy-1.7/test/test8/0000755000175100001440000000000011726756524014272 5ustar ravenuserssafecopy-1.7/test/test8/simulator.cfg0000644000175100001440000000023111202053544016743 0ustar ravenusersblocksize=1024 filesize=20480 source=test.dat softfailcount=2 hardfail=2 hardfail=4 hardfail=5 hardfail=8 hardfail=9 hardfail=10 hardfail=11 hardfail=12 safecopy-1.7/test/test8/test1.dat0000644000175100001440000004000011202053544015773 0ustar ravenusers OCYly|4E4<8Muo ygE t:?-&HV/*ҧ*$jJX"pFmV Zj2ŽߧP]j\va]]U:q@AbʒBJU :ʙ/eHp_S(%9)C6%FBZ&qh8&/TQ{>E޼4Z(i"> >y/V0 /M HQezcp*op*OV6n)g)Q6Q=$c*Bƚ ?.&+XgEܚoYgL|߅l& I/ѡI'> ~:\@/w8V|79gv"IpWВ k!>֯z~>̜GVio|:'v< 0مd"~[ HrŒoj"Wn,8W+U~@Vۅazܠsvyf+Hz:kbů@< (*&p;`;/!=Y aE٩لZ O˹=,TٺX\q8>{K}3qq)W >:LYBT6+0jwƠ[>{'08`yYc~b#yu1ih<7tqWJYfeܐHQ"*V hfDIt"TR:#Q2ȠJf}1BOo'60m'2ubsO3: 4\e  檊ZqZ Uǐ15@`<[l^ЏwLWXvAm> OCYly|4E4<8Muo ygE t:?-&HV/*ҧ*$jJX"pFmV Zj2ŽߧP]j\va]]U:q@AbʒBJU :ʙ/eHp_S(%9)C6%FBZ&qh8&/TQ{>E޼4Z(i"> >y/V0 /M HQezcp*op*OV6n)g)Q6Q=$c*Bƚ ?.&+XgEܚoYgL|߅l& I/ѡI'> ~:\@/w8V|79gv"IpWВ k!>֯z~>̜GVio|:'v< 0مd"~[ HrŒoj"Wn,8W+U~@Vۅazܠsvyf+Hz:kbů@< (*&p;`;/!=Y aE٩لZ O˹=,TٺX\q8>{K}3qq)W >:LYBT6+0jwƠ[>{'08`yYc~b#yu1ih<7tqWJYfeܐHQ"*V hfDIt"TR:#Q2ȠJf}1BOo'60m'2ubsO3: 4\e  檊ZqZ Uǐ15@`<[l^ЏwLWXvAm>safecopy-1.7/test/test8/test2.dat0000644000175100001440000004000011202053544015774 0ustar ravenusers OCYly|4E4<8Muo ygE t:?-&HV/*ҧ*$jJX"pFmV Zj2ŽߧP]j\va]]U:q@AbʒBJU :ʙ/eHp_S(%9)C6%FBZ&qh8&/TQ{>E޼4Z(i"> >y/V0 /M HQezcp*op*OV6n)g)Q6Q=$c*Bƚ ?.&+XgEܚoYgL|߅l& I/ѡI'> ~:\@/w8V|79gv"IpWВ k!>֯z~>̜GVio|:'v< 0مd"~[ HrŒoj"Wn,8W+U~@Vۅazܠsvyf+Hz:kbů@< (*&p;`;/!=Y aE٩لZ O˹=,TٺX\q8>{K}3qq)W >:LYBT6+0jwƠ[>{'08`yYc~b#yu1ih<7tqWJYfeܐHQ"*V hfDIt"TR:#Q2ȠJf}1BOo'60m'2ubsO3: 4\e  檊ZqZ Uǐ15@`<[l^ЏwLWXvAm> OCYly|4E4<8Muo ygE t:?-&HV/*ҧ*$jJX"pFmV Zj2ŽߧP]j\va]]U:q@AbʒBJU :ʙ/eHp_S(%9)C6%FBZ&qh8&/TQ{>E޼4Z(i"> >y/V0 /M HQezcp*op*OV6n)g)Q6Q=$c*Bƚ ?.&+XgEܚoYgL|߅l& I/ѡI'> ~:\@/w8V|79gv"IpWВ k!>֯z~>̜GVio|:'v< 0مd"~[ HrŒoj"Wn,8W+U~@Vۅazܠsvyf+Hz:kbů@< (*&p;`;/!=Y aE٩لZ O˹=,TٺX\q8>{K}3qq)W >:LYBT6+0jwƠ[>{'08`yYc~b#yu1ih<7tqWJYfeܐHQ"*V hfDIt"TR:#Q2ȠJf}1BOo'60m'2ubsO3: 4\e  檊ZqZ Uǐ15@`<[l^ЏwLWXvAm>safecopy-1.7/test/test8/test.dat0000644000175100001440000005000011202053544015713 0ustar ravenusersŁcA< B줡YW#G`=m|^@1q3|Mf Si+HبV!BXw =vEgSf6$FW/~$5ìaN{:3{nսQ` #$׍(v_n""P#4ܕ{ Gc/DjLVŞ#LeA׭gV͊\?JE\;SAMcJZ RA%ߗdi =(@L9dj\l(3ZDQOkK3އjZ 3@An(GCZ9X'k*.zɘں㆕6Ƨ0\؅D5G#eTOPf'xoW6o` 4RGLv Eh$s7[dheuUm2RNU6\2As.akc ƬS9ڵX[ŮN1l9R%LwKbHD;c86=C([KZfd xg;LKWz'MwyGᱚE\}oi Gc+`v9eɹikʠn)p8X(bI)Ѐloטк?Rl\rdhUWCV1uȂV?3U`a :c[*^j +K, ѶrcqcJ<=AczgzNL }__nQ3dF0#u?$S/-\a7RDN!zZ% ۾Ppu[ >!Z%+p$t=rW~ǃgAبyf;`oPUiIZ*΅M&VY/ps{ex[^+[y1d|CACk:ȬՉS夐\04愞^ReɎMѼb\]>\F1[+RBMI¾-}54HufɱYRlF]cxYKaDSmcr4y[~^Էig:1\1 ZX.x%_h*g;tX$'#ne;+z )8hڠd&,W":*rs0ɴ[ v7>clO6N<$?$"ŒVwvL]7lBd6#Q^T4O@Թυǃa*1;1d?d+>` D׭yiI|+h aD{9(7h*[Z97R%xQI\^,W"<di=Bwbd x wVJ $Єȵ>޲3TJŷWp1F}K7 L{A꺫r(c,E<>so_#Ak7炊*=:P!?Jk)og y(<<|`,/&zQt6lv40զcfU[ua(.8$RG>)8]xY0hNyD82dzv ӟ hn^%ڽsx8_(og?K>x8Fr=BU:v'>,,xfk/jZ͋NkYkTʂM,VK%vkA!5NR'c-<6Yf^Q4 p `' g}1ˏdx74qӧ9:iɰW=`)Cgw[:߀,{A &&D_Z_y,fk55$W ;+F:~8Hph7b E=QOw4)^|كvD'\˸!İ|gn|Hw+) ([t-G5'W)ëVd$jjvA$o֩jI"=u: Y'Άĩ&'J۵mdi.O=PlW)So\s9Vj{c쩄NKBS@*x4+h;z-]~Y+o$_ZX.h"]7;2M`a%ҪX69b^ q79r8("@InZ20ƣvi* 𔛖vr`pbb=gO~T}ނãIoI 'h ϧq ]: OB(;0F~Քff_9 un=J0f"99KMpޜ)dPftph 4Ek}J+e~ܐSQrZEN5FQeKZ;:n߯"F.MXP2]w5U#Wʼn $5Cakz$bkgzc0@)ߊBlqz>7%5N=`D[,|@6B1;vYW2ii8mk%-7E.(&hz*Ç+G X)giۋR[s5bRl9Kx֛S@LkclVU2Slj\+$߸E+԰k )&H lڷ@8Lfm"0TGz{NlWy*y:H֎)'Pa͸57D`3F$JP,#o+29$8KB<)Vў ,Ө, b'Qb l4|-xV {q󀻯M)^{_{ՑZ$tvq=M(&~#F(EGZJd-ӌE5Ī5ⶱ/$Ċq/<F#t5R B/k~!G`'[%N _@lyЂsuJ 9g]̲Zhu ܻ2}y~%rO}vKbQmyH8nW1^k!\@;P҈4ō8}d1ѽlcL{ݯ[PqQ:M;Y)֍˗z!rCymBKYu-8ًE1k"5FdvG`>8fi;2MJi${[cFifC\[)QaĢ#n1.o#rP#=p%Z"YnZ*РHF*qU 3W%8>Ȗޫ0_VPE2BIF0u0JUcY]i{:@1E$4%,*I D`%@M!+19(Ӓ65dq1 (DZ,(pw4ULU!r`FOC<gRI$hz\-^qh*nSo;/;rq'= C Cq_@-9VsNL/2劵u0XuEv@Bm}n`0]0wS SQ\=00lx['|849m` Ț]ܯ_rzfNy JhmWyzc.6KWN' sPi0~ʖɍsx% ת8 QQf:\F;!lrļ~%D#b:ЯXC^VRQfkE0Ų+^2k4^昚߆ ٧Aǡ~AR1\_~So&[DVQZ'RJ)aChx;i3G +bTוtaM^6Lye(}405yWu:UUN, Q:3ͼ -v 0El Ъ[EwExݍLPBfFUfn.*A^IMYӱldk_ V7 3 ѕo99{io#ǐwi(KJ1zǢlU(Qc+v`Rh%sL7F]t"yxY,1~>_c*V"ϑ`S^RM@iz+*by>&=b7Kneq`m+׺|;gԀ8_3MO'(E?yr[& x/cT 5{J3PΗj}2UB@p`B9H`'\P9}{\N!6F}Tb5)Rx XekRepdick^b; &U?:?Sٟ8n r? Zݛ%<7g`|3:~4G<`CD 9@YK%f^Q>Sd&ٙE ־s =় 8Gu5"v  FwZT,xN OCYly|4E4<8Muo ygE t:?-&HV/*ҧ*$jJX"pFmV Zj2ŽߧP]j\va]]U:q@AbʒBJU :ʙ/eHp_S(%9)C6%FBZ&qh8&/TQ{>E޼4Z(i"> >y/V0 /M HQezcp*op*OV6n)g)Q6Q=$c*Bƚ ?.&+XgEܚoYgL|߅l& I/ѡI'> ~:\@/w8V|79gv"IpWВ k!>֯z~>̜GVio|:'v< 0مd"~[ HrŒoj"Wn,8W+U~@Vۅazܠsvyf+Hz:kbů@< (*&p;`;/!=Y aE٩لZ O˹=,TٺX\q8>{K}3qq)W >:LYBT6+0jwƠ[>{'08`yYc~b#yu1ih<7tqWJYfeܐHQ"*V hfDIt"TR:#Q2ȠJf}1BOo'60m'2ubsO3: 4\e  檊ZqZ Uǐ15@`<[l^ЏwLWXvAm>3Xߐo˫NqH?l҅a\T.ګ5InNPU9A`-vgx}/Fhzt-^XBhfk#:#t4Ę3GivG-4ZWuϒ?ꌋ A͇9YcRB415^˒G~d@՗UH@b?GG۳qԔ>Hꆖ%=[3Y CK8r,Kg Z+"JgnLEfd,͒_r`xrm뱃l⳽Nk̗q8k(Ȟt!,6Y.yp?-g9T[++ GGV-~"J~Qt0%zHϷvY 6͇y(doޠ7(>|/qc5J"$jiV!bЈ5k$y!) wX7̀Y}&Z yVeO[fHWboN} XС|fvAk C\H^lO*P9cR*ىD6? 41()6 8\؉@A=#2(TTَFB 8Y3hT23H[e!w 7Z ~YNeP6秛cȾď<0_yzl7͇ L d}P!2 A7J<#w2oDjzH2 ^{۾sg#wƱhڛ.j~6&^]hwcTRwCnRZ1$=ŋԎ7@,D bh2fL#aYj_+a_9A+fB>(H Y  ?mlZxZ\l6/V$K0'# .ND2+GFj: õWXm@0`\qބrL &B1 s:JQC XR*Q,tƉYw5Rj!ż0ίab&S|-KdBP[5N۵- <_PK^bH29iPbpyQ y[֡ڃ[ a" =F 0#I-&m2uOP&8<U==gRw>9rאg4ZBԳhɗ/R8RĪzX'\.m,2?jO{LFC@/#ǵ?0el to]Idp˕1ReQuBuQ +ET 46- Oqѷe=Nf0[Tv<%֌*{h,CkZ \!ӪɉW*#R1yX-;6sBBR1BrzEN ~9C\8- 4HHT h~a>^qG32$tqw  SYb0C UK@h}晤<Ϥ6;#G`<X*k3EǀCpp[*U'gݒ1; 8ePΘMEQJHSRU8EHOW+ۄlODX\LY)jk1Q idT҂{9I`i!ÉcD,*!{#vr0%_a6L@s0`h`s3v] QU]?Ԗ9E{HZt\tMsofd4]<>zySrhZùp3&v_t Kh3/6Vt. Tiw_u/q 0v` -ł]FtacŦđ sxwu!>)Ҿ͉{?ŁcA< B줡YW#G`=m|^@1q3|Mf Si+HبV!BXw =vEgSf6$FW/~$5ìaN{:3{nսQ` #$׍(v_n""P#4ܕ{ Gc/DjLVŞ#LeA׭gV͊\?JE\;SAMcJZ RA%ߗdi =(@L9dj\l(3ZDQOkK3އjZ 3@An(GCZ9X'k*.zɘں㆕6Ƨ0\؅D5G#eTOPf'xoW6o` 4RGLv Eh$s7[dheuUm2RNU6\2As.akc ƬS9ڵX[ŮN1l9R%LwKbHD;c86=C([KZfd xg;LKWz'MwyGᱚE\}oi Gc+`v9eɹikʠn)p8X(bI)Ѐloטк?Rl\rdhUWCV1uȂV?3U`a :c[*^j +K, ѶrcqcJ<=AczgzNL }__nQ3dF0#u?$S/-\a7RDN!zZ% ۾Ppu[ >!Z%+p$t=rW~ǃgAبyf;`oPUiIZ*΅M&VY/ps{ex[^+[y1d|CACk:ȬՉS夐\04愞^ReɎMѼb\]>\F1[+RBMI¾-}54HufɱYRlF]cxYKaDSmcr4y[~^Էig:1\1 ZX.x%_h*g;tX$'#ne;+z )8hڠd&,W":*rs0ɴ[ v7>clO6N<$?$"ŒVwvL]7lBd6#Q^T4O@Թυǃa*1;1d?d+>` D׭yiI|+h aD{9(7h*[Z97R%xQI\^,W"<di=Bwbd x wVJ $Єȵ>޲3TJŷWp1F}K7 L{A꺫r(c,E<>so_#Ak7炊*=:P!?Jk)og y(<<|`,/&zQt6lv40զcfU[ua(.8$RG>)8]xY0hNyD82dzv ӟ hn^%ڽsx8_(og?K>x8Fr=BU:v'>,,xfk/jZ͋NkYkTʂM,VK%vkA!5NR'c-<6Yf^Q4 p `' g}1ˏdx74qӧ9:iɰW=`)Cgw[:߀,{A &&D_Z_y,fk55$W ;+F:~8Hph7b E=QOw4)^|كvD'\˸!İ|gn|Hw+) ([t-G5'W)ëVd$jjvA$o֩jI"=u: Y'Άĩ&'J۵mdi.O=PlW)So\s9Vj{c쩄NKBS@*x4+h;z-]~Y+o$_ZX.h"]7;2M`a%ҪX69b^ q79r8("@InZ20ƣvi* 𔛖vr`pbb=gO~T}ނãIoI 'h ϧq ]: OB(;0F~Քff_9 un=J0f"99KMpޜ)dPftph 4Ek}J+e~ܐSQrZEN5FQeKZ;:n߯"F.MXP2]w5U#Wʼn $5Cakz$bkgzc0@)ߊBlqz>7%5N=`D[,|@6B1;vYW2ii8mk%-7E.(&hz*Ç+G X)giۋR[s5bRl9Kx֛S@LkclVU2Slj\+$߸E+԰k )&H lڷ@8Lfm"0TGz{NlWy*y:H֎)'Pa͸57D`3F$JP,#o+29$8KB<)Vў ,Ө, b'Qb l4|-xV {q󀻯M)^{_{ՑZ$tvq=M(&~#F(EGZJd-ӌE5Ī5ⶱ/$Ċq/<F#t5R B/k~!G`'[%N _@lyЂsuJ 9g]̲Zhu ܻ2}y~%rO}vKbQmyH8nW1^k!\@;P҈4ō8}d1ѽlcL{ݯ[PqQ:M;Y)֍˗z!rCymBKYu-8ًE1k"5FdvG`>8fi;2MJi${[cFifC\[)QaĢ#n1.o#rP#=p%Z"YnZ*РHF*qU 3W%8>Ȗޫ0_VPE2BIF0u0JUcY]i{:@1E$4%,*I D`%@M!+19(Ӓ65dq1 (DZ,(pw4ULU!r`FOC<gRI$hz\-^qh*nSo;/;rq'= C Cq_@-9VsNL/2劵u0XuEv@Bm}n`0]0wS SQ\=00lx['|849m` Ț]ܯ_rzfNy JhmWyzc.6KWN' sPi0~ʖɍsx% ת8 QQf:\F;!lrļ~%D#b:ЯXC^VRQfkE0Ų+^2k4^昚߆ ٧Aǡ~AR1\_~So&[DVQZ'RJ)aChx;i3G +bTוtaM^6Lye(}405yWu:UUN, Q:3ͼ -v 0El Ъ[EwExݍLPBfFUfn.*A^IMYӱldk_ V7 3 ѕo99{io#ǐwi(KJ1zǢlU(Qc+v`Rh%sL7F]t"yxY,1~>_c*V"ϑ`S^RM@iz+*by>&=b7Kneq`m+׺|;gԀ8_3MO'(E?yr[& x/cT 5{J3PΗj}2UB@p`B9H`'\P9}{\N!6F}Tb5)Rx XekRepdick^b; &U?:?Sٟ8n r? Zݛ%<7g`|3:~4G<`CD 9@YK%f^Q>Sd&ٙE ־s =় 8Gu5"v  FwZT,xN OCYly|4E4<8Muo ygE t:?-&HV/*ҧ*$jJX"pFmV Zj2ŽߧP]j\va]]U:q@AbʒBJU :ʙ/eHp_S(%9)C6%FBZ&qh8&/TQ{>E޼4Z(i"> >y/V0 /M HQezcp*op*OV6n)g)Q6Q=$c*Bƚ ?.&+XgEܚoYgL|߅l& I/ѡI'> ~:\@/w8V|79gv"IpWВ k!>֯z~>̜GVio|:'v< 0مd"~[ HrŒoj"Wn,8W+U~@Vۅazܠsvyf+Hz:kbů@< (*&p;`;/!=Y aE٩لZ O˹=,TٺX\q8>{K}3qq)W >:LYBT6+0jwƠ[>{'08`yYc~b#yu1ih<7tqWJYfeܐHQ"*V hfDIt"TR:#Q2ȠJf}1BOo'60m'2ubsO3: 4\e  檊ZqZ Uǐ15@`<[l^ЏwLWXvAm>3Xߐo˫NqH?l҅a\T.ګ5InNPU9A`-vgx}/Fhzt-^XBhfk#:#t4Ę3GivG-4ZWuϒ?ꌋ A͇9YcRB415^˒G~d@՗UH@b?GG۳qԔ>Hꆖ%=[3Y CK8r,Kg Z+"JgnLEfd,͒_r`xrm뱃l⳽Nk̗q8k(Ȟt!,6Y.yp?-g9T[++ GGV-~"J~Qt0%zHϷvY 6͇y(doޠ7(>|/qc5J"$jiV!bЈ5k$y!) wX7̀Y}&Z yVeO[fHWboN} XС|fvAk C\H^lO*P9cR*ىD6? 41()6 8\؉@A=#2(TTَFB 8Y3hT23H[e!w 7Z ~YNeP6秛cȾď<0_yzl7͇ L d}P!2 A7J<#w2oDjzH2 ^{۾sg#wƱhڛ.j~6&^]hwcTRwCnRZ1$=ŋԎ7@,D bh2fL#aYj_+a_9A+fB>(H Y  ?mlZxZ\l6/V$K0'# .ND2+GFj: õWXm@0`\qބrL &B1 s:JQC XR*Q,tƉYw5Rj!ż0ίab&S|-KdBP[5N۵- <_PK^bH29iPbpyQ y[֡ڃ[ a" =F 0#I-&m2uOP&8<U==gRw>9rאg4ZBԳhɗ/R8RĪzX'\.m,2?jO{LFC@/#ǵ?0el to]Idp˕1ReQuBuQ +ET 46- Oqѷe=Nf0[Tv<%֌*{h,CkZ \!ӪɉW*#R1yX-;6sBBR1BrzEN ~9C\8- 4HHT h~a>^qG32$tqw  SYb0C UK@h}晤<Ϥ6;#G`<X*k3EǀCpp[*U'gݒ1; 8ePΘMEQJHSRU8EHOW+ۄlODX\LY)jk1Q idT҂{9I`i!ÉcD,*!{#vr0%_a6L@s0`h`s3v] QU]?Ԗ9E{HZt\tMsofd4]<>zySrhZùp3&v_t Kh3/6Vt. Tiw_u/q 0v` -ł]FtacŦđ sxwu!>)Ҿ͉{?safecopy-1.7/test/test8/test3.dat0000644000175100001440000004000011202053544015775 0ustar ravenusers(;0F~Քff_9 un=J0f"99KMpޜ)dPftph 4Ek}J+e~ܐSQrZEN5FQeKZ;:n߯"F.MXP2]w5U#Wʼn $5Cakz$bkgzc0@)ߊBlqz>7%5N=`D[,|@6B1;vYW2ii8mk%-7E.(&hz*Ç+G X)giۋR[s5bRl9Kx֛S@LkclVU2Slj\+$߸E+԰k )&H lڷ@8Lfm"0TGz{NlWy*y:H֎)'Pa͸57D`3F$JP,#o+29$8KB<)Vў ,Ө, b'Qb l4|-xV {q󀻯M)^{_{ՑZ$tvq=M(&~#F(EGZJd-ӌE5Ī5ⶱ/$Ċq/<F#t5R B/k~!G`'[%N _@lyЂsuJ 9g]̲ZhuE t:?-&HV/*ҧ*$jJX"pFmV Zj2ŽߧP]j\va]]U:q@AbʒBJU :ʙ/eHp_S(%9)C6%FBZ&qh8&/TQ{>E޼4Z(i"> >y/V0 /M HQezcp*op*OV6n)g)Q6Q=$c*Bƚ ?.&+XgEܚoYgL|߅l& I/ѡI'> ~:\@/w8V|79gv"IpWВ k!>֯z~>̜GVio|:'v< 0مd"~[ HrŒoj"Wn,8W+U~@Vۅazܠsvyf+Hz:kbů@< (*&p;`;/!=Y aE٩لZ O˹=,TٺX\q8>{K}3qq)W >:LYBT6+0jwƠ[>{'08`yYc~b#yu1ih<7tqWJYfeܐHQ"*V hfDIt"TR:#Q2ȠJf}1BOo'60m'2ubsO3: 4\e  檊ZqZ Uǐ15@`<[l^ЏwLWXvAm>(;0F~Քff_9 un=J0f"99KMpޜ)dPftph 4Ek}J+e~ܐSQrZEN5FQeKZ;:n߯"F.MXP2]w5U#Wʼn $5Cakz$bkgzc0@)ߊBlqz>7%5N=`D[,|@6B1;vYW2ii8mk%-7E.(&hz*Ç+G X)giۋR[s5bRl9Kx֛S@LkclVU2Slj\+$߸E+԰k )&H lڷ@8Lfm"0TGz{NlWy*y:H֎)'Pa͸57D`3F$JP,#o+29$8KB<)Vў ,Ө, b'Qb l4|-xV {q󀻯M)^{_{ՑZ$tvq=M(&~#F(EGZJd-ӌE5Ī5ⶱ/$Ċq/<F#t5R B/k~!G`'[%N _@lyЂsuJ 9g]̲Zhu ܻ2}y~%rO}vKbQmyH8nW1^k!\@;P҈4ō8}d1ѽlcL{ݯ[PqQ:M;Y)֍˗z!rCymBKYu-8ًE1k"5FdvG`>8fi;2MJi${[cFifC\[)QaĢ#n1.o#rP#=p%Z"YnZ*РHF*qU 3W%8>Ȗޫ0_VPE2BIF0u0JUcY]i{:@1E$4%,*I D`%@M!+19(Ӓ65dq1 (DZ,(pw4ULU!r`FOC<gRI$hz\-^qh*nSo;/;rq'= C Cq_@-9VsNL/2劵u0XuEv@Bm}n`0]0wS SQ\=00lx['|849m` Ț]ܯ_rzfNy JhmWyzc.6KWN' sPi0~ʖɍsx% ת8 QQf:\F;!lrļ~%D#b:ЯXC^VRQfkE0Ų+^2k4^昚߆ ٧Aǡ~AR1\_~So&[DVQZ'RJ)aChx;i3G +bTוtaM^6Lye(}405yWu:UUN, Q:3ͼ -v 0El Ъ[EwExݍLPBfFUfn.*A^IMYӱldk_ V7 3 ѕo99{io#ǐwi(KJ1zǢlU(Qc+v`Rh%sL7F]t"yxY,1~>_c*V"ϑ`S^RM@iz+*by>&=b7Kneq`m+׺|;gԀ8_3MO'(E?yr[& x/cT 5{J3PΗj}2UB@p`B9H`'\P9}{\N!6F}Tb5)Rx XekRepdick^b; &U?:?Sٟ8n r? Zݛ%<7g`|3:~4G<`CD 9@YK%f^Q>Sd&ٙE ־s =় 8Gu5"v  FwZT,xN OCYly|4E4<8Muo ygE t:?-&HV/*ҧ*$jJX"pFmV Zj2ŽߧP]j\va]]U:q@AbʒBJU :ʙ/eHp_S(%9)C6%FBZ&qh8&/TQ{>E޼4Z(i"> >y/V0 /M HQezcp*op*OV6n)g)Q6Q=$c*Bƚ ?.&+XgEܚoYgL|߅l& I/ѡI'> ~:\@/w8V|79gv"IpWВ k!>֯z~>̜GVio|:'v< 0مd"~[ HrŒoj"Wn,8W+U~@Vۅazܠsvyf+Hz:kbů@< (*&p;`;/!=Y aE٩لZ O˹=,TٺX\q8>{K}3qq)W >:LYBT6+0jwƠ[>{'08`yYc~b#yu1ih<7tqWJYfeܐHQ"*V hfDIt"TR:#Q2ȠJf}1BOo'60m'2ubsO3: 4\e  檊ZqZ Uǐ15@`<[l^ЏwLWXvAm>safecopy-1.7/test/test8/test1.badblocks0000644000175100001440000000003611202053544017154 0ustar ravenusers2 3 4 5 8 9 10 11 12 13 14 15 safecopy-1.7/test/test8/test3.badblocks0000644000175100001440000000002311202053544017152 0ustar ravenusers2 4 5 8 9 10 11 12 safecopy-1.7/test/test8/test.sh0000755000175100001440000001052511726747607015615 0ustar ravenusers#!/bin/sh test_name="safecopy, incremental recovery with startoffset and size limit" source "../libtestsuite.sh" function test_current() { testsuite_debug "copying reference files for safecopy" cp "test1.dat" "$testsuite_tmpdir/test2.dat" >/dev/null 2>&1 cp "test1.dat" "$testsuite_tmpdir/test3.dat" >/dev/null 2>&1 cp "test1.dat" "$testsuite_tmpdir/test4.dat" >/dev/null 2>&1 cp "test1.dat" "$testsuite_tmpdir/test5.dat" >/dev/null 2>&1 testsuite_assert_files_identical "test1.dat" "$testsuite_tmpdir/test2.dat" testsuite_assert_files_identical "test1.dat" "$testsuite_tmpdir/test3.dat" testsuite_assert_files_identical "test1.dat" "$testsuite_tmpdir/test4.dat" testsuite_assert_files_identical "test1.dat" "$testsuite_tmpdir/test5.dat" testsuite_debug "Test, first run with big skipsize and resolution to produce output with holes" LD_PRELOAD="$preload" $safecopy -R 2 -b 1024 -f 4* -r 4* -s 2 -l 16 -o "$testsuite_tmpdir/test1.badblocks" debug "$testsuite_tmpdir/test1.dat" >"$testsuite_tmpdir/test1.out" 2>&1 if [ $? != 1 ]; then testsuite_error "Run of safecopy returned wrong exit code. Output:" testsuite_debug_file "$testsuite_tmpdir/test1.out" fi testsuite_assert_files_identical "test1.dat" "$testsuite_tmpdir/test1.dat" testsuite_assert_files_identical "test1.badblocks" "$testsuite_tmpdir/test1.badblocks" testsuite_debug "Test, incremental, big skipsize, small resolution." testsuite_debug " Must recover data at the end of bad areas but not overwrite already recovered data" testsuite_debug " will recover block 6 and 7 but not the data at file end due to size limit" LD_PRELOAD="$preload" $safecopy -R 2 -b 1024 -f 8* -s 2 -l 16 -I "$testsuite_tmpdir/test1.badblocks" -o "$testsuite_tmpdir/test2.badblocks" debug "$testsuite_tmpdir/test2.dat" >"$testsuite_tmpdir/test2.out" 2>&1 if [ $? != 1 ]; then testsuite_error "Run of safecopy returned wrong exit code. Output:" testsuite_debug_file "$testsuite_tmpdir/test2.out" fi testsuite_assert_files_identical "test2.dat" "$testsuite_tmpdir/test2.dat" testsuite_assert_files_identical "test2.badblocks" "$testsuite_tmpdir/test2.badblocks" testsuite_debug "Test, incremental, small skipsize and resolution." testsuite_debug " Must recover all recoverable data within size limit" LD_PRELOAD="$preload" $safecopy -R 2 -b 1024 -f 1* -s 2 -l 16 -I "$testsuite_tmpdir/test1.badblocks" -o "$testsuite_tmpdir/test3.badblocks" debug "$testsuite_tmpdir/test3.dat" >"$testsuite_tmpdir/test3.out" 2>&1 if [ $? != 1 ]; then testsuite_error "Run of safecopy returned wrong exit code. Output:" testsuite_debug_file "$testsuite_tmpdir/test3.out" fi testsuite_assert_files_identical "test3.dat" "$testsuite_tmpdir/test3.dat" testsuite_assert_files_identical "test3.badblocks" "$testsuite_tmpdir/test3.badblocks" testsuite_debug "Test, incremental, big skipsize, small resolution, with marking." testsuite_debug " Must recover data at the end of bad areas but not overwrite already recovered data" testsuite_debug " will recover block 6 and 7 but not the data at file end due to size limit" LD_PRELOAD="$preload" $safecopy -M "MARKBAAD" -R 2 -b 1024 -f 8* -s 2 -l 16 -I "$testsuite_tmpdir/test1.badblocks" -o "$testsuite_tmpdir/test4.badblocks" debug "$testsuite_tmpdir/test4.dat" >"$testsuite_tmpdir/test4.out" 2>&1 if [ $? != 1 ]; then testsuite_error "Run of safecopy returned wrong exit code. Output:" testsuite_debug_file "$testsuite_tmpdir/test4.out" fi testsuite_assert_files_identical "test4.dat" "$testsuite_tmpdir/test4.dat" testsuite_assert_files_identical "test2.badblocks" "$testsuite_tmpdir/test4.badblocks" testsuite_debug "Test, incremental, small skipsize and resolution, with marking." testsuite_debug " Must recover all recoverable data, and mark the rest within size limit" LD_PRELOAD="$preload" $safecopy -M "MARKBAAD" -R 2 -b 1024 -f 1* -s 2 -l 16 -I "$testsuite_tmpdir/test1.badblocks" -o "$testsuite_tmpdir/test5.badblocks" debug "$testsuite_tmpdir/test5.dat" >"$testsuite_tmpdir/test5.out" 2>&1 if [ $? != 1 ]; then testsuite_error "Run of safecopy returned wrong exit code. Output:" testsuite_debug_file "$testsuite_tmpdir/test5.out" fi testsuite_assert_files_identical "test5.dat" "$testsuite_tmpdir/test5.dat" testsuite_assert_files_identical "test3.badblocks" "$testsuite_tmpdir/test5.badblocks" } testsuite_runtest safecopy-1.7/test/test8/test2.badblocks0000644000175100001440000000003611202053544017155 0ustar ravenusers2 3 4 5 8 9 10 11 12 13 14 15 safecopy-1.7/test/test8/test5.dat0000644000175100001440000004000011202053544015777 0ustar ravenusersMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAAD(;0F~Քff_9 un=J0f"99KMpޜ)dPftph 4Ek}J+e~ܐSQrZEN5FQeKZ;:n߯"F.MXP2]w5U#Wʼn $5Cakz$bkgzc0@)ߊBlqz>7%5N=`D[,|@6B1;vYW2ii8mk%-7E.(&hz*Ç+G X)giۋR[s5bRl9Kx֛S@LkclVU2Slj\+$߸E+԰k )&H lڷ@8Lfm"0TGz{NlWy*y:H֎)'Pa͸57D`3F$JP,#o+29$8KB<)Vў ,Ө, b'Qb l4|-xV {q󀻯M)^{_{ՑZ$tvq=M(&~#F(EGZJd-ӌE5Ī5ⶱ/$Ċq/<F#t5R B/k~!G`'[%N _@lyЂsuJ 9g]̲ZhuE t:?-&HV/*ҧ*$jJX"pFmV Zj2ŽߧP]j\va]]U:q@AbʒBJU :ʙ/eHp_S(%9)C6%FBZ&qh8&/TQ{>E޼4Z(i"> >y/V0 /M HQezcp*op*OV6n)g)Q6Q=$c*Bƚ ?.&+XgEܚoYgL|߅l& I/ѡI'> ~:\@/w8V|79gv"IpWВ k!>֯z~>̜GVio|:'v< 0مd"~[ HrŒoj"Wn,8W+U~@Vۅazܠsvyf+Hz:kbů@< (*&p;`;/!=Y aE٩لZ O˹=,TٺX\q8>{K}3qq)W >:LYBT6+0jwƠ[>{'08`yYc~b#yu1ih<7tqWJYfeܐHQ"*V hfDIt"TR:#Q2ȠJf}1BOo'60m'2ubsO3: 4\e  檊ZqZ Uǐ15@`<[l^ЏwLWXvAm>MARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAAD(;0F~Քff_9 un=J0f"99KMpޜ)dPftph 4Ek}J+e~ܐSQrZEN5FQeKZ;:n߯"F.MXP2]w5U#Wʼn $5Cakz$bkgzc0@)ߊBlqz>7%5N=`D[,|@6B1;vYW2ii8mk%-7E.(&hz*Ç+G X)giۋR[s5bRl9Kx֛S@LkclVU2Slj\+$߸E+԰k )&H lڷ@8Lfm"0TGz{NlWy*y:H֎)'Pa͸57D`3F$JP,#o+29$8KB<)Vў ,Ө, b'Qb l4|-xV {q󀻯M)^{_{ՑZ$tvq=M(&~#F(EGZJd-ӌE5Ī5ⶱ/$Ċq/<F#t5R B/k~!G`'[%N _@lyЂsuJ 9g]̲Zhu ܻ2}y~%rO}vKbQmyH8nW1^k!\@;P҈4ō8}d1ѽlcL{ݯ[PqQ:M;Y)֍˗z!rCymBKYu-8ًE1k"5FdvG`>8fi;2MJi${[cFifC\[)QaĢ#n1.o#rP#=p%Z"YnZ*РHF*qU 3W%8>Ȗޫ0_VPE2BIF0u0JUcY]i{:@1E$4%,*I D`%@M!+19(Ӓ65dq1 (DZ,(pw4ULU!r`FOC<gRI$hz\-^qh*nSo;/;rq'= C Cq_@-9VsNL/2劵u0XuEv@Bm}n`0]0wS SQ\=00lx['|849m` Ț]ܯ_rzfNy JhmWyzc.6KWN' sPi0~ʖɍsx% ת8 QQf:\F;!lrļ~%D#b:ЯXC^VRQfkE0Ų+^2k4^昚߆ ٧Aǡ~AR1\_~So&[DVQZ'RJ)aChx;i3G +bTוtaM^6Lye(}405yWu:UUN, Q:3ͼ -v 0El Ъ[EwExݍLPBfFUfn.*A^IMYӱldk_ V7 3 ѕo99{io#ǐwi(KJ1zǢlU(Qc+v`Rh%sL7F]t"yxY,1~>_c*V"ϑ`S^RM@iz+*by>&=b7Kneq`m+׺|;gԀ8_3MO'(E?yr[& x/cT 5{J3PΗj}2UB@p`B9H`'\P9}{\N!6F}Tb5)Rx XekRepdick^b; &U?:?Sٟ8n r? Zݛ%<7g`|3:~4G<`CD 9@YK%f^Q>Sd&ٙE ־s =় 8Gu5"v  FwZT,xN OCYly|4E4<8Muo ygE t:?-&HV/*ҧ*$jJX"pFmV Zj2ŽߧP]j\va]]U:q@AbʒBJU :ʙ/eHp_S(%9)C6%FBZ&qh8&/TQ{>E޼4Z(i"> >y/V0 /M HQezcp*op*OV6n)g)Q6Q=$c*Bƚ ?.&+XgEܚoYgL|߅l& I/ѡI'> ~:\@/w8V|79gv"IpWВ k!>֯z~>̜GVio|:'v< 0مd"~[ HrŒoj"Wn,8W+U~@Vۅazܠsvyf+Hz:kbů@< (*&p;`;/!=Y aE٩لZ O˹=,TٺX\q8>{K}3qq)W >:LYBT6+0jwƠ[>{'08`yYc~b#yu1ih<7tqWJYfeܐHQ"*V hfDIt"TR:#Q2ȠJf}1BOo'60m'2ubsO3: 4\e  檊ZqZ Uǐ15@`<[l^ЏwLWXvAm>safecopy-1.7/test/test8/test4.dat0000644000175100001440000004000011202053544015776 0ustar ravenusersMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAAD OCYly|4E4<8Muo ygE t:?-&HV/*ҧ*$jJX"pFmV Zj2ŽߧP]j\va]]U:q@AbʒBJU :ʙ/eHp_S(%9)C6%FBZ&qh8&/TQ{>E޼4Z(i"> >y/V0 /M HQezcp*op*OV6n)g)Q6Q=$c*Bƚ ?.&+XgEܚoYgL|߅l& I/ѡI'> ~:\@/w8V|79gv"IpWВ k!>֯z~>̜GVio|:'v< 0مd"~[ HrŒoj"Wn,8W+U~@Vۅazܠsvyf+Hz:kbů@< (*&p;`;/!=Y aE٩لZ O˹=,TٺX\q8>{K}3qq)W >:LYBT6+0jwƠ[>{'08`yYc~b#yu1ih<7tqWJYfeܐHQ"*V hfDIt"TR:#Q2ȠJf}1BOo'60m'2ubsO3: 4\e  檊ZqZ Uǐ15@`<[l^ЏwLWXvAm>MARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAAD OCYly|4E4<8Muo ygE t:?-&HV/*ҧ*$jJX"pFmV Zj2ŽߧP]j\va]]U:q@AbʒBJU :ʙ/eHp_S(%9)C6%FBZ&qh8&/TQ{>E޼4Z(i"> >y/V0 /M HQezcp*op*OV6n)g)Q6Q=$c*Bƚ ?.&+XgEܚoYgL|߅l& I/ѡI'> ~:\@/w8V|79gv"IpWВ k!>֯z~>̜GVio|:'v< 0مd"~[ HrŒoj"Wn,8W+U~@Vۅazܠsvyf+Hz:kbů@< (*&p;`;/!=Y aE٩لZ O˹=,TٺX\q8>{K}3qq)W >:LYBT6+0jwƠ[>{'08`yYc~b#yu1ih<7tqWJYfeܐHQ"*V hfDIt"TR:#Q2ȠJf}1BOo'60m'2ubsO3: 4\e  檊ZqZ Uǐ15@`<[l^ЏwLWXvAm>safecopy-1.7/test/test4/0000755000175100001440000000000011726756524014266 5ustar ravenuserssafecopy-1.7/test/test4/simulator.cfg0000644000175100001440000000013711202053543016743 0ustar ravenusersblocksize=1024 filesize=10240 source=test.dat softfailcount=2 softfail=2 hardfail=8 hardfail=9 safecopy-1.7/test/test4/test1.dat0000644000175100001440000002000011202053543015764 0ustar ravenusersŁcA< B줡YW#G`=m|^@1q3|Mf Si+HبV!BXw =vEgSf6$FW/~$5ìaN{:3{nսQ` #$׍(v_n""P#4ܕ{ Gc/DjLVŞ#LeA׭gV͊\?JE\;SAMcJZ RA%ߗdi =(@L9dj\l(3ZDQOkK3އjZ 3@An(GCZ9X'k*.zɘں㆕6Ƨ0\؅D5G#eTOPf'xoW6o` 4RGLv Eh$s7[dheuUm2RNU6\2As.akc ƬS9ڵX[ŮN1l9R%LwKbHD;c86=C([KZfd xg;LKWz'MwyGᱚE\}oi Gc+`v9eɹikʠn)p8X(bI)Ѐloטк?Rl\rdhUWCV1uȂV?3U`a :c[*^j +K, ѶrcqcJ<=AczgzNL }__nQ3dF0#u?$S/-\a7RDN!zZ% ۾Ppu[ >!Z%+p$t=rW~ǃgAبyf;`oPUiIZ*΅M&VY/ps{ex[^+[y1d|CACk:ȬՉS夐\04愞^ReɎMѼb\]>\F1[+RBMI¾-}54HufɱYRlF]cxYKaDSmcr4y[~^Էig:1\1 ZX.x%_h*g;tX$'#ne;+z )8hڠd&,W":*rs0ɴ[ v7>clO6N<$?$"ŒVwvL]7lBd6#Q^T4O@Թυǃa*1;1d?d+>` D׭yiI|+h aD{9(7h*[Z97R%xQI\^,W"<di=Bwbd x wVJ $Єȵ>޲3TJŷWp1F}K7 L{A꺫r(c,E<>so_#Ak7炊*=:P!?Jk)(;0F~Քff_9 un=J0f"99KMpޜ)dPftph 4Ek}J+e~ܐSQrZEN5FQeKZ;:n߯"F.MXP2]w5U#Wʼn $5Cakz$bkgzc0@)ߊBlqz>7%5N=`D[,|@6B1;vYW2ii8mk%-7E.(&hz*Ç+G X)giۋR[s5bRl9Kx֛S@LkclVU2Slj\+$߸E+԰k )&H lڷ@8Lfm"0TGz{NlWy*y:H֎)'Pa͸57D`3F$JP,#o+29$8KB<)Vў ,Ө, b'Qb l4|-xV {q󀻯M)^{_{ՑZ$tvq=M(&~#F(EGZJd-ӌE5Ī5ⶱ/$Ċq/<F#t5R B/k~!G`'[%N _@lyЂsuJ 9g]̲Zhu ܻ2}y~%rO}vKbQmyH8nW1^k!\@;P҈4ō8}d1ѽlcL{ݯ[PqQ:M;Y)֍˗z!rCymBKYu-8ًE1k"5FdvG`>8fi;2MJi${[cFifC\[)QaĢ#n1.o#rP#=p%Z"YnZ*РHF*qU 3W%8>Ȗޫ0_VPE2BIF0u0JUcY]i{:@1E$4%,*I D`%@M!+19(Ӓ65dq1 (DZ,(pw4ULU!r`FOC<gRI$hz\-^qh*nSo;/;rq'= C Cq_@-9VsNL/2劵u0XuEv@Bm}n`0]0wS SQ\=00lx['|849m` Ț]ܯ_rzfNy JhmWyzc.6KWN' sPi0~ʖɍsx% ת8 QQf:\F;!lrļ~%D#b:ЯXC^VRQfkE0Ų+^2k4^昚߆ ٧Aǡ~AR1\_~So&[DVQZ'RJ)aChx;i3G +bTוtaM^6Lye(}405yWu:UUN, Q:3ͼ -v 0El Ъ[EwExݍLPBfFUfn.*A^IMYӱldk_ V7 3 ѕo99{io#ǐwi(KJ1zǢlU(Qc+v`Rh%sL7F]t"yxY,1~>_c*V"ϑ`S^RM@iz+*by>&=b7Kneq`m+׺|;gԀ8_3MO'(E?yr[& x/cT 5{J3PΗj}2UB@p`B9H`'\P9}{\N!6F}Tb5)Rx XekRepdick^b; &U?:?Sٟ8n r? Zݛ%<7g`|3:~4G<`CD 9@YK%f^Q>Sd&ٙE ־s =় 8Gu5"v  FwZT,xN OCYly|4E4<8Muo ygE t:?-&HV/*ҧ*$jJX"pFmV Zj2ŽߧP]j\va]]U:q@AbʒBJU :ʙ/eHp_S(%9)C6%FBZ&qh8&/TQ{>E޼4Z(i"> >y/V0 /M HQezcp*op*OV6n)g)Q6Q=$c*Bƚ ?.&+XgEܚoYgL|߅l& I/ѡI'> ~:\@/w8V|79gv"IpWВ k!>֯z~>̜GVio|:'v< 0مd"~[ HrŒoj"Wn,8W+U~@Vۅazܠsvyf+Hz:kbů@< (*&p;`;/!=Y aE٩لZ O˹=,TٺX\q8>{K}3qq)W >:LYBT6+0jwƠ[>{'08`yYc~b#yu1ih<7tqWJYfeܐHQ"*V hfDIt"TR:#Q2ȠJf}1BOo'60m'2ubsO3: 4\e  檊ZqZ Uǐ15@`<[l^ЏwLWXvAm>safecopy-1.7/test/test4/test2.dat0000644000175100001440000002000011202053543015765 0ustar ravenusersŁcA< B줡YW#G`=m|^@1q3|Mf Si+HبV!BXw =vEgSf6$FW/~$5ìaN{:3{nսQ` #$׍(v_n""P#4ܕ{ Gc/DjLVŞ#LeA׭gV͊\?JE\;SAMcJZ RA%ߗdi =(@L9dj\l(3ZDQOkK3އjZ 3@An(GCZ9X'k*.zɘں㆕6Ƨ0\؅D5G#eTOPf'xoW6o` 4RGLv Eh$s7[dheuUm2RNU6\2As.akc ƬS9ڵX[ŮN1l9R%LwKbHD;c86=C([KZfd xg;LKWz'MwyGᱚE\}oi Gc+`v9eɹikʠn)p8X(bI)Ѐloטк?Rl\rdhUWCV1uȂV?3U`a :c[*^j +K, ѶrcqcJ<=AczgzNL }__nQ3dF0#u?$S/-\a7RDN!zZ% ۾Ppu[ >!Z%+p$t=rW~ǃgAبyf;`oPUiIZ*΅M&VY/ps{ex[^+[y1d|CACk:ȬՉS夐\04愞^ReɎMѼb\]>\F1[+RBMI¾-}54HufɱYRlF]cxYKaDSmcr4y[~^Էig:1\1 ZX.x%_h*g;tX$'#ne;+z )8hڠd&,W":*rs0ɴ[ v7>clO6N<$?$"ŒVwvL]7lBd6#Q^T4O@Թυǃa*1;1d?d+>` D׭yiI|+h aD{9(7h*[Z97R%xQI\^,W"<di=Bwbd x wVJ $Єȵ>޲3TJŷWp1F}K7 L{A꺫r(c,E<>so_#Ak7炊*=:P!?Jk)og y(<<|`,/&zQt6lv40զcfU[ua(.8$RG>)8]xY0hNyD82dzv ӟ hn^%ڽsx8_(og?K>x8Fr=BU:v'>,,xfk/jZ͋NkYkTʂM,VK%vkA!5NR'c-<6Yf^Q4 p `' g}1ˏdx74qӧ9:iɰW=`)Cgw[:߀,{A &&D_Z_y,fk55$W ;+F:~8Hph7b E=QOw4)^|كvD'\˸!İ|gn|Hw+) ([t-G5'W)ëVd$jjvA$o֩jI"=u: Y'Άĩ&'J۵mdi.O=PlW)So\s9Vj{c쩄NKBS@*x4+h;z-]~Y+o$_ZX.h"]7;2M`a%ҪX69b^ q79r8("@InZ20ƣvi* 𔛖vr`pbb=gO~T}ނãIoI 'h ϧq ]: OB(;0F~Քff_9 un=J0f"99KMpޜ)dPftph 4Ek}J+e~ܐSQrZEN5FQeKZ;:n߯"F.MXP2]w5U#Wʼn $5Cakz$bkgzc0@)ߊBlqz>7%5N=`D[,|@6B1;vYW2ii8mk%-7E.(&hz*Ç+G X)giۋR[s5bRl9Kx֛S@LkclVU2Slj\+$߸E+԰k )&H lڷ@8Lfm"0TGz{NlWy*y:H֎)'Pa͸57D`3F$JP,#o+29$8KB<)Vў ,Ө, b'Qb l4|-xV {q󀻯M)^{_{ՑZ$tvq=M(&~#F(EGZJd-ӌE5Ī5ⶱ/$Ċq/<F#t5R B/k~!G`'[%N _@lyЂsuJ 9g]̲Zhu ܻ2}y~%rO}vKbQmyH8nW1^k!\@;P҈4ō8}d1ѽlcL{ݯ[PqQ:M;Y)֍˗z!rCymBKYu-8ًE1k"5FdvG`>8fi;2MJi${[cFifC\[)QaĢ#n1.o#rP#=p%Z"YnZ*РHF*qU 3W%8>Ȗޫ0_VPE2BIF0u0JUcY]i{:@1E$4%,*I D`%@M!+19(Ӓ65dq1 (DZ,(pw4ULU!r`FOC<gRI$hz\-^qh*nSo;/;rq'= C Cq_@-9VsNL/2劵u0XuEv@Bm}n`0]0wS SQ\=00lx['|849m` Ț]ܯ_rzfNy JhmWyzc.6KWN' sPi0~ʖɍsx% ת8 QQf:\F;!lrļ~%D#b:ЯXC^VRQfkE0Ų+^2k4^昚߆ ٧Aǡ~AR1\_~So&[DVQZ'RJ)aChx;i3G +bTוtaM^6Lye(}405yWu:UUN, Q:3ͼ -v 0El Ъ[EwExݍLPBfFUfn.*A^IMYӱldk_ V7 3 ѕo99{io#ǐwi(KJ1zǢlU(Qc+v`Rh%sL7F]t"yxY,1~>_c*V"ϑ`S^RM@iz+*by>&=b7Kneq`m+׺|;gԀ8_3MO'(E?yr[& x/cT 5{J3PΗj}2UB@p`B9H`'\P9}{\N!6F}Tb5)Rx XekRepdick^b; &U?:?Sٟ8n r? Zݛ%<7g`|3:~4G<`CD 9@YK%f^Q>Sd&ٙE ־s =় 8Gu5"v  FwZT,xN OCYly|4E4<8Muo ygE t:?-&HV/*ҧ*$jJX"pFmV Zj2ŽߧP]j\va]]U:q@AbʒBJU :ʙ/eHp_S(%9)C6%FBZ&qh8&/TQ{>E޼4Z(i"> >y/V0 /M HQezcp*op*OV6n)g)Q6Q=$c*Bƚ ?.&+XgEܚoYgL|߅l& I/ѡI'> ~:\@/w8V|79gv"IpWВ k!>֯z~>̜GVio|:'v< 0مd"~[ HrŒoj"Wn,8W+U~@Vۅazܠsvyf+Hz:kbů@< (*&p;`;/!=Y aE٩لZ O˹=,TٺX\q8>{K}3qq)W >:LYBT6+0jwƠ[>{'08`yYc~b#yu1ih<7tqWJYfeܐHQ"*V hfDIt"TR:#Q2ȠJf}1BOo'60m'2ubsO3: 4\e  檊ZqZ Uǐ15@`<[l^ЏwLWXvAm>safecopy-1.7/test/test4/test.dat0000644000175100001440000002400011202053543015707 0ustar ravenusersŁcA< B줡YW#G`=m|^@1q3|Mf Si+HبV!BXw =vEgSf6$FW/~$5ìaN{:3{nսQ` #$׍(v_n""P#4ܕ{ Gc/DjLVŞ#LeA׭gV͊\?JE\;SAMcJZ RA%ߗdi =(@L9dj\l(3ZDQOkK3އjZ 3@An(GCZ9X'k*.zɘں㆕6Ƨ0\؅D5G#eTOPf'xoW6o` 4RGLv Eh$s7[dheuUm2RNU6\2As.akc ƬS9ڵX[ŮN1l9R%LwKbHD;c86=C([KZfd xg;LKWz'MwyGᱚE\}oi Gc+`v9eɹikʠn)p8X(bI)Ѐloטк?Rl\rdhUWCV1uȂV?3U`a :c[*^j +K, ѶrcqcJ<=AczgzNL }__nQ3dF0#u?$S/-\a7RDN!zZ% ۾Ppu[ >!Z%+p$t=rW~ǃgAبyf;`oPUiIZ*΅M&VY/ps{ex[^+[y1d|CACk:ȬՉS夐\04愞^ReɎMѼb\]>\F1[+RBMI¾-}54HufɱYRlF]cxYKaDSmcr4y[~^Էig:1\1 ZX.x%_h*g;tX$'#ne;+z )8hڠd&,W":*rs0ɴ[ v7>clO6N<$?$"ŒVwvL]7lBd6#Q^T4O@Թυǃa*1;1d?d+>` D׭yiI|+h aD{9(7h*[Z97R%xQI\^,W"<di=Bwbd x wVJ $Єȵ>޲3TJŷWp1F}K7 L{A꺫r(c,E<>so_#Ak7炊*=:P!?Jk)og y(<<|`,/&zQt6lv40զcfU[ua(.8$RG>)8]xY0hNyD82dzv ӟ hn^%ڽsx8_(og?K>x8Fr=BU:v'>,,xfk/jZ͋NkYkTʂM,VK%vkA!5NR'c-<6Yf^Q4 p `' g}1ˏdx74qӧ9:iɰW=`)Cgw[:߀,{A &&D_Z_y,fk55$W ;+F:~8Hph7b E=QOw4)^|كvD'\˸!İ|gn|Hw+) ([t-G5'W)ëVd$jjvA$o֩jI"=u: Y'Άĩ&'J۵mdi.O=PlW)So\s9Vj{c쩄NKBS@*x4+h;z-]~Y+o$_ZX.h"]7;2M`a%ҪX69b^ q79r8("@InZ20ƣvi* 𔛖vr`pbb=gO~T}ނãIoI 'h ϧq ]: OB(;0F~Քff_9 un=J0f"99KMpޜ)dPftph 4Ek}J+e~ܐSQrZEN5FQeKZ;:n߯"F.MXP2]w5U#Wʼn $5Cakz$bkgzc0@)ߊBlqz>7%5N=`D[,|@6B1;vYW2ii8mk%-7E.(&hz*Ç+G X)giۋR[s5bRl9Kx֛S@LkclVU2Slj\+$߸E+԰k )&H lڷ@8Lfm"0TGz{NlWy*y:H֎)'Pa͸57D`3F$JP,#o+29$8KB<)Vў ,Ө, b'Qb l4|-xV {q󀻯M)^{_{ՑZ$tvq=M(&~#F(EGZJd-ӌE5Ī5ⶱ/$Ċq/<F#t5R B/k~!G`'[%N _@lyЂsuJ 9g]̲Zhu ܻ2}y~%rO}vKbQmyH8nW1^k!\@;P҈4ō8}d1ѽlcL{ݯ[PqQ:M;Y)֍˗z!rCymBKYu-8ًE1k"5FdvG`>8fi;2MJi${[cFifC\[)QaĢ#n1.o#rP#=p%Z"YnZ*РHF*qU 3W%8>Ȗޫ0_VPE2BIF0u0JUcY]i{:@1E$4%,*I D`%@M!+19(Ӓ65dq1 (DZ,(pw4ULU!r`FOC<gRI$hz\-^qh*nSo;/;rq'= C Cq_@-9VsNL/2劵u0XuEv@Bm}n`0]0wS SQ\=00lx['|849m` Ț]ܯ_rzfNy JhmWyzc.6KWN' sPi0~ʖɍsx% ת8 QQf:\F;!lrļ~%D#b:ЯXC^VRQfkE0Ų+^2k4^昚߆ ٧Aǡ~AR1\_~So&[DVQZ'RJ)aChx;i3G +bTוtaM^6Lye(}405yWu:UUN, Q:3ͼ -v 0El Ъ[EwExݍLPBfFUfn.*A^IMYӱldk_ V7 3 ѕo99{io#ǐwi(KJ1zǢlU(Qc+v`Rh%sL7F]t"yxY,1~>_c*V"ϑ`S^RM@iz+*by>&=b7Kneq`m+׺|;gԀ8_3MO'(E?yr[& x/cT 5{J3PΗj}2UB@p`B9H`'\P9}{\N!6F}Tb5)Rx XekRepdick^b; &U?:?Sٟ8n r? Zݛ%<7g`|3:~4G<`CD 9@YK%f^Q>Sd&ٙE ־s =় 8Gu5"v  FwZT,xN OCYly|4E4<8Muo ygE t:?-&HV/*ҧ*$jJX"pFmV Zj2ŽߧP]j\va]]U:q@AbʒBJU :ʙ/eHp_S(%9)C6%FBZ&qh8&/TQ{>E޼4Z(i"> >y/V0 /M HQezcp*op*OV6n)g)Q6Q=$c*Bƚ ?.&+XgEܚoYgL|߅l& I/ѡI'> ~:\@/w8V|79gv"IpWВ k!>֯z~>̜GVio|:'v< 0مd"~[ HrŒoj"Wn,8W+U~@Vۅazܠsvyf+Hz:kbů@< (*&p;`;/!=Y aE٩لZ O˹=,TٺX\q8>{K}3qq)W >:LYBT6+0jwƠ[>{'08`yYc~b#yu1ih<7tqWJYfeܐHQ"*V hfDIt"TR:#Q2ȠJf}1BOo'60m'2ubsO3: 4\e  檊ZqZ Uǐ15@`<[l^ЏwLWXvAm>3Xߐo˫NqH?l҅a\T.ګ5InNPU9A`-vgx}/Fhzt-^XBhfk#:#t4Ę3GivG-4ZWuϒ?ꌋ A͇9YcRB415^˒G~d@՗UH@b?GG۳qԔ>Hꆖ%=[3Y CK8r,Kg Z+"JgnLEfd,͒_r`xrm뱃l⳽Nk̗q8k(Ȟt!,6Y.yp?-g9T[++ GGV-~"J~Qt0%zHϷvY 6͇y(doޠ7(>|/qc5J"$jiV!bЈ5k$y!) wX7̀Y}&Z yVeO[fHWboN} XС|fvAk C\H^lO*P9cR*ىD6? 41()6 8\؉@A=#2(TTَFB 8Y3hT23H[e!w 7Z ~YNeP6秛cȾď<0_yzl7͇ L d}P!2 A7J<#w2oDjzH2 ^{۾sg#wƱhڛ.j~6&^]hwcTRwCnRZ1$=ŋԎ7@,D bh2fL#aYj_+a_9A+fB>(H Y  ?mlZxZ\l6/V$K0'# .ND2+GFj: õWXm@0`\qބrL &B1 s:JQC XR*Q,tƉYw5Rj!ż0ίab&S|-KdBP[5N۵- <_PK^bH29iPbpyQ y[֡ڃ[ a" =F 0#I-&m2uOP&8<U==gRw>9rאg4ZBԳhɗ/R8RĪzX'\.m,2?jO{LFC@/#ǵ?0el to]Idp˕1ReQuBuQ +ET 46- Oqѷe=Nf0[Tv<%֌*{h,CkZ \!ӪɉW*#R1yX-;6sBBR1BrzEN ~9C\8- 4HHT h~a>^qG32$tqw  SYb0C UK@h}晤<Ϥ6;#G`<X*k3EǀCpp[*U'gݒ1; 8ePΘMEQJHSRU8EHOW+ۄlODX\LY)jk1Q idT҂{9I`i!ÉcD,*!{#vr0%_a6L@s0`h`s3v] QU]?Ԗ9E{HZt\tMsofd4]<>zySrhZùp3&v_t Kh3/6Vt. Tiw_u/q 0v` -ł]FtacŦđ sxwu!>)Ҿ͉{?safecopy-1.7/test/test4/test3.dat0000644000175100001440000002400011202053543015772 0ustar ravenusersŁcA< B줡YW#G`=m|^@1q3|Mf Si+HبV!BXw =vEgSf6$FW/~$5ìaN{:3{nսQ` #$׍(v_n""P#4ܕ{ Gc/DjLVŞ#LeA׭gV͊\?JE\;SAMcJZ RA%ߗdi =(@L9dj\l(3ZDQOkK3އjZ 3@An(GCZ9X'k*.zɘں㆕6Ƨ0\؅D5G#eTOPf'xoW6o` 4RGLv Eh$s7[dheuUm2RNU6\2As.akc ƬS9ڵX[ŮN1l9R%LwKbHD;c86=C([KZfd xg;LKWz'MwyGᱚE\}oi Gc+`v9eɹikʠn)p8X(bI)Ѐloטк?Rl\rdhUWCV1uȂV?3U`a :c[*^j +K, ѶrcqcJ<=AczgzNL }__nQ3dF0#u?$S/-\a7RDN!zZ% ۾Ppu[ >!Z%+p$t=rW~ǃgAبyf;`oPUiIZ*΅M&VY/ps{ex[^+[y1d|CACk:ȬՉS夐\04愞^ReɎMѼb\]>\F1[+RBMI¾-}54HufɱYRlF]cxYKaDSmcr4y[~^Էig:1\1 ZX.x%_h*g;tX$'#ne;+z )8hڠd&,W":*rs0ɴ[ v7>clO6N<$?$"ŒVwvL]7lBd6#Q^T4O@Թυǃa*1;1d?d+>` D׭yiI|+h aD{9(7h*[Z97R%xQI\^,W"<di=Bwbd x wVJ $Єȵ>޲3TJŷWp1F}K7 L{A꺫r(c,E<>so_#Ak7炊*=:P!?Jk)MARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAAD(;0F~Քff_9 un=J0f"99KMpޜ)dPftph 4Ek}J+e~ܐSQrZEN5FQeKZ;:n߯"F.MXP2]w5U#Wʼn $5Cakz$bkgzc0@)ߊBlqz>7%5N=`D[,|@6B1;vYW2ii8mk%-7E.(&hz*Ç+G X)giۋR[s5bRl9Kx֛S@LkclVU2Slj\+$߸E+԰k )&H lڷ@8Lfm"0TGz{NlWy*y:H֎)'Pa͸57D`3F$JP,#o+29$8KB<)Vў ,Ө, b'Qb l4|-xV {q󀻯M)^{_{ՑZ$tvq=M(&~#F(EGZJd-ӌE5Ī5ⶱ/$Ċq/<F#t5R B/k~!G`'[%N _@lyЂsuJ 9g]̲Zhu ܻ2}y~%rO}vKbQmyH8nW1^k!\@;P҈4ō8}d1ѽlcL{ݯ[PqQ:M;Y)֍˗z!rCymBKYu-8ًE1k"5FdvG`>8fi;2MJi${[cFifC\[)QaĢ#n1.o#rP#=p%Z"YnZ*РHF*qU 3W%8>Ȗޫ0_VPE2BIF0u0JUcY]i{:@1E$4%,*I D`%@M!+19(Ӓ65dq1 (DZ,(pw4ULU!r`FOC<gRI$hz\-^qh*nSo;/;rq'= C Cq_@-9VsNL/2劵u0XuEv@Bm}n`0]0wS SQ\=00lx['|849m` Ț]ܯ_rzfNy JhmWyzc.6KWN' sPi0~ʖɍsx% ת8 QQf:\F;!lrļ~%D#b:ЯXC^VRQfkE0Ų+^2k4^昚߆ ٧Aǡ~AR1\_~So&[DVQZ'RJ)aChx;i3G +bTוtaM^6Lye(}405yWu:UUN, Q:3ͼ -v 0El Ъ[EwExݍLPBfFUfn.*A^IMYӱldk_ V7 3 ѕo99{io#ǐwi(KJ1zǢlU(Qc+v`Rh%sL7F]t"yxY,1~>_c*V"ϑ`S^RM@iz+*by>&=b7Kneq`m+׺|;gԀ8_3MO'(E?yr[& x/cT 5{J3PΗj}2UB@p`B9H`'\P9}{\N!6F}Tb5)Rx XekRepdick^b; &U?:?Sٟ8n r? Zݛ%<7g`|3:~4G<`CD 9@YK%f^Q>Sd&ٙE ־s =় 8Gu5"v  FwZT,xN OCYly|4E4<8Muo ygE t:?-&HV/*ҧ*$jJX"pFmV Zj2ŽߧP]j\va]]U:q@AbʒBJU :ʙ/eHp_S(%9)C6%FBZ&qh8&/TQ{>E޼4Z(i"> >y/V0 /M HQezcp*op*OV6n)g)Q6Q=$c*Bƚ ?.&+XgEܚoYgL|߅l& I/ѡI'> ~:\@/w8V|79gv"IpWВ k!>֯z~>̜GVio|:'v< 0مd"~[ HrŒoj"Wn,8W+U~@Vۅazܠsvyf+Hz:kbů@< (*&p;`;/!=Y aE٩لZ O˹=,TٺX\q8>{K}3qq)W >:LYBT6+0jwƠ[>{'08`yYc~b#yu1ih<7tqWJYfeܐHQ"*V hfDIt"TR:#Q2ȠJf}1BOo'60m'2ubsO3: 4\e  檊ZqZ Uǐ15@`<[l^ЏwLWXvAm>MARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADsafecopy-1.7/test/test4/test1.badblocks0000644000175100001440000000000611202053543017144 0ustar ravenusers2 8 9 safecopy-1.7/test/test4/test.sh0000755000175100001440000000464011726747607015612 0ustar ravenusers#!/bin/sh test_name="safecopy, copying from file with unreadable end" source "../libtestsuite.sh" function test_current() { testsuite_debug "Test, output file is cut short but badblocks output must state the missing blocks." LD_PRELOAD="$preload" $safecopy -R 2 -b 1024 -f 4* -o "$testsuite_tmpdir/test1.badblocks" debug "$testsuite_tmpdir/test1.dat" >"$testsuite_tmpdir/test1.out" 2>&1 if [ $? != 1 ]; then testsuite_error "Run of safecopy returned wrong exit code. Output:" testsuite_debug_file "$testsuite_tmpdir/test1.out" fi testsuite_assert_files_identical "test1.dat" "$testsuite_tmpdir/test1.dat" testsuite_assert_files_identical "test1.badblocks" "$testsuite_tmpdir/test1.badblocks" testsuite_debug "Test, same test again, now with a recovered soft error." LD_PRELOAD="$preload" $safecopy -R 3 -b 1024 -f 4* -o "$testsuite_tmpdir/test2.badblocks" debug "$testsuite_tmpdir/test2.dat" >"$testsuite_tmpdir/test2.out" 2>&1 if [ $? != 1 ]; then testsuite_error "Run of safecopy returned wrong exit code. Output:" testsuite_debug_file "$testsuite_tmpdir/test2.out" fi testsuite_assert_files_identical "test2.dat" "$testsuite_tmpdir/test2.dat" testsuite_assert_files_identical "test2.badblocks" "$testsuite_tmpdir/test2.badblocks" testsuite_debug "Test, with marking, output file has correct length." LD_PRELOAD="$preload" $safecopy -M "MARKBAAD" -R 2 -b 1024 -f 4* -o "$testsuite_tmpdir/test3.badblocks" debug "$testsuite_tmpdir/test3.dat" >"$testsuite_tmpdir/test3.out" 2>&1 if [ $? != 1 ]; then testsuite_error "Run of safecopy returned wrong exit code. Output:" testsuite_debug_file "$testsuite_tmpdir/test3.out" fi testsuite_assert_files_identical "test3.dat" "$testsuite_tmpdir/test3.dat" testsuite_assert_files_identical "test1.badblocks" "$testsuite_tmpdir/test3.badblocks" testsuite_debug "Test, same test again, now with a recovered soft error." LD_PRELOAD="$preload" $safecopy -M "MARKBAAD" -R 3 -b 1024 -f 4* -o "$testsuite_tmpdir/test4.badblocks" debug "$testsuite_tmpdir/test4.dat" >"$testsuite_tmpdir/test4.out" 2>&1 if [ $? != 1 ]; then testsuite_error "Run of safecopy returned wrong exit code. Output:" testsuite_debug_file "$testsuite_tmpdir/test4.out" fi testsuite_assert_files_identical "test4.dat" "$testsuite_tmpdir/test4.dat" testsuite_assert_files_identical "test2.badblocks" "$testsuite_tmpdir/test4.badblocks" } testsuite_runtest safecopy-1.7/test/test4/test2.badblocks0000644000175100001440000000000411202053543017143 0ustar ravenusers8 9 safecopy-1.7/test/test4/test4.dat0000644000175100001440000002400011202053543015773 0ustar ravenusersŁcA< B줡YW#G`=m|^@1q3|Mf Si+HبV!BXw =vEgSf6$FW/~$5ìaN{:3{nսQ` #$׍(v_n""P#4ܕ{ Gc/DjLVŞ#LeA׭gV͊\?JE\;SAMcJZ RA%ߗdi =(@L9dj\l(3ZDQOkK3އjZ 3@An(GCZ9X'k*.zɘں㆕6Ƨ0\؅D5G#eTOPf'xoW6o` 4RGLv Eh$s7[dheuUm2RNU6\2As.akc ƬS9ڵX[ŮN1l9R%LwKbHD;c86=C([KZfd xg;LKWz'MwyGᱚE\}oi Gc+`v9eɹikʠn)p8X(bI)Ѐloטк?Rl\rdhUWCV1uȂV?3U`a :c[*^j +K, ѶrcqcJ<=AczgzNL }__nQ3dF0#u?$S/-\a7RDN!zZ% ۾Ppu[ >!Z%+p$t=rW~ǃgAبyf;`oPUiIZ*΅M&VY/ps{ex[^+[y1d|CACk:ȬՉS夐\04愞^ReɎMѼb\]>\F1[+RBMI¾-}54HufɱYRlF]cxYKaDSmcr4y[~^Էig:1\1 ZX.x%_h*g;tX$'#ne;+z )8hڠd&,W":*rs0ɴ[ v7>clO6N<$?$"ŒVwvL]7lBd6#Q^T4O@Թυǃa*1;1d?d+>` D׭yiI|+h aD{9(7h*[Z97R%xQI\^,W"<di=Bwbd x wVJ $Єȵ>޲3TJŷWp1F}K7 L{A꺫r(c,E<>so_#Ak7炊*=:P!?Jk)og y(<<|`,/&zQt6lv40զcfU[ua(.8$RG>)8]xY0hNyD82dzv ӟ hn^%ڽsx8_(og?K>x8Fr=BU:v'>,,xfk/jZ͋NkYkTʂM,VK%vkA!5NR'c-<6Yf^Q4 p `' g}1ˏdx74qӧ9:iɰW=`)Cgw[:߀,{A &&D_Z_y,fk55$W ;+F:~8Hph7b E=QOw4)^|كvD'\˸!İ|gn|Hw+) ([t-G5'W)ëVd$jjvA$o֩jI"=u: Y'Άĩ&'J۵mdi.O=PlW)So\s9Vj{c쩄NKBS@*x4+h;z-]~Y+o$_ZX.h"]7;2M`a%ҪX69b^ q79r8("@InZ20ƣvi* 𔛖vr`pbb=gO~T}ނãIoI 'h ϧq ]: OB(;0F~Քff_9 un=J0f"99KMpޜ)dPftph 4Ek}J+e~ܐSQrZEN5FQeKZ;:n߯"F.MXP2]w5U#Wʼn $5Cakz$bkgzc0@)ߊBlqz>7%5N=`D[,|@6B1;vYW2ii8mk%-7E.(&hz*Ç+G X)giۋR[s5bRl9Kx֛S@LkclVU2Slj\+$߸E+԰k )&H lڷ@8Lfm"0TGz{NlWy*y:H֎)'Pa͸57D`3F$JP,#o+29$8KB<)Vў ,Ө, b'Qb l4|-xV {q󀻯M)^{_{ՑZ$tvq=M(&~#F(EGZJd-ӌE5Ī5ⶱ/$Ċq/<F#t5R B/k~!G`'[%N _@lyЂsuJ 9g]̲Zhu ܻ2}y~%rO}vKbQmyH8nW1^k!\@;P҈4ō8}d1ѽlcL{ݯ[PqQ:M;Y)֍˗z!rCymBKYu-8ًE1k"5FdvG`>8fi;2MJi${[cFifC\[)QaĢ#n1.o#rP#=p%Z"YnZ*РHF*qU 3W%8>Ȗޫ0_VPE2BIF0u0JUcY]i{:@1E$4%,*I D`%@M!+19(Ӓ65dq1 (DZ,(pw4ULU!r`FOC<gRI$hz\-^qh*nSo;/;rq'= C Cq_@-9VsNL/2劵u0XuEv@Bm}n`0]0wS SQ\=00lx['|849m` Ț]ܯ_rzfNy JhmWyzc.6KWN' sPi0~ʖɍsx% ת8 QQf:\F;!lrļ~%D#b:ЯXC^VRQfkE0Ų+^2k4^昚߆ ٧Aǡ~AR1\_~So&[DVQZ'RJ)aChx;i3G +bTוtaM^6Lye(}405yWu:UUN, Q:3ͼ -v 0El Ъ[EwExݍLPBfFUfn.*A^IMYӱldk_ V7 3 ѕo99{io#ǐwi(KJ1zǢlU(Qc+v`Rh%sL7F]t"yxY,1~>_c*V"ϑ`S^RM@iz+*by>&=b7Kneq`m+׺|;gԀ8_3MO'(E?yr[& x/cT 5{J3PΗj}2UB@p`B9H`'\P9}{\N!6F}Tb5)Rx XekRepdick^b; &U?:?Sٟ8n r? Zݛ%<7g`|3:~4G<`CD 9@YK%f^Q>Sd&ٙE ־s =় 8Gu5"v  FwZT,xN OCYly|4E4<8Muo ygE t:?-&HV/*ҧ*$jJX"pFmV Zj2ŽߧP]j\va]]U:q@AbʒBJU :ʙ/eHp_S(%9)C6%FBZ&qh8&/TQ{>E޼4Z(i"> >y/V0 /M HQezcp*op*OV6n)g)Q6Q=$c*Bƚ ?.&+XgEܚoYgL|߅l& I/ѡI'> ~:\@/w8V|79gv"IpWВ k!>֯z~>̜GVio|:'v< 0مd"~[ HrŒoj"Wn,8W+U~@Vۅazܠsvyf+Hz:kbů@< (*&p;`;/!=Y aE٩لZ O˹=,TٺX\q8>{K}3qq)W >:LYBT6+0jwƠ[>{'08`yYc~b#yu1ih<7tqWJYfeܐHQ"*V hfDIt"TR:#Q2ȠJf}1BOo'60m'2ubsO3: 4\e  檊ZqZ Uǐ15@`<[l^ЏwLWXvAm>MARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADsafecopy-1.7/test/test11/0000755000175100001440000000000011726756524014344 5ustar ravenuserssafecopy-1.7/test/test11/simulator.cfg0000644000175100001440000000023111202053543017014 0ustar ravenusersblocksize=1024 filesize=20480 source=test.dat softfailcount=2 hardfail=2 hardfail=4 hardfail=5 hardfail=8 hardfail=9 hardfail=10 hardfail=11 hardfail=12 safecopy-1.7/test/test11/test1.dat0000644000175100001440000003600011202053543016051 0ustar ravenusersRr7咥F:yi# Պx= izk7/1V6'? x^<3n/ʨn|}PaO/{= Sa6M> ܻ2}y~%rO}vKbQmyH8nW1^k!\@;P҈4ō8}d1ѽlcL{ݯ[PqQ:M;Y)֍˗z!rCymBKYu-8ًE1k"5FdvG`>8fi;2MJi${[cFifC\[)QaĢ#n1.o#rP#=p%Z"YnZ*РHF*qU 3W%8>Ȗޫ0_VPE2BIF0u0JUcY]i{:@1E$4%,*I D`%@M!+19(Ӓ65dq1 (DZ,(pw4ULU!r`FOC<gRI$hz\-^qh*nSo;/;rq'= C Cq_@-9VsNL/2劵u0XuEv@Bm}n`0]0wS SQ\=00lx['|849m` Ț]ܯ_rzfNy JhmWyzc.6KWN' sPi0~ʖɍsx% ת8 QQf:\F;!lrļ~%D#b:ЯXC^VRQfkE0Ų+^2k4^昚߆ ٧Aǡ~AR1\_~So&[DVQZ'RJ)aChx;i3G +bTוtaM^6Lye(}405yWu:UUN, Q:3ͼ -v 0El Ъ[EwExݍLPBfFUfn.*A^IMYӱldk_ V7 3 ѕo99{io#ǐwi(KJ1zǢlU(Qc+v`Rh%sL7F]t"yxY,1~>_c*V"ϑ`S^RM@iz+*by>&=b7Kneq`m+׺|;gԀ8_3MO'(E?yr[& x/cT 5{J3PΗj}2UB@p`B9H`'\P9}{\N!6F}Tb5)Rx XekRepdick^b; &U?:?Sٟ8n r? Zݛ%<7g`|3:~4G<`CD 9@YK%f^Q>Sd&ٙE ־s =় 8Gu5"v  FwZT,xN OCYly|4E4<8Muo ygE t:?-&HV/*ҧ*$jJX"pFmV Zj2ŽߧP]j\va]]U:q@AbʒBJU :ʙ/eHp_S(%9)C6%FBZ&qh8&/TQ{>E޼4Z(i" ܻ2}y~%rO}vKbQmyH8nW1^k!\@;P҈4ō8}d1ѽlcL{ݯ[PqQ:M;Y)֍˗z!rCymBKYu-8ًE1k"5FdvG`>8fi;2MJi${[cFifC\[)QaĢ#n1.o#rP#=p%Z"YnZ*РHF*qU 3W%8>Ȗޫ0_VPE2BIF0u0JUcY]i{:@1E$4%,*I D`%@M!+19(Ӓ65dq1 (DZ,(pw4ULU!r`FOC<gRI$hz\-^qh*nSo;/;rq'= C Cq_@-9VsNL/2劵u0XuEv@Bm}n`0]0wS SQ\=00lx['|849m` Ț]ܯ_rzfNy JhmWyzc.6KWN' sPi0~ʖɍsx% ת8 QQf:\F;!lrļ~%D#b:ЯXC^VRQfkE0Ų+^2k4^昚߆ ٧Aǡ~AR1\_~So&[DVQZ'RJ)aChx;i3G +bTוtaM^6Lye(}405yWu:UUN, Q:3ͼ -v 0El Ъ[EwExݍLPBfFUfn.*A^IMYӱldk_ V7 3 ѕo99{io#ǐwi(KJ1zǢlU(Qc+v`Rh%sL7F]t"yxY,1~>_c*V"ϑ`S^RM@iz+*by>&=b7Kneq`m+׺|;gԀ8_3MO'(E?yr[& x/cT 5{J3PΗj}2UB@p`B9H`'\P9}{\N!6F}Tb5)Rx XekRepdick^b; &U?:?Sٟ8n r? Zݛ%<7g`|3:~4G<`CD 9@YK%f^Q>Sd&ٙE ־s =় 8Gu5"v  FwZT,xN OCYly|4E4<8Muo ygE t:?-&HV/*ҧ*$jJX"pFmV Zj2ŽߧP]j\va]]U:q@AbʒBJU :ʙ/eHp_S(%9)C6%FBZ&qh8&/TQ{>E޼4Z(i")p8X(bI)Ѐloטк?Rl\rdhUWCV1uȂV?3U`a :c[*^j +K, ѶrcqcJ<=AczgzNL }__nQ3dF0#u?$S/-\a7RDN!zZ% ۾Ppu[ >!Z%+p$t=rW~ǃgAبyf;`oPUiIZ*΅M&VY/ps{ex[^+[y1d|CACk:ȬՉS夐\04愞^ReɎMѼb\]>\F1[+RBMI¾-}54HufɱYRlF]cxYKaDSmcr4y[~^Էig:1\1 ZX.x%_h*g;tX$'#ne;+z )8hڠd&,W":*rs0ɴ[ v7>clO6N<$?$"ŒVwvL]7lBd6#Q^T4O@Թυǃa*1;1d?d+>` D׭yiI|+h aD{9(7h*[Z97R%xQI\^,W"<di=Bwbd x wVJ $Єȵ>޲3TJŷWp1F}K7 L{A꺫r(c,E<>so_#Ak7炊*=:P!?Jk)og y(<<|`,/&zQt6lv40զcfU[ua(.8$RG>)8]xY0hNyD82dzv ӟ hn^%ڽsx8_(og?K>x8Fr=BU:v'>,,xfk/jZ͋NkYkTʂM,VK%vkA!5NR'c-<6Yf^Q4 p `' g}1ˏdx74qӧ9:iɰW=`)Cgw[:߀,{A &&D_Z_y,fk55$W ;+F:~8Hph7b E=QOw4)^|كvD'\˸!İ|gn|Hw+) ([t-G5'W)ëVd$jjvA$o֩jI"=u: Y'Άĩ&'J۵mdi.O=PlW)So\s9Vj{c쩄NKBS@*x4+h;z-]~Y+o$_ZX.h"]7;2M`a%ҪX69b^ q79r8("@InZ20ƣvi* 𔛖vr`pbb=gO~T}ނãIoI 'h ϧq ]: OB(;0F~Քff_9 un=J0f"99KMpޜ)dPftph 4Ek}J+e~ܐSQrZEN5FQeKZ;:n߯"F.MXP2]w5U#Wʼn $5Cakz$bkgzc0@)ߊBlqz>7%5N=`D[,|@6B1;vYW2ii8mk%-7E.(&hz*Ç+G X)giۋR[s5bRl9Kx֛S@LkclVU2Slj\+$߸E+԰k )&H lڷ@8Lfm"0TGz{NlWy*y:H֎)'Pa͸57D`3F$JP,#o+29$8KB<)Vў ,Ө, b'Qb l4|-xV {q󀻯M)^{_{ՑZ$tvq=M(&~#F(EGZJd-ӌE5Ī5ⶱ/$Ċq/<F#t5R B/k~!G`'[%N _@lyЂsuJ 9g]̲Zhu ܻ2}y~%rO}vKbQmyH8nW1^k!\@;P҈4ō8}d1ѽlcL{ݯ[PqQ:M;Y)֍˗z!rCymBKYu-8ًE1k"5FdvG`>8fi;2MJi${[cFifC\[)QaĢ#n1.o#rP#=p%Z"YnZ*РHF*qU 3W%8>Ȗޫ0_VPE2BIF0u0JUcY]i{:@1E$4%,*I D`%@M!+19(Ӓ65dq1 (DZ,(pw4ULU!r`FOC<gRI$hz\-^qh*nSo;/;rq'= C Cq_@-9VsNL/2劵u0XuEv@Bm}n`0]0wS SQ\=00lx['|849m` Ț]ܯ_rzfNy JhmWyzc.6KWN' sPi0~ʖɍsx% ת8 QQf:\F;!lrļ~%D#b:ЯXC^VRQfkE0Ų+^2k4^昚߆ ٧Aǡ~AR1\_~So&[DVQZ'RJ)aChx;i3G +bTוtaM^6Lye(}405yWu:UUN, Q:3ͼ -v 0El Ъ[EwExݍLPBfFUfn.*A^IMYӱldk_ V7 3 ѕo99{io#ǐwi(KJ1zǢlU(Qc+v`Rh%sL7F]t"yxY,1~>_c*V"ϑ`S^RM@iz+*by>&=b7Kneq`m+׺|;gԀ8_3MO'(E?yr[& x/cT 5{J3PΗj}2UB@p`B9H`'\P9}{\N!6F}Tb5)Rx XekRepdick^b; &U?:?Sٟ8n r? Zݛ%<7g`|3:~4G<`CD 9@YK%f^Q>Sd&ٙE ־s =় 8Gu5"v  FwZT,xN OCYly|4E4<8Muo ygE t:?-&HV/*ҧ*$jJX"pFmV Zj2ŽߧP]j\va]]U:q@AbʒBJU :ʙ/eHp_S(%9)C6%FBZ&qh8&/TQ{>E޼4Z(i"> >y/V0 /M HQezcp*op*OV6n)g)Q6Q=$c*Bƚ ?.&+XgEܚoYgL|߅l& I/ѡI'> ~:\@/w8V|79gv"IpWВ k!>֯z~>̜GVio|:'v< 0مd"~[ HrŒoj"Wn,8W+U~@Vۅazܠsvyf+Hz:kbů@< (*&p;`;/!=Y aE٩لZ O˹=,TٺX\q8>{K}3qq)W >:LYBT6+0jwƠ[>{'08`yYc~b#yu1ih<7tqWJYfeܐHQ"*V hfDIt"TR:#Q2ȠJf}1BOo'60m'2ubsO3: 4\e  檊ZqZ Uǐ15@`<[l^ЏwLWXvAm>3Xߐo˫NqH?l҅a\T.ګ5InNPU9A`-vgx}/Fhzt-^XBhfk#:#t4Ę3GivG-4ZWuϒ?ꌋ A͇9YcRB415^˒G~d@՗UH@b?GG۳qԔ>Hꆖ%=[3Y CK8r,Kg Z+"JgnLEfd,͒_r`xrm뱃l⳽Nk̗q8k(Ȟt!,6Y.yp?-g9T[++ GGV-~"J~Qt0%zHϷvY 6͇y(doޠ7(>|/qc5J"$jiV!bЈ5k$y!) wX7̀Y}&Z yVeO[fHWboN} XС|fvAk C\H^lO*P9cR*ىD6? 41()6 8\؉@A=#2(TTَFB 8Y3hT23H[e!w 7Z ~YNeP6秛cȾď<0_yzl7͇ L d}P!2 A7J<#w2oDjzH2 ^{۾sg#wƱhڛ.j~6&^]hwcTRwCnRZ1$=ŋԎ7@,D bh2fL#aYj_+a_9A+fB>(H Y  ?mlZxZ\l6/V$K0'# .ND2+GFj: õWXm@0`\qބrL &B1 s:JQC XR*Q,tƉYw5Rj!ż0ίab&S|-KdBP[5N۵- <_PK^bH29iPbpyQ y[֡ڃ[ a" =F 0#I-&m2uOP&8<U==gRw>9rאg4ZBԳhɗ/R8RĪzX'\.m,2?jO{LFC@/#ǵ?0el to]Idp˕1ReQuBuQ +ET 46- Oqѷe=Nf0[Tv<%֌*{h,CkZ \!ӪɉW*#R1yX-;6sBBR1BrzEN ~9C\8- 4HHT h~a>^qG32$tqw  SYb0C UK@h}晤<Ϥ6;#G`<X*k3EǀCpp[*U'gݒ1; 8ePΘMEQJHSRU8EHOW+ۄlODX\LY)jk1Q idT҂{9I`i!ÉcD,*!{#vr0%_a6L@s0`h`s3v] QU]?Ԗ9E{HZt\tMsofd4]<>zySrhZùp3&v_t Kh3/6Vt. Tiw_u/q 0v` -ł]FtacŦđ sxwu!>)Ҿ͉{?ŁcA< B줡YW#G`=m|^@1q3|Mf Si+HبV!BXw =vEgSf6$FW/~$5ìaN{:3{nսQ` #$׍(v_n""P#4ܕ{ Gc/DjLVŞ#LeA׭gV͊\?JE\;SAMcJZ RA%ߗdi =(@L9dj\l(3ZDQOkK3އjZ 3@An(GCZ9X'k*.zɘں㆕6Ƨ0\؅D5G#eTOPf'xoW6o` 4RGLv Eh$s7[dheuUm2RNU6\2As.akc ƬS9ڵX[ŮN1l9R%LwKbHD;c86=C([KZfd xg;LKWz'MwyGᱚE\}oi Gc+`v9eɹikʠn)p8X(bI)Ѐloטк?Rl\rdhUWCV1uȂV?3U`a :c[*^j +K, ѶrcqcJ<=AczgzNL }__nQ3dF0#u?$S/-\a7RDN!zZ% ۾Ppu[ >!Z%+p$t=rW~ǃgAبyf;`oPUiIZ*΅M&VY/ps{ex[^+[y1d|CACk:ȬՉS夐\04愞^ReɎMѼb\]>\F1[+RBMI¾-}54HufɱYRlF]cxYKaDSmcr4y[~^Էig:1\1 ZX.x%_h*g;tX$'#ne;+z )8hڠd&,W":*rs0ɴ[ v7>clO6N<$?$"ŒVwvL]7lBd6#Q^T4O@Թυǃa*1;1d?d+>` D׭yiI|+h aD{9(7h*[Z97R%xQI\^,W"<di=Bwbd x wVJ $Єȵ>޲3TJŷWp1F}K7 L{A꺫r(c,E<>so_#Ak7炊*=:P!?Jk)og y(<<|`,/&zQt6lv40զcfU[ua(.8$RG>)8]xY0hNyD82dzv ӟ hn^%ڽsx8_(og?K>x8Fr=BU:v'>,,xfk/jZ͋NkYkTʂM,VK%vkA!5NR'c-<6Yf^Q4 p `' g}1ˏdx74qӧ9:iɰW=`)Cgw[:߀,{A &&D_Z_y,fk55$W ;+F:~8Hph7b E=QOw4)^|كvD'\˸!İ|gn|Hw+) ([t-G5'W)ëVd$jjvA$o֩jI"=u: Y'Άĩ&'J۵mdi.O=PlW)So\s9Vj{c쩄NKBS@*x4+h;z-]~Y+o$_ZX.h"]7;2M`a%ҪX69b^ q79r8("@InZ20ƣvi* 𔛖vr`pbb=gO~T}ނãIoI 'h ϧq ]: OB(;0F~Քff_9 un=J0f"99KMpޜ)dPftph 4Ek}J+e~ܐSQrZEN5FQeKZ;:n߯"F.MXP2]w5U#Wʼn $5Cakz$bkgzc0@)ߊBlqz>7%5N=`D[,|@6B1;vYW2ii8mk%-7E.(&hz*Ç+G X)giۋR[s5bRl9Kx֛S@LkclVU2Slj\+$߸E+԰k )&H lڷ@8Lfm"0TGz{NlWy*y:H֎)'Pa͸57D`3F$JP,#o+29$8KB<)Vў ,Ө, b'Qb l4|-xV {q󀻯M)^{_{ՑZ$tvq=M(&~#F(EGZJd-ӌE5Ī5ⶱ/$Ċq/<F#t5R B/k~!G`'[%N _@lyЂsuJ 9g]̲Zhu ܻ2}y~%rO}vKbQmyH8nW1^k!\@;P҈4ō8}d1ѽlcL{ݯ[PqQ:M;Y)֍˗z!rCymBKYu-8ًE1k"5FdvG`>8fi;2MJi${[cFifC\[)QaĢ#n1.o#rP#=p%Z"YnZ*РHF*qU 3W%8>Ȗޫ0_VPE2BIF0u0JUcY]i{:@1E$4%,*I D`%@M!+19(Ӓ65dq1 (DZ,(pw4ULU!r`FOC<gRI$hz\-^qh*nSo;/;rq'= C Cq_@-9VsNL/2劵u0XuEv@Bm}n`0]0wS SQ\=00lx['|849m` Ț]ܯ_rzfNy JhmWyzc.6KWN' sPi0~ʖɍsx% ת8 QQf:\F;!lrļ~%D#b:ЯXC^VRQfkE0Ų+^2k4^昚߆ ٧Aǡ~AR1\_~So&[DVQZ'RJ)aChx;i3G +bTוtaM^6Lye(}405yWu:UUN, Q:3ͼ -v 0El Ъ[EwExݍLPBfFUfn.*A^IMYӱldk_ V7 3 ѕo99{io#ǐwi(KJ1zǢlU(Qc+v`Rh%sL7F]t"yxY,1~>_c*V"ϑ`S^RM@iz+*by>&=b7Kneq`m+׺|;gԀ8_3MO'(E?yr[& x/cT 5{J3PΗj}2UB@p`B9H`'\P9}{\N!6F}Tb5)Rx XekRepdick^b; &U?:?Sٟ8n r? Zݛ%<7g`|3:~4G<`CD 9@YK%f^Q>Sd&ٙE ־s =় 8Gu5"v  FwZT,xN OCYly|4E4<8Muo ygE t:?-&HV/*ҧ*$jJX"pFmV Zj2ŽߧP]j\va]]U:q@AbʒBJU :ʙ/eHp_S(%9)C6%FBZ&qh8&/TQ{>E޼4Z(i"> >y/V0 /M HQezcp*op*OV6n)g)Q6Q=$c*Bƚ ?.&+XgEܚoYgL|߅l& I/ѡI'> ~:\@/w8V|79gv"IpWВ k!>֯z~>̜GVio|:'v< 0مd"~[ HrŒoj"Wn,8W+U~@Vۅazܠsvyf+Hz:kbů@< (*&p;`;/!=Y aE٩لZ O˹=,TٺX\q8>{K}3qq)W >:LYBT6+0jwƠ[>{'08`yYc~b#yu1ih<7tqWJYfeܐHQ"*V hfDIt"TR:#Q2ȠJf}1BOo'60m'2ubsO3: 4\e  檊ZqZ Uǐ15@`<[l^ЏwLWXvAm>3Xߐo˫NqH?l҅a\T.ګ5InNPU9A`-vgx}/Fhzt-^XBhfk#:#t4Ę3GivG-4ZWuϒ?ꌋ A͇9YcRB415^˒G~d@՗UH@b?GG۳qԔ>Hꆖ%=[3Y CK8r,Kg Z+"JgnLEfd,͒_r`xrm뱃l⳽Nk̗q8k(Ȟt!,6Y.yp?-g9T[++ GGV-~"J~Qt0%zHϷvY 6͇y(doޠ7(>|/qc5J"$jiV!bЈ5k$y!) wX7̀Y}&Z yVeO[fHWboN} XС|fvAk C\H^lO*P9cR*ىD6? 41()6 8\؉@A=#2(TTَFB 8Y3hT23H[e!w 7Z ~YNeP6秛cȾď<0_yzl7͇ L d}P!2 A7J<#w2oDjzH2 ^{۾sg#wƱhڛ.j~6&^]hwcTRwCnRZ1$=ŋԎ7@,D bh2fL#aYj_+a_9A+fB>(H Y  ?mlZxZ\l6/V$K0'# .ND2+GFj: õWXm@0`\qބrL &B1 s:JQC XR*Q,tƉYw5Rj!ż0ίab&S|-KdBP[5N۵- <_PK^bH29iPbpyQ y[֡ڃ[ a" =F 0#I-&m2uOP&8<U==gRw>9rאg4ZBԳhɗ/R8RĪzX'\.m,2?jO{LFC@/#ǵ?0el to]Idp˕1ReQuBuQ +ET 46- Oqѷe=Nf0[Tv<%֌*{h,CkZ \!ӪɉW*#R1yX-;6sBBR1BrzEN ~9C\8- 4HHT h~a>^qG32$tqw  SYb0C UK@h}晤<Ϥ6;#G`<X*k3EǀCpp[*U'gݒ1; 8ePΘMEQJHSRU8EHOW+ۄlODX\LY)jk1Q idT҂{9I`i!ÉcD,*!{#vr0%_a6L@s0`h`s3v] QU]?Ԗ9E{HZt\tMsofd4]<>zySrhZùp3&v_t Kh3/6Vt. Tiw_u/q 0v` -ł]FtacŦđ sxwu!>)Ҿ͉{?safecopy-1.7/test/test11/test3.dat0000644000175100001440000003600011202053543016053 0ustar ravenusers(;0F~Քff_9 un=J0f"99KMpޜ)dPftph 4Ek}J+e~ܐSQrZEN5FQeKZ;:n߯"F.MXP2]w5U#Wʼn $5Cakz$bkgzc0@)ߊBlqz>7%5N=`D[,|@6B1;vYW2ii8mk%-7E.(&hz*Ç+G X)giۋR[s5bRl9Kx֛S@LkclVU2Slj\+$߸E+԰k )&H lڷ@8Lfm"0TGz{NlWy*y:H֎)'Pa͸57D`3F$JP,#o+29$8KB<)Vў ,Ө, b'Qb l4|-xV {q󀻯M)^{_{ՑZ$tvq=M(&~#F(EGZJd-ӌE5Ī5ⶱ/$Ċq/<F#t5R B/k~!G`'[%N _@lyЂsuJ 9g]̲Zhu7%5N=`D[,|@6B1;vYW2ii8mk%-7E.(&hz*Ç+G X)giۋR[s5bRl9Kx֛S@LkclVU2Slj\+$߸E+԰k )&H lڷ@8Lfm"0TGz{NlWy*y:H֎)'Pa͸57D`3F$JP,#o+29$8KB<)Vў ,Ө, b'Qb l4|-xV {q󀻯M)^{_{ՑZ$tvq=M(&~#F(EGZJd-ӌE5Ī5ⶱ/$Ċq/<F#t5R B/k~!G`'[%N _@lyЂsuJ 9g]̲Zhu ܻ2}y~%rO}vKbQmyH8nW1^k!\@;P҈4ō8}d1ѽlcL{ݯ[PqQ:M;Y)֍˗z!rCymBKYu-8ًE1k"5FdvG`>8fi;2MJi${[cFifC\[)QaĢ#n1.o#rP#=p%Z"YnZ*РHF*qU 3W%8>Ȗޫ0_VPE2BIF0u0JUcY]i{:@1E$4%,*I D`%@M!+19(Ӓ65dq1 (DZ,(pw4ULU!r`FOC<gRI$hz\-^qh*nSo;/;rq'= C Cq_@-9VsNL/2劵u0XuEv@Bm}n`0]0wS SQ\=00lx['|849m` Ț]ܯ_rzfNy JhmWyzc.6KWN' sPi0~ʖɍsx% ת8 QQf:\F;!lrļ~%D#b:ЯXC^VRQfkE0Ų+^2k4^昚߆ ٧Aǡ~AR1\_~So&[DVQZ'RJ)aChx;i3G +bTוtaM^6Lye(}405yWu:UUN, Q:3ͼ -v 0El Ъ[EwExݍLPBfFUfn.*A^IMYӱldk_ V7 3 ѕo99{io#ǐwi(KJ1zǢlU(Qc+v`Rh%sL7F]t"yxY,1~>_c*V"ϑ`S^RM@iz+*by>&=b7Kneq`m+׺|;gԀ8_3MO'(E?yr[& x/cT 5{J3PΗj}2UB@p`B9H`'\P9}{\N!6F}Tb5)Rx XekRepdick^b; &U?:?Sٟ8n r? Zݛ%<7g`|3:~4G<`CD 9@YK%f^Q>Sd&ٙE ־s =় 8Gu5"v  FwZT,xN OCYly|4E4<8Muo ygE t:?-&HV/*ҧ*$jJX"pFmV Zj2ŽߧP]j\va]]U:q@AbʒBJU :ʙ/eHp_S(%9)C6%FBZ&qh8&/TQ{>E޼4Z(i"/dev/null 2>&1 cp "test1.dat" "$testsuite_tmpdir/test3.dat" >/dev/null 2>&1 cp "test1.dat" "$testsuite_tmpdir/test4.dat" >/dev/null 2>&1 cp "test1.dat" "$testsuite_tmpdir/test5.dat" >/dev/null 2>&1 testsuite_assert_files_identical "test1.dat" "$testsuite_tmpdir/test2.dat" testsuite_assert_files_identical "test1.dat" "$testsuite_tmpdir/test3.dat" testsuite_assert_files_identical "test1.dat" "$testsuite_tmpdir/test4.dat" testsuite_assert_files_identical "test1.dat" "$testsuite_tmpdir/test5.dat" testsuite_debug "Test, first run with big skipsize and resolution to produce output with holes" testsuite_debug " Must not touch exclude blocks" LD_PRELOAD="$preload" $safecopy -R 2 -b 1024 -f 4* -r 4* -s 2 -l 16 -X xblocks -o "$testsuite_tmpdir/test1.badblocks" debug "$testsuite_tmpdir/test1.dat" >"$testsuite_tmpdir/test1.out" 2>&1 if [ $? != 1 ]; then testsuite_error "Run of safecopy returned wrong exit code. Output:" testsuite_debug_file "$testsuite_tmpdir/test1.out" fi testsuite_assert_files_identical "test1.dat" "$testsuite_tmpdir/test1.dat" testsuite_assert_files_identical "test1.badblocks" "$testsuite_tmpdir/test1.badblocks" testsuite_debug "Test, incremental, big skipsize, small resolution." testsuite_debug " Must recover data at the end of bad areas but not overwrite already recovered data" testsuite_debug " will recover block 6 and 7 but not the data at file end due to size limit" testsuite_debug " Must not touch exclude blocks" LD_PRELOAD="$preload" $safecopy -R 2 -b 1024 -f 8* -s 2 -l 16 -I "$testsuite_tmpdir/test1.badblocks" -X xblocks -o "$testsuite_tmpdir/test2.badblocks" debug "$testsuite_tmpdir/test2.dat" >"$testsuite_tmpdir/test2.out" 2>&1 if [ $? != 1 ]; then testsuite_error "Run of safecopy returned wrong exit code. Output:" testsuite_debug_file "$testsuite_tmpdir/test2.out" fi testsuite_assert_files_identical "test2.dat" "$testsuite_tmpdir/test2.dat" testsuite_assert_files_identical "test2.badblocks" "$testsuite_tmpdir/test2.badblocks" testsuite_debug "Test, incremental, small skipsize and resolution." testsuite_debug " Must recover all recoverable data within size limit" testsuite_debug " Must not touch exclude blocks" LD_PRELOAD="$preload" $safecopy -R 2 -b 1024 -f 1* -s 2 -l 16 -I "$testsuite_tmpdir/test1.badblocks" -X xblocks -o "$testsuite_tmpdir/test3.badblocks" debug "$testsuite_tmpdir/test3.dat" >"$testsuite_tmpdir/test3.out" 2>&1 if [ $? != 1 ]; then testsuite_error "Run of safecopy returned wrong exit code. Output:" testsuite_debug_file "$testsuite_tmpdir/test3.out" fi testsuite_assert_files_identical "test3.dat" "$testsuite_tmpdir/test3.dat" testsuite_assert_files_identical "test3.badblocks" "$testsuite_tmpdir/test3.badblocks" testsuite_debug "Test, incremental, big skipsize, small resolution, with marking." testsuite_debug " Must recover data at the end of bad areas but not overwrite already recovered data" testsuite_debug " will recover block 6 and 7 but not the data at file end due to size limit" testsuite_debug " Must not touch exclude blocks" LD_PRELOAD="$preload" $safecopy -M "MARKBAAD" -R 2 -b 1024 -f 8* -s 2 -l 16 -I "$testsuite_tmpdir/test1.badblocks" -X xblocks -o "$testsuite_tmpdir/test4.badblocks" debug "$testsuite_tmpdir/test4.dat" >"$testsuite_tmpdir/test4.out" 2>&1 if [ $? != 1 ]; then testsuite_error "Run of safecopy returned wrong exit code. Output:" testsuite_debug_file "$testsuite_tmpdir/test4.out" fi testsuite_assert_files_identical "test4.dat" "$testsuite_tmpdir/test4.dat" testsuite_assert_files_identical "test2.badblocks" "$testsuite_tmpdir/test4.badblocks" testsuite_debug "Test, incremental, small skipsize and resolution, with marking." testsuite_debug " Must recover all recoverable data, and mark the rest within size limit" testsuite_debug " Must not touch exclude blocks" LD_PRELOAD="$preload" $safecopy -M "MARKBAAD" -R 2 -b 1024 -f 1* -s 2 -l 16 -I "$testsuite_tmpdir/test1.badblocks" -X xblocks -o "$testsuite_tmpdir/test5.badblocks" debug "$testsuite_tmpdir/test5.dat" >"$testsuite_tmpdir/test5.out" 2>&1 if [ $? != 1 ]; then testsuite_error "Run of safecopy returned wrong exit code. Output:" testsuite_debug_file "$testsuite_tmpdir/test5.out" fi testsuite_assert_files_identical "test5.dat" "$testsuite_tmpdir/test5.dat" testsuite_assert_files_identical "test3.badblocks" "$testsuite_tmpdir/test5.badblocks" } testsuite_runtest safecopy-1.7/test/test11/test2.badblocks0000644000175100001440000000002611202053543017225 0ustar ravenusers2 3 4 5 9 10 11 12 13 safecopy-1.7/test/test11/xblocks0000644000175100001440000000001111202053543015700 0ustar ravenusers6 7 8 17 safecopy-1.7/test/test11/test5.dat0000644000175100001440000003600011202053543016055 0ustar ravenusersMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAAD(;0F~Քff_9 un=J0f"99KMpޜ)dPftph 4Ek}J+e~ܐSQrZEN5FQeKZ;:n߯"F.MXP2]w5U#Wʼn $5Cakz$bkgzc0@)ߊBlqz>7%5N=`D[,|@6B1;vYW2ii8mk%-7E.(&hz*Ç+G X)giۋR[s5bRl9Kx֛S@LkclVU2Slj\+$߸E+԰k )&H lڷ@8Lfm"0TGz{NlWy*y:H֎)'Pa͸57D`3F$JP,#o+29$8KB<)Vў ,Ө, b'Qb l4|-xV {q󀻯M)^{_{ՑZ$tvq=M(&~#F(EGZJd-ӌE5Ī5ⶱ/$Ċq/<F#t5R B/k~!G`'[%N _@lyЂsuJ 9g]̲Zhu7%5N=`D[,|@6B1;vYW2ii8mk%-7E.(&hz*Ç+G X)giۋR[s5bRl9Kx֛S@LkclVU2Slj\+$߸E+԰k )&H lڷ@8Lfm"0TGz{NlWy*y:H֎)'Pa͸57D`3F$JP,#o+29$8KB<)Vў ,Ө, b'Qb l4|-xV {q󀻯M)^{_{ՑZ$tvq=M(&~#F(EGZJd-ӌE5Ī5ⶱ/$Ċq/<F#t5R B/k~!G`'[%N _@lyЂsuJ 9g]̲Zhu ܻ2}y~%rO}vKbQmyH8nW1^k!\@;P҈4ō8}d1ѽlcL{ݯ[PqQ:M;Y)֍˗z!rCymBKYu-8ًE1k"5FdvG`>8fi;2MJi${[cFifC\[)QaĢ#n1.o#rP#=p%Z"YnZ*РHF*qU 3W%8>Ȗޫ0_VPE2BIF0u0JUcY]i{:@1E$4%,*I D`%@M!+19(Ӓ65dq1 (DZ,(pw4ULU!r`FOC<gRI$hz\-^qh*nSo;/;rq'= C Cq_@-9VsNL/2劵u0XuEv@Bm}n`0]0wS SQ\=00lx['|849m` Ț]ܯ_rzfNy JhmWyzc.6KWN' sPi0~ʖɍsx% ת8 QQf:\F;!lrļ~%D#b:ЯXC^VRQfkE0Ų+^2k4^昚߆ ٧Aǡ~AR1\_~So&[DVQZ'RJ)aChx;i3G +bTוtaM^6Lye(}405yWu:UUN, Q:3ͼ -v 0El Ъ[EwExݍLPBfFUfn.*A^IMYӱldk_ V7 3 ѕo99{io#ǐwi(KJ1zǢlU(Qc+v`Rh%sL7F]t"yxY,1~>_c*V"ϑ`S^RM@iz+*by>&=b7Kneq`m+׺|;gԀ8_3MO'(E?yr[& x/cT 5{J3PΗj}2UB@p`B9H`'\P9}{\N!6F}Tb5)Rx XekRepdick^b; &U?:?Sٟ8n r? Zݛ%<7g`|3:~4G<`CD 9@YK%f^Q>Sd&ٙE ־s =় 8Gu5"v  FwZT,xN OCYly|4E4<8Muo ygE t:?-&HV/*ҧ*$jJX"pFmV Zj2ŽߧP]j\va]]U:q@AbʒBJU :ʙ/eHp_S(%9)C6%FBZ&qh8&/TQ{>E޼4Z(i" ܻ2}y~%rO}vKbQmyH8nW1^k!\@;P҈4ō8}d1ѽlcL{ݯ[PqQ:M;Y)֍˗z!rCymBKYu-8ًE1k"5FdvG`>8fi;2MJi${[cFifC\[)QaĢ#n1.o#rP#=p%Z"YnZ*РHF*qU 3W%8>Ȗޫ0_VPE2BIF0u0JUcY]i{:@1E$4%,*I D`%@M!+19(Ӓ65dq1 (DZ,(pw4ULU!r`FOC<gRI$hz\-^qh*nSo;/;rq'= C Cq_@-9VsNL/2劵u0XuEv@Bm}n`0]0wS SQ\=00lx['|849m` Ț]ܯ_rzfNy JhmWyzc.6KWN' sPi0~ʖɍsx% ת8 QQf:\F;!lrļ~%D#b:ЯXC^VRQfkE0Ų+^2k4^昚߆ ٧Aǡ~AR1\_~So&[DVQZ'RJ)aChx;i3G +bTוtaM^6Lye(}405yWu:UUN, Q:3ͼ -v 0El Ъ[EwExݍLPBfFUfn.*A^IMYӱldk_ V7 3 ѕo99{io#ǐwi(KJ1zǢlU(Qc+v`Rh%sL7F]t"yxY,1~>_c*V"ϑ`S^RM@iz+*by>&=b7Kneq`m+׺|;gԀ8_3MO'(E?yr[& x/cT 5{J3PΗj}2UB@p`B9H`'\P9}{\N!6F}Tb5)Rx XekRepdick^b; &U?:?Sٟ8n r? Zݛ%<7g`|3:~4G<`CD 9@YK%f^Q>Sd&ٙE ־s =় 8Gu5"v  FwZT,xN OCYly|4E4<8Muo ygE t:?-&HV/*ҧ*$jJX"pFmV Zj2ŽߧP]j\va]]U:q@AbʒBJU :ʙ/eHp_S(%9)C6%FBZ&qh8&/TQ{>E޼4Z(i")p8X(bI)Ѐloטк?Rl\rdhUWCV1uȂV?3U`a :c[*^j +K, ѶrcqcJ<=AczgzNL }__nQ3dF0#u?$S/-\a7RDN!zZ% ۾Ppu[ >!Z%+p$t=rW~ǃgAبyf;`oPUiIZ*΅M&VY/ps{ex[^+[y1d|CACk:ȬՉS夐\04愞^ReɎMѼb\]>\F1[+RBMI¾-}54HufɱYRlF]cxYKaDSmcr4y[~^Էig:1\1 ZX.x%_h*g;tX$'#ne;+z )8hڠd&,W":*rs0ɴ[ v7>clO6N<$?$"ŒVwvL]7lBd6#Q^T4O@Թυǃa*1;1d?d+>` D׭yiI|+h aD{9(7h*[Z97R%xQI\^,W"<di=Bwbd x wVJ $Єȵ>޲3TJŷWp1F}K7 L{A꺫r(c,E<>so_#Ak7炊*=:P!?Jk)og y(<<|`,/&zQt6lv40զcfU[ua(.8$RG>)8]xY0hNyD82dzv ӟ hn^%ڽsx8_(og?K>x8Fr=BU:v'>,,xfk/jZ͋NkYkTʂM,VK%vkA!5NR'c-<6Yf^Q4 p `' g}1ˏdx74qӧ9:iɰW=`)Cgw[:߀,{A &&D_Z_y,fk55$W ;+F:~8Hph7b E=QOw4)^|كvD'\˸!İ|gn|Hw+) ([t-G5'W)ëVd$jjvA$o֩jI"=u: Y'Άĩ&'J۵mdi.O=PlW)So\s9Vj{c쩄NKBS@*x4+h;z-]~Y+o$_ZX.h"]7;2M`a%ҪX69b^ q79r8("@InZ20ƣvi* 𔛖vr`pbb=gO~T}ނãIoI 'h ϧq ]: OB(;0F~Քff_9 un=J0f"99KMpޜ)dPftph 4Ek}J+e~ܐSQrZEN5FQeKZ;:n߯"F.MXP2]w5U#Wʼn $5Cakz$bkgzc0@)ߊBlqz>7%5N=`D[,|@6B1;vYW2ii8mk%-7E.(&hz*Ç+G X)giۋR[s5bRl9Kx֛S@LkclVU2Slj\+$߸E+԰k )&H lڷ@8Lfm"0TGz{NlWy*y:H֎)'Pa͸57D`3F$JP,#o+29$8KB<)Vў ,Ө, b'Qb l4|-xV {q󀻯M)^{_{ՑZ$tvq=M(&~#F(EGZJd-ӌE5Ī5ⶱ/$Ċq/<F#t5R B/k~!G`'[%N _@lyЂsuJ 9g]̲Zhu ܻ2}y~%rO}vKbQmyH8nW1^k!\@;P҈4ō8}d1ѽlcL{ݯ[PqQ:M;Y)֍˗z!rCymBKYu-8ًE1k"5FdvG`>8fi;2MJi${[cFifC\[)QaĢ#n1.o#rP#=p%Z"YnZ*РHF*qU 3W%8>Ȗޫ0_VPE2BIF0u0JUcY]i{:@1E$4%,*I D`%@M!+19(Ӓ65dq1 (DZ,(pw4ULU!r`FOC<gRI$hz\-^qh*nSo;/;rq'= C Cq_@-9VsNL/2劵u0XuEv@Bm}n`0]0wS SQ\=00lx['|849m` Ț]ܯ_rzfNy JhmWyzc.6KWN' sPi0~ʖɍsx% ת8 QQf:\F;!lrļ~%D#b:ЯXC^VRQfkE0Ų+^2k4^昚߆ ٧Aǡ~AR1\_~So&[DVQZ'RJ)aChx;i3G +bTוtaM^6Lye(}405yWu:UUN, Q:3ͼ -v 0El Ъ[EwExݍLPBfFUfn.*A^IMYӱldk_ V7 3 ѕo99{io#ǐwi(KJ1zǢlU(Qc+v`Rh%sL7F]t"yxY,1~>_c*V"ϑ`S^RM@iz+*by>&=b7Kneq`m+׺|;gԀ8_3MO'(E?yr[& x/cT 5{J3PΗj}2UB@p`B9H`'\P9}{\N!6F}Tb5)Rx XekRepdick^b; &U?:?Sٟ8n r? Zݛ%<7g`|3:~4G<`CD 9@YK%f^Q>Sd&ٙE ־s =় 8Gu5"v  FwZT,xN OCYly|4E4<8Muo ygE t:?-&HV/*ҧ*$jJX"pFmV Zj2ŽߧP]j\va]]U:q@AbʒBJU :ʙ/eHp_S(%9)C6%FBZ&qh8&/TQ{>E޼4Z(i"> >y/V0 /M HQezcp*op*OV6n)g)Q6Q=$c*Bƚ ?.&+XgEܚoYgL|߅l& I/ѡI'> ~:\@/w8V|79gv"IpWВ k!>֯z~>̜GVio|:'v< 0مd"~[ HrŒoj"Wn,8W+U~@Vۅazܠsvyf+Hz:kbů@< (*&p;`;/!=Y aE٩لZ O˹=,TٺX\q8>{K}3qq)W >:LYBT6+0jwƠ[>{'08`yYc~b#yu1ih<7tqWJYfeܐHQ"*V hfDIt"TR:#Q2ȠJf}1BOo'60m'2ubsO3: 4\e  檊ZqZ Uǐ15@`<[l^ЏwLWXvAm>3Xߐo˫NqH?l҅a\T.ګ5InNPU9A`-vgx}/Fhzt-^XBhfk#:#t4Ę3GivG-4ZWuϒ?ꌋ A͇9YcRB415^˒G~d@՗UH@b?GG۳qԔ>Hꆖ%=[3Y CK8r,Kg Z+"JgnLEfd,͒_r`xrm뱃l⳽Nk̗q8k(Ȟt!,6Y.yp?-g9T[++ GGV-~"J~Qt0%zHϷvY 6͇y(doޠ7(>|/qc5J"$jiV!bЈ5k$y!) wX7̀Y}&Z yVeO[fHWboN} XС|fvAk C\H^lO*P9cR*ىD6? 41()6 8\؉@A=#2(TTَFB 8Y3hT23H[e!w 7Z ~YNeP6秛cȾď<0_yzl7͇ L d}P!2 A7J<#w2oDjzH2 ^{۾sg#wƱhڛ.j~6&^]hwcTRwCnRZ1$=ŋԎ7@,D bh2fL#aYj_+a_9A+fB>(H Y  ?mlZxZ\l6/V$K0'# .ND2+GFj: õWXm@0`\qބrL &B1 s:JQC XR*Q,tƉYw5Rj!ż0ίab&S|-KdBP[5N۵- <_PK^bH29iPbpyQ y[֡ڃ[ a" =F 0#I-&m2uOP&8<U==gRw>9rאg4ZBԳhɗ/R8RĪzX'\.m,2?jO{LFC@/#ǵ?0el to]Idp˕1ReQuBuQ +ET 46- Oqѷe=Nf0[Tv<%֌*{h,CkZ \!ӪɉW*#R1yX-;6sBBR1BrzEN ~9C\8- 4HHT h~a>^qG32$tqw  SYb0C UK@h}晤<Ϥ6;#G`<X*k3EǀCpp[*U'gݒ1; 8ePΘMEQJHSRU8EHOW+ۄlODX\LY)jk1Q idT҂{9I`i!ÉcD,*!{#vr0%_a6L@s0`h`s3v] QU]?Ԗ9E{HZt\tMsofd4]<>zySrhZùp3&v_t Kh3/6Vt. Tiw_u/q 0v` -ł]FtacŦđ sxwu!>)Ҿ͉{?safecopy-1.7/test/test0/test.sh0000755000175100001440000000116611210452245015561 0ustar ravenusers#!/bin/sh test_name="debug library functionality" source "../libtestsuite.sh" function test_current() { testsuite_debug "Test if the test library gets loaded and works." testsuite_debug " Runnign cat on the virtual debug file should result in a 2048 byte file" testsuite_debug " since that is the address of the first simulated IO error." LD_PRELOAD="$preload" cat debug >"$testsuite_tmpdir/test.dat" 2>"$testsuite_tmpdir/test.out" if ! testsuite_assert_filesize "$testsuite_tmpdir/test.dat" 2048; then testsuite_debug "program reported:" testsuite_debug_file "$testsuite_tmpdir/test.out" fi } testsuite_runtest safecopy-1.7/test/test10/0000755000175100001440000000000011726756524014343 5ustar ravenuserssafecopy-1.7/test/test10/simulator.cfg0000644000175100001440000000020311202053543017012 0ustar ravenusersblocksize=1000 filesize=20000 source=test.dat softfailcount=2 hardfail=2 hardfail=4 hardfail=9 hardfail=10 hardfail=11 hardfail=12 safecopy-1.7/test/test10/test4.badblocks0000644000175100001440000000002511202053543017225 0ustar ravenusers1 2 3 4 8 9 10 11 12 safecopy-1.7/test/test10/test1.dat0000644000175100001440000004704011202053543016056 0ustar ravenusersiB֤/gW*WаQ2 UŶi jRT z.Bl#V'^mݙVͨ،Q!zUIznΛhdֵVtwPĹSp袆 ;k}w*E.Y* !FSΏ[¬9IFe0 oBv:C;}uLBNFQnfϑtdw_~E1N6/c5 >%"Y+mxU\K%WNa,ںgdT]`2xar2NPf *ȍLl>E\kX;/b П~aqi)!9ݬiI0 DQ =f4m3^`Z((]b17y[) `[pC5q GքIO}+DR!I;& SSLXW9-FnEEÊAOn>sE>E,jFe"x;#q/Bi(WwzEt54QR_%̳\J~ >RDDN'q[qptjE1 Kָ9a2Ѳ( yZ;{ݕBKu.|u6k3:]t#S8eb$ƦaѽS5IpGTo)ҽ9]XF,IX`48uj$ OQIZ=M MdSVsLi$v9Z`D +gal/)<8S]4ޯ  =j8hMcAq_rq5N2U/KIH%5}|I,F"v!*2U-;?9 U^zmŏYceװ6ۯ KP'f\D :]^G_y dr"~ n:Ϛa_p˩\I5HkspwZQ?MY)?_=P2ed!gaEqbdj!$i~%;"9Z5"+#Ω:gԷ|::a$rH^7L|ӣy%FJY,P"vU+nMg`XV_9fIRY8{>^n#V u]*,tV-F8W 0Pܽxʌ}F<.#+A"+Y470gYϸHT{q޸ʧH_)8xW65[X9SLIaWgYRFRMTz爖YSQA9%պ27fL#_ l[y5m(cRW;>S-9ȣu &zה+)+&̙dfH;ٌ?p%ak:Fh #,yɫ)hƖBG'SFt4JQ@l$#7gmpJmeDowRSƊ\D8`-)l[j?=H~PfI^?!{]PnCHJم_iCoT M2FmG|Yq`iFq#P8()s*ӡ#P#g/)_o[Y{4VDQU^_+#4[2}:9z^)3%9rC=0apԵT!Xgy HgJseI饵V7i`CVc.T"m @» T⎡%1iP`*|2R[M=F^󦅕*J +:B w&1qu%xH \۞0Ba65|X=a/s@[-1_DkLUFDAjiREXSewlhpX9hl>kE6D:5cE QNk'(GE![5\ͱ,U?oxG.,i'kYLftROPQAd>N>[+Jo6c U}YƔXɬڋ-S~u=~JhtjIRzB=:2E!Ura j NH<ě=H_yD[S^S zxQX/L9FS~*!!SZ`\CNts/k>\~L pi:>qD(U54%t,?[w:[:2W y!ȟ!)T3E*AG|2mbui7p_FG%<l>DX3'!GPqbM a$09:҈%*#Z&RQhPjyr5 rV -BwaG=Kk1bBS u/0YY 0eF1~8n{@pHKwq[bᬑ$"ɖ^~MTËLQXDxP?LL%}=jce'X6ш|I|ٷ A_=z׆ZY{6umY1 Npi թHNJn0EܬƟP(ne19Rdlx=CY N{pddKH ۖ>/WlP&XXMWO3!Ŝ1,;%1J$և`G&i͒JVj_@r# Mn+EKnYD)Fn[0u,zA)=$ 1᥃X">&D_菶ߩ,wm6 ̮8Avp#MnX*e Ɩ9Ĺ{xX01B9QvoOG ~CQT2]#9Ai(: "r&,m2i Ipa"#D>;s&#I\lDPEEm,nLR@j!& mE>eN-y?TYi_9}t6"F=@(@=8-2Zvg&['Nǹ " c|c$h5|pnL i_0i2[֛ZQJUTweU, A8d)M<#Yo/"Y w6. ݣz``-dNy&As]DFAԩT k3cvCUHH zvv@]90C&$7jyf??vgBGAÙg'N-mqN:t`KEkC7}eΉr6}PL2zӆq&͛mI4/zMjmE091gE 7Ý%a{a\Id@SS =^3{g@НVY>!y@oߏ=`NJnh(~ N7-fG)m"0zi!G٦X/atr:[!1\by1K+>8y_xzXd>[Κ?e k85$=- e/~f׭}@H20qs[Y;w-f:v;a"&}P8mVmꡊRq?mGвd9X3& L,bRѶqJяT^̭ai0&VkqۗjBx Eҏ;GmV؂%h Ρ+3os pYy盫G ~HR;o>j&mXO2^ͦ0EOq5P`;D 󲃐'B>a0.8/[B LÒ#{l0>μܓ1f z֭-dG&"y 0 @.X'<΋Bΐ9m}oUM=P̐gf>:háu#]@cKVHoLZa2GM=(ڴ{EM,pBowͼ%!!Q|݅ ﹶ\ܕL\A&D.مPeI _sXUKeq7xRM]aO%zsx Ow~@Zص!d|$b%cvjq5D[+&\D ;FESiu_<,Z_\HlNGV^L Kiʹmo9RPr|]\nBl^8 :szYV'ɽ!tƉv Dh KNL/B*LkVpֱ67)\\VN=M:z2 ,P Wb D'Dlrp(Բ4Sq-`x~f @:ǽ1ɛ9{r m1rx)mX$ƞ.3uwkm viRg*G17EdbJR>}35TU@*|-#@KVn,^%c[H.k1XoInhc_j{?9~}i_P\ QF٘฀u"fF搼H^7UhCr",1ɕ$gN8L`./b=ӵvq{MO@ !s4"\zу݃%dG?>sm@28zXf.=줌J9lVB ʸꁐ)J3=CqC*$/[ʜ Gz/ 6Yr*j֯x( / HVQvIĄq4ƫbfW}'lQ7#zC<6rj 7R?0v4R n6Uv˂C'g!3|^7Άyabo &q]:hb`?vk().l(l */S\#~\rA>OjL S½]ЁtfG8+{";7K|SbrfNzRZSW|Fxi~ E0~#SmbbXfq&XS"`^7{qVqZ7wyT#hV.AAK9rTcet^_ZC]'r S[$AG DķF/,;LJ 8S|θ؄W K*vOA3:[^%DF53SB37^ &Pݱ h3qՋ/Ƅ'V&X -BF-CLì^78|V=-jC ^$b//-`BW%1~rPh=5R$}2*xiD[ǃ(@-~(+ qac#,G1hL JĀ*c?U"d{C#4 ErhTQRANa/.HP XF<'Ma87oW; {X~&>s9 v#ÒRL`63}pnE9u a㬖:C7z0z$.SK5:w Y^HG+Ǒ/]2ГgV-jzQ.CPs;ВzZ-l)ի $i;`yZu؄pQ^{F`Օvf8gxWAW: gˌ,dHvT2Qc6Tp6y=|AADDҨck\A߾T%b?^^(h]GBfBtU`?km[|y #%qƸ*0oe&׏0d*QF4w͚JOstiIͮXzՌ&i h~Sa)DZ\īiA!7K+? (bnP%gFHkp|̠1lb$חPyu]LQj/ &ͩ`c9!Z:ز?Wi` }Ԗ`.TG+ÓyC999 ӋVOvS냼Yya2'J ʪli z\'"9h6[}JQ/safecopy-1.7/test/test10/test2.dat0000644000175100001440000004704011202053543016057 0ustar ravenusersiB֤/gW*WаQ2 UŶi jRT z.Bl#V'^mݙVͨ،Q!zUIznΛhdֵVtwPĹSp袆 ;k}w*E.Y* !FSΏ[¬9IFe0 oBv:C;}uLBNFQnfϑtdw_~E1N6/c5 >%"Y+mxU\K%WNa,ںgdT]`2xar2NPf *ȍLl>E\kX;/b П~aqi)!9ݬiI0 DQ =f4m3^`Z((]b17y[) `[pC5q GքIO}+DR!I;& SSLXW9-FnEEÊAOn>sE>E,jFe"x;#q/Bi(WwzEt54QR_%̳\J~ >RDDN'q[qptjE1 Kָ9a2Ѳ( yZ;{ݕBKu.|u6k3:]t#S8eb$ƦaѽS5IpGTo)ҽ9]XF,IX`48uj$ OQIZ=M MdSVsLi$v9Z`D +gal/)<8S]4ޯ  =j8hMcAq_rq5N2U/KIH%5}|I,F"v!*2U-;?9 U^zmŏYceװ6ۯ KP'f\D :]^G_y dr"~ n:Ϛa_p˩\I5HkspwZQ?MY)?_=P2ed!gaEqbdj!$i~%;"9Z5"+#Ω:gԷ|::a$rH^7L|ӣy%FJY,P"vU+nMg`XV_9fIRY8{>^n#V u]*,tV-F8W 0Pܽxʌ}F<.#+A"+Y470gYϸHT{q޸ʧH_)8xW65[X9SLIaWMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMAgYRFRMTz爖YSQA9%պ27fL#_ l[y5m(cRW;>S-9ȣu &zה+)+&̙dfH;ٌ?p%ak:Fh #,yɫ)hƖBG'SFt4JQ@l$#7gmpJmeDowRSƊ\D8`-)l[j?=H~PfI^?!{]PnCHJم_iCoT M2FmG|Yq`iFq#P8()s*ӡ#P#g/)_o[Y{4VDQU^_+#4[2}:9z^)3%9rC=0apԵT!Xgy HgJseI饵V7i`CVc.T"m @» T⎡%1iP`*|2R[M=F^󦅕*J +:B w&1qu%xH \۞0Ba65|X=a/s@[-1_DkLUFDAjiREXSewlhpX9hl>kE6D:5cE QNk'(GE![5\ͱ,U?oxG.,i'kYLftROPQAd>N>[+Jo6c U}YƔXɬڋ-S~u=~JhtjIRzB=:2E!Ura j NH<ě=H_yD[S^S zxQX/L9FS~*!!SZ`\CNts/k>\~L pi:>qD(U54%t,?[w:[:2W y!ȟ!)T3E*AG|2mbui7p_FG%<l>DX3'!GPqbM a$09:҈%*#Z&RQhPjyr5 rV -BwaG=Kk1bBS u/0YY 0eF1~8n{@pHKwq[bᬑ$"ɖ^~MTËLQXDxP?LL%}=jce'X6ш|I|ٷ A_=z׆ZY{6umY1 Npi թHNJn0EܬƟP(ne19Rdlx=CY N{pddKH ۖ>/WlP&XXMWO3!Ŝ1,;%1J$և`G&i͒JVj_@r# Mn+EKnYD)Fn[0u,zA)=$ 1᥃X">&D_菶ߩ,wm6 ̮8Avp#MnX*e Ɩ9Ĺ{xX01B9QvoOG ~CQT2]#9Ai(: "r&,m2i Ipa"#D>;s&#I\lDPEEm,nLR@j!& mE>eN-y?TYi_9}t6"F=@(@=8-2Zvg&['Nǹ " c|c$h5|pnL i_0i2[֛ZQJUTweU, A8d)M<#Yo/"Y w6. ݣz``-dNy&As]DFAԩT k3cvCUHH zvv@]90C&$7jyf??vgBGAÙg'N-mqN:t`KEkC7}eΉr6}PL2zӆq&͛mI4/zMjmE091gE 7Ý%a{a\Id@SS =^3{g@НVY>!y@oߏ=`NJnh(~ N7-fG)m"0zi!G٦X/atr:[!1\by1K+>8y_xzXd>[Κ?e k85$=- e/~f׭}@H20qs[Y;w-f:v;a"&}P8mVmꡊRq?mGвd9X3& L,bRѶqJяT^̭ai0&VkqۗjBx Eҏ;GmV؂%h Ρ+3os pYy盫G ~HR;o>j&mXO2^ͦ0EOq5P`;D 󲃐'B>a0.8/[B LÒ#{l0>μܓ1f z֭-dG&"y 0 @.X'<΋Bΐ9m}oUM=P̐gf>:háu#]@cKVHoLZa2GM=(ڴ{EM,pBowͼ%!!Q|݅ ﹶ\ܕL\A&D.مPeI _sXUKeq7xRM]aO%zsx Ow~@Zص!d|$b%cvjq5D[+&\D ;FESiu_<,Z_\HlNGV^L Kiʹmo9RPr|]\nBl^8 :szYV'ɽ!tƉv Dh KNL/B*LkVpֱ67)\\VN=M:z2 ,P Wb D'Dlrp(Բ4Sq-`x~f @:ǽ1ɛ9{r m1rx)mX$ƞ.3uwkm viRg*G17EdbJR>}35TU@*|-#@KVn,^%c[H.k1XoInhc_j{?9~}i_P\ QF٘฀u"fF搼H^7UhCr",1ɕ$gN8L`./b=ӵvq{MO@ !s4"\zу݃%dG?>sm@28zXf.=줌J9lVB ʸꁐ)J3=CqC*$/[ʜ Gz/ 6Yr*j֯x( / HVQvIĄq4ƫbfW}'lQ7#zC<6rj 7R?0v4R n6Uv˂C'g!3|^7Άyabo &q]:hb`?vk().l(l */S\#~\rA>OjL S½]ЁtfG8+{";7K|SbrfNzRZSW|Fxi~ E0~#SmbbXfq&XS"`^7{qVqZ7wyT#hV.AAK9rTcet^_ZC]'r S[$AG DķF/,;LJ 8S|θ؄W K*vOA3:[^%DF53SB37^ &Pݱ h3qՋ/Ƅ'V&X -BF-CLì^78|V=-jC ^$b//-`BW%1~rPh=5R$}2*xiD[ǃ(@-~(+ qac#,G1hL JĀ*c?U"d{C#4 ErhTQRANa/.HP XF<'Ma87oW; {X~&>s9 v#ÒRL`63}pnE9u a㬖:C7z0z$.SK5:w Y^HG+Ǒ/]2ГgV-jzQ.CPs;ВzZ-l)ի $i;`yZu؄pQ^{F`Օvf8gxWAW: gˌ,dHvT2Qc6Tp6y=|AADDҨck\A߾T%b?^^(h]GBfBtU`?km[|y #%qƸ*0oe&׏0d*QF4w͚JOstiIͮXzՌ&i h~Sa)DZ\īiA!7K+? (bnP%gFHkp|̠1lb$חPyu]LQj/ &ͩ`c9!Z:ز?Wi` }Ԗ`.TG+ÓyC999 ӋVOvS냼Yya2'J ʪli z\'"9h6[}JQ/safecopy-1.7/test/test10/test.dat0000644000175100001440000004704011202053543015775 0ustar ravenusersiB֤/gW*WаQ2 UŶi jRT z.Bl#V'^mݙVͨ،Q!zUIznΛhdֵVtwPĹSp袆 ;k}w*E.Y* !FSΏ[¬9IFe0 oBv:C;}uLBNFQnfϑtdw_~E1N6/c5 >%"Y+mxU\K%WNa,ںgdT]`2xar2NPf *ȍLl>E\kX;/b П~aqi)!9ݬiI0 DQ =f4m3^`Z((]b17y[) `[pC5q GքIO}+DR!I;& SSLXW9-FnEEÊAOn>sE>E,jFe"x;#q/Bi(WwzEt54QR_%̳\J~ >RDDN'q[qptjE1 Kָ9a2Ѳ( yZ;{ݕBKu.|u6k3:]t#S8eb$ƦaѽS5IpGTo)ҽ9]XF,IX`48uj$ OQIZ=M MdSVsLi$v9Z`D +gal/)<8S]4ޯ  =j8hMcAq_rq5N2U/KIH%5}|I,F"v!*2U-;?9 U^zmŏYceװ6ۯ KP'f\D :]^G_y dr"~ n:Ϛa_p˩\I5HkspwZQ?MY)?_=P2ed!gaEqbdj!$i~%;"9Z5"+#Ω:gԷo!V Hu7H&jOu;ߗZӻFv;y0hjv]/؋Vшo!z`*9(3Qo9ZyoCE{2|XH,7\/2mQo4{ 3aLgvfE1Q uKJF~%o + INԖQeļ{zŵPOϺ}L: r=k~וLݸ QZ씝+]fkj KL'ʟ<<' Zi+{8l]nf+oYIo G{o>w i~ ь.\ ('d ʚ&kаH5Yzx8rl9o.&`J'}'` g˺Pj[xv5@zHp_J[!4C T0؆fo}*]<)yjŞuOtX)k=6s9s^gGܬZ~t­ϰȓ%L쭦$$ )01qk_gD>iXZQ\RB ˜ hLZ0g u5W1*+Ńn^W!ٴ^Z7p`%60^{rb]~]LrXm&{%X&I˚H:T-}Iex`հ]$GNX7HF\͔)YZ/+W1Q?(XŖb/΂ iYԛ#A+d֟iE5]pT{Rd܅7^,iu:deIaۜ ŌDcXZmAd@K&iv02}d"ŭ #tAmaAU^޽Oɵie2Kf3Ĝ_U6٣|nzAI7f H\~}z#Tu։QGuIʙۺwgʽf-'P%)韻gq7Ԅ8ĸf,@;0_ǐ2;T̯ڀ IŝbO2=~?99 r(5Z61U:50u٩6Bceʤ@ sddsv~s6O/QVK\bue7;I 1,<{8{uʑ8>˰IyVBĆ o6m>1O̳:B=vԦ/v!k5euU-ڌ'sKˇPsƨvl: 1]έA#z4:L-hP3IR 266vs܌3xw3Nta2Bɓmkڬu2Q>r536h80ͯpW yeJVmq M꺠U)$eBtpp`wYڣ3sJ$\* HAA!Ll z|?pz9Ruks @8{S/NK0d[Nߢ }wXc'/ Xv& ؘr<"S!}Q_D-Cc+HgG. ?<4NDzd3Piȉۓ"Tq>=׬ x5D ~)1+1Hn>>(z@ -#Qb! sBv )A1 2up<ӨJl pS"N3%RX5LGY*< 3u"o*Xfod666>Rd^ˡp UF~+`7o8] u|Ri/V$az =h˻~4}:e&I8Mf\ˋ'd=}BkrDg^2JD 5EEjTWN-jcq^%%vvrO7e! )hئ?CCYr1&ZP*hq!Sψa.)w~=Q숽@MzgYAkZK/Dݱ9nnǗcwua;d^e9 ]zkydC+\UofHtQ{fʓPY2$DoB(]'hmW0K5E$0řJ}íSg; ,7XdVw ~rNZҊ|yd Kә*ޯųOEZôH3 jżYiűM򱏯ns3ǂl`He U}E׎,!c1cӤ`AQ]`0K˒lXqS>|::a$rH^7L|ӣy%FJY,P"vU+nMg`XV_VLy2!%P, 79F1Q{>c̨|0b$ET;Oj0 MddWI|jͱBKKXD+5;\FժZig YfLX^2d.W6yL#Z%yڢwoSV%؂=L(#["*S mo)Knjd-o[5!m0':K׹Rz(QMHJ < xeP3f_~Ɯf 2Mtz'7L%5<44[(WhD՛RX[:Lo!{*YŞc,2EWCr@ ݾ7&|%5e+f]MlB_93,HBg11>o~2@)⣲;u[*#ZI(պ\1JSg|!7d Gr|=tƢ\7s,gP"qﺚadkn@5Om n73xmJ|vCEmdiOwf^lҩf\+7VNPmR.VKa:61գ8 H.r+qvp1Zu/Yh.jMڈ)[]];Ľ4X(wf\`?c tتldnaƕ4|lI樟ԠCvr̍#,Edҧd L3ɵ}^}Y$߯pYk= ZB+ۮ:9c@˞MG<Kх4ש{] Tb_GU\*e0.OZ^Ϡ:-5aEё)ȌQ@sPB;ڼSv(Ƽfu%uVTLHMx2ԪO_ZOf$HEF :0á2YP Z7i'f>8 !J+^[zQ%zw:(bδͿ%MkI]"Eq7\/$E#e|yfPɕm$=R ~ҕj3܄Q>!GPFSO[יf"! jYp|䒂h/~|o!<!XPΙSgWZg #Xzўcb-]TŁ EţμgxU'C#)/Ǖ|҉l[Wy7a}৔ ^OH6eMӂܠ9q`=KuE7lCG2;XI9s 9!2-}5L)fKn;VVHtg_ 4\#;[“ɷ[>>֍[gȥx"ӟN/SbzL専C3$Wks+kvݹGNvzɰ|)|2+ҫ#G/Dj#Xf`F 0D><ŽKFGXw ]:gy(B#D?/jwIfd0)_}\SKAVU%gB\Z9C) *d8#=؎s,KSn,th߃w$`KH|OvRwnzClNMq==3/Tp%\s:ɏ?W}ϵ91H%2̂07<UdJkV0kcyOZ#ܔO6N9x9hhKpSk 4ލ['Q_>I(Cy~қ}}SZ5!&3l/e蘸!T<*"0ԁ@vLsGR5wwG]4M` _%S50,O UI^|XLiBooc&Xfv16_N"ْEnM}K IYrQ~Zf`iQӢKџ! 󴗝Mq҄ rQ#V ,TU'(-b3ѳwkGoV!|0`U 3:~׶[z)xY^^v>Gp{ۢI G}àsn͟_WlpO b r҄@"hv8D4F!o<|S08c tih%aG:hDSS]U1yr$:ʜ]d\;A:ICTZvMt5Ӏhz4{ MAn{+(UIe[$j7M:Ak߮w s "tg瘰 R\l*<8Rq [.28 AES NrF0m@a :?DyQ1jLPugc9fIRY8{>^n#V u]*,tV-F8W 0Pܽxʌ}F<.#+A"+Y470gYϸHT{q޸ʧH_)8xW65[X9SLIaW]я%}"$l#eV#f~!t3[$knZ-a1k]~n|=ΦoN^S;Ǎ5lDm Da4Eޜ۱|!#E*VwEr2JsbY6h٧ވ'Q|ӟg' A_[^Q_ZO<;FvWƿK,* ÆiNO%H_% uw *Ӗ hЪ7PPXT}woNm3gMu\-q3j%IH cpQwm,fs4ޏDj3l^"w\'6El[Ĥx;=))M@[$l{VA4-6Rd/y'|Z{2VtkҀӽP!SH]暵(3r"dkʨsl7|LfEuiϒt)3=X}ׅ xG HϞ\2׹ݺmZ"' ݰsd~gv=OSRhf^l4&.:(-]3}' zI63;BOOr:/bxpKoM0#`:y9A{:tV7g*W_(D@ës'\mXI=FeH$ڳ*k"w&x')mj@'<{no)5p-pT[4md!r!ڡ77leG22_;kV*ej=Yb"^ҪNdfWY*~}z$*,O!~zlV޺#A~ \eVj-6n•|bzDm.5n x"n f;6*lNm" &a ~)}6ďW@̍XfQ݋^?YrPp;BŒ6P)*K]n)G :V?5%C%}sw6'̽Ilgg=L{%2cͣ D-J1X!3.5s*Ga:4@^WoRF쩶k G_X.d3H+\Ϸ[[fύI)o;/՘co\20.1Û|NGUJt5'wS8-rӈ~)[r14/n,~ #5^uX¹6QyrB-z6a8y K6Wqӝ4`q0 ;ؿQJ]rQI"䞽]N._; [}_VEPLb'3R*=iW+.EҎV;-TCC^go?ҍT~_]rKGT4  #D!)TS|_Jl-8~,iB0֧e)݉ӎҞ%`dzNށV,Hs6 s-4iy:`( ר"eAFl>Yk;ZTvx\\ ?, xr@!Iu7n 1O/*XMφ7\ֶ7>$U`u7" NjW{6rQm~29 Ե*tM@9Pƙyx+=<}h0IHŻk`u:E>֣7"(ZFH;3]rtv[:6WBM!ӎܨ?3_mJd 1^лZ~0N͉#͉vgoT^KRc@6WLSoɓNul2Ju( \Orᩝ`zDv,rA'i Eۢ[ f]bmr>EM!up4[3"@=_rݵ?[ .iҭ9:)5%_KհYskBN ` ~!Ô>ǿhcNoU<D,O:,0o.P|;: 1drRhuFAz˜N]C|݉z?ND4'WmbngUTKF;3dBjg5>*=8'eI§3<yKĹ24H}y\Txi֛g+/u3TEB+Ci39}S}gN᜗Ь/m٠{sE[eS=p>1#;`jzhd-~}0DAFbvݓgQ`aV݄!OeDy>Fd$h{kC%dO}$N乪ko={? 6-<#ouagj୭E3V BՙR,gg0#I\ ,'n' *Ba SZ?6 Fg3IуbAٴQ"s#NBa fK#/hBu2g9Z+}(8x&rK?=- P[m}1ύ85MX=jS@6>K\l{Ə/ +An]~ɧgrUf_8>3 #V0ѓ5mTT> FzV2F6Kݢ7]C0'RΜS,u{ɞR8˧ɞ 9~Fz..Us&}&{|Md5%஌muWryp :6-RN FҭyQv1jʧJt!&͏[0̩h6é1ݘY|~|s/M5Ǽ8=aXh+? S TpUV!jpւ#怒WvkEm'T=ɉ]q_^ZKs*w=[\N-YAͨ됆*kkIl؍LȶZ6ABCy& >C~ncv#u@P{ʸ S}'d>(JtۑV,%UfxgYRFRMTz爖YSQA9%պ27fL#_ l[y5m(cRW;>S-9ȣu &zה+)+&̙dfH;ٌ?p%ak:Fh #,yɫ)hƖBG'SFt4JQ@l$#7gmpJmeDowRSƊ\D8`-)l[j?=H~PfI^?!{]PnCHJم_iCoT M2FmG|Yq`iFq#P8()s*ӡ#P#g/)_o[Y{4VDQU^_+#4[2}:9z^)3%9rC=0apԵT!Xgy HgJseI饵V7i`CVc.T"m @» T⎡%1iP`*|2R[M=F^󦅕*J +:B w&1qu%xH \۞0Ba65|X=a/s@[-1_DkLUFDAjiREXSewlhpX9hl>kE6D:5cE QNk'(GE![5\ͱ,U?oxG.,i'kYLftROPQAd>N>[+Jo6c U}YƔXɬڋ-S~u=~JhtjIRzB=:2E!Ura j NH<ě=H_yD[S^S zxQX/L9FS~*!!SZ`\CNts/k>\~L pi:>qD(U54%t,?[w:[:2W y!ȟ!)T3E*AG|2mbui7p_FG%<l>DX3'!GPqbM a$09:҈%*#Z&RQhPjyr5 rV -BwaG=Kk1bBS u/0YY 0eF1~8n{@pHKwq[bᬑ$"ɖ^~MTËLQXDxP?LL%}=jce'X6ш|I|ٷ A_=z׆ZY{6umY1 Npi թHNJn0EܬƟP(ne19Rdlx=CY N{pddKH ۖ>/WlP&XXMWO3!Ŝ1,;%1J$և`G&i͒JVj_@r# Mn+EKnYD)Fn[0u,zA)=$ 1᥃X">&D_菶ߩ,wm6 ̮8Avp#MnX*e Ɩ9Ĺ{xX01B9QvoOG ~CQT2]#9Ai(: "r&,m2i Ipa"#D>;s&#I\lDPEEm,nLR@j!& mE>eN-y?TYi_9}t6"F=@(@=8-2Zvg&['Nǹ " c|c$h5|pnL i_0i2[֛ZQJUTweU, A8d)M<#Yo/"Y w6. ݣz``-dNy&As]DFAԩT k3cvCUHH zvv@]90C&$7jyf??vgBGAÙg'N-mqN:t`KEkC7}eΉr6}PL2zӆq&͛mI4/zMjmE091gE 7Ý%a{a\Id@SS =^3{g@НVY>!y@oߏ=`NJnh(~ N7-fG)m"0zi!G٦X/atr:[!1\by1K+>8y_xzXd>[Κ?e k85$=- e/~f׭}@H20qs[Y;w-f:v;a"&}P8mVmꡊRq?mGвd9X3& L,bRѶqJяT^̭ai0&VkqۗjBx Eҏ;GmV؂%h Ρ+3os pYy盫G ~HR;o>j&mXO2^ͦ0EOq5P`;D 󲃐'B>a0.8/[B LÒ#{l0>μܓ1f z֭-dG&"y 0 @.X'<΋Bΐ9m}oUM=P̐gf>:háu#]@cKVHoLZa2GM=(ڴ{EM,pBowͼ%!!Q|݅ ﹶ\ܕL\A&D.مPeI _sXUKeq7xRM]aO%zsx Ow~@Zص!d|$b%cvjq5D[+&\D ;FESiu_<,Z_\HlNGV^L Kiʹmo9RPr|]\nBl^8 :szYV'ɽ!tƉv Dh KNL/B*LkVpֱ67)\\VN=M:z2 ,P Wb D'Dlrp(Բ4Sq-`x~f @:ǽ1ɛ9{r m1rx)mX$ƞ.3uwkm viRg*G17EdbJR>}35TU@*|-#@KVn,^%c[H.k1XoInhc_j{?9~}i_P\ QF٘฀u"fF搼H^7UhCr",1ɕ$gN8L`./b=ӵvq{MO@ !s4"\zу݃%dG?>sm@28zXf.=줌J9lVB ʸꁐ)J3=CqC*$/[ʜ Gz/ 6Yr*j֯x( / HVQvIĄq4ƫbfW}'lQ7#zC<6rj 7R?0v4R n6Uv˂C'g!3|^7Άyabo &q]:hb`?vk().l(l */S\#~\rA>OjL S½]ЁtfG8+{";7K|SbrfNzRZSW|Fxi~ E0~#SmbbXfq&XS"`^7{qVqZ7wyT#hV.AAK9rTcet^_ZC]'r S[$AG DķF/,;LJ 8S|θ؄W K*vOA3:[^%DF53SB37^ &Pݱ h3qՋ/Ƅ'V&X -BF-CLì^78|V=-jC ^$b//-`BW%1~rPh=5R$}2*xiD[ǃ(@-~(+ qac#,G1hL JĀ*c?U"d{C#4 ErhTQRANa/.HP XF<'Ma87oW; {X~&>s9 v#ÒRL`63}pnE9u a㬖:C7z0z$.SK5:w Y^HG+Ǒ/]2ГgV-jzQ.CPs;ВzZ-l)ի $i;`yZu؄pQ^{F`Օvf8gxWAW: gˌ,dHvT2Qc6Tp6y=|AADDҨck\A߾T%b?^^(h]GBfBtU`?km[|y #%qƸ*0oe&׏0d*QF4w͚JOstiIͮXzՌ&i h~Sa)DZ\īiA!7K+? (bnP%gFHkp|̠1lb$חPyu]LQj/ &ͩ`c9!Z:ز?Wi` }Ԗ`.TG+ÓyC999 ӋVOvS냼Yya2'J ʪli z\'"9h6[}JQ/safecopy-1.7/test/test10/test3.dat0000644000175100001440000004704011202053543016060 0ustar ravenusersiB֤/gW*WаQ2 UŶi jRT z.Bl#V'^mݙVͨ،Q!zUIznΛhdֵVtwPĹSp袆 ;k}w*E.Y* !FSΏ[¬9IFe0 oBv:C;}uLBNFQnfϑtdw_~E1N6/c5 >%"Y+mxU\K%WNa,ںgdT]`2xar2NPf *ȍLl>E\kX;/b П~aqi)!9ݬiI0 DQ =f4m3^`Z((]b17y[) `[pC5q GքIO}+DR!I;& SSLXW9-FnEEÊAOn>sE>E,jFe"x;#q/Bi(WwzEt54QR_%̳\J~ >RDDN'q[qptjE1 Kָ9a2Ѳ( yZ;{ݕBKu.|u6k3:]t#S8eb$ƦaѽS5IpGTo)ҽ9]XF,IX`48uj$ OQIZ=M MdSVsLi$v9Z`D +gal/)<8S]4ޯ  =j8hMcAq_rq5N2U/KIH%5}|I,F"v!*2U-;?9 U^zmŏYceװ6ۯ KP'f\D :]^G_y dr"~ n:Ϛa_p˩\I5HkspwZQ?MY)?_=P2ed!gaEqbdj!$i~%;"9Z5"+#Ω:gԷ|::a$rH^7L|ӣy%FJY,P"vU+nMg`XV_9fIRY8{>^n#V u]*,tV-F8W 0Pܽxʌ}F<.#+A"+Y470gYϸHT{q޸ʧH_)8xW65[X9SLIaWMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMAgYRFRMTz爖YSQA9%պ27fL#_ l[y5m(cRW;>S-9ȣu &zה+)+&̙dfH;ٌ?p%ak:Fh #,yɫ)hƖBG'SFt4JQ@l$#7gmpJmeDowRSƊ\D8`-)l[j?=H~PfI^?!{]PnCHJم_iCoT M2FmG|Yq`iFq#P8()s*ӡ#P#g/)_o[Y{4VDQU^_+#4[2}:9z^)3%9rC=0apԵT!Xgy HgJseI饵V7i`CVc.T"m @» T⎡%1iP`*|2R[M=F^󦅕*J +:B w&1qu%xH \۞0Ba65|X=a/s@[-1_DkLUFDAjiREXSewlhpX9hl>kE6D:5cE QNk'(GE![5\ͱ,U?oxG.,i'kYLftROPQAd>N>[+Jo6c U}YƔXɬڋ-S~u=~JhtjIRzB=:2E!Ura j NH<ě=H_yD[S^S zxQX/L9FS~*!!SZ`\CNts/k>\~L pi:>qD(U54%t,?[w:[:2W y!ȟ!)T3E*AG|2mbui7p_FG%<l>DX3'!GPqbM a$09:҈%*#Z&RQhPjyr5 rV -BwaG=Kk1bBS u/0YY 0eF1~8n{@pHKwq[bᬑ$"ɖ^~MTËLQXDxP?LL%}=jce'X6ш|I|ٷ A_=z׆ZY{6umY1 Npi թHNJn0EܬƟP(ne19Rdlx=CY N{pddKH ۖ>/WlP&XXMWO3!Ŝ1,;%1J$և`G&i͒JVj_@r# Mn+EKnYD)Fn[0u,zA)=$ 1᥃X">&D_菶ߩ,wm6 ̮8Avp#MnX*e Ɩ9Ĺ{xX01B9QvoOG ~CQT2]#9Ai(: "r&,m2i Ipa"#D>;s&#I\lDPEEm,nLR@j!& mE>eN-y?TYi_9}t6"F=@(@=8-2Zvg&['Nǹ " c|c$h5|pnL i_0i2[֛ZQJUTweU, A8d)M<#Yo/"Y w6. ݣz``-dNy&As]DFAԩT k3cvCUHH zvv@]90C&$7jyf??vgBGAÙg'N-mqN:t`KEkC7}eΉr6}PL2zӆq&͛mI4/zMjmE091gE 7Ý%a{a\Id@SS =^3{g@НVY>!y@oߏ=`NJnh(~ N7-fG)m"0zi!G٦X/atr:[!1\by1K+>8y_xzXd>[Κ?e k85$=- e/~f׭}@H20qs[Y;w-f:v;a"&}P8mVmꡊRq?mGвd9X3& L,bRѶqJяT^̭ai0&VkqۗjBx Eҏ;GmV؂%h Ρ+3os pYy盫G ~HR;o>j&mXO2^ͦ0EOq5P`;D 󲃐'B>a0.8/[B LÒ#{l0>μܓ1f z֭-dG&"y 0 @.X'<΋Bΐ9m}oUM=P̐gf>:háu#]@cKVHoLZa2GM=(ڴ{EM,pBowͼ%!!Q|݅ ﹶ\ܕL\A&D.مPeI _sXUKeq7xRM]aO%zsx Ow~@Zص!d|$b%cvjq5D[+&\D ;FESiu_<,Z_\HlNGV^L Kiʹmo9RPr|]\nBl^8 :szYV'ɽ!tƉv Dh KNL/B*LkVpֱ67)\\VN=M:z2 ,P Wb D'Dlrp(Բ4Sq-`x~f @:ǽ1ɛ9{r m1rx)mX$ƞ.3uwkm viRg*G17EdbJR>}35TU@*|-#@KVn,^%c[H.k1XoInhc_j{?9~}i_P\ QF٘฀u"fF搼H^7UhCr",1ɕ$gN8L`./b=ӵvq{MO@ !s4"\zу݃%dG?>sm@28zXf.=줌J9lVB ʸꁐ)J3=CqC*$/[ʜ Gz/ 6Yr*j֯x( / HVQvIĄq4ƫbfW}'lQ7#zC<6rj 7R?0v4R n6Uv˂C'g!3|^7Άyabo &q]:hb`?vk().l(l */S\#~\rA>OjL S½]ЁtfG8+{";7K|SbrfNzRZSW|Fxi~ E0~#SmbbXfq&XS"`^7{qVqZ7wyT#hV.AAK9rTcet^_ZC]'r S[$AG DķF/,;LJ 8S|θ؄W K*vOA3:[^%DF53SB37^ &Pݱ h3qՋ/Ƅ'V&X -BF-CLì^78|V=-jC ^$b//-`BW%1~rPh=5R$}2*xiD[ǃ(@-~(+ qac#,G1hL JĀ*c?U"d{C#4 ErhTQRANa/.HP XF<'Ma87oW; {X~&>s9 v#ÒRL`63}pnE9u a㬖:C7z0z$.SK5:w Y^HG+Ǒ/]2ГgV-jzQ.CPs;ВzZ-l)ի $i;`yZu؄pQ^{F`Օvf8gxWAW: gˌ,dHvT2Qc6Tp6y=|AADDҨck\A߾T%b?^^(h]GBfBtU`?km[|y #%qƸ*0oe&׏0d*QF4w͚JOstiIͮXzՌ&i h~Sa)DZ\īiA!7K+? (bnP%gFHkp|̠1lb$חPyu]LQj/ &ͩ`c9!Z:ز?Wi` }Ԗ`.TG+ÓyC999 ӋVOvS냼Yya2'J ʪli z\'"9h6[}JQ/safecopy-1.7/test/test10/test1.badblocks0000644000175100001440000000002411202053543017221 0ustar ravenusers1 2 3 4 7 8 9 10 11 safecopy-1.7/test/test10/test6.dat0000644000175100001440000004704011202053543016063 0ustar ravenusersiB֤/gW*WаQ2 UŶi jRT z.Bl#V'^mݙVͨ،Q!zUIznΛhdֵVtwPĹSp袆 ;k}w*E.Y* !FSΏ[¬9IFe0 oBv:C;}uLBNFQnfϑtdw_~E1N6/c5 >%"Y+mxU\K%WNa,ںgdT]`2xar2NPf *ȍLl>E\kX;/b П~aqi)!9ݬiI0 DQ =f4m3^`Z((]b17y[) `[pC5q GքIO}+DR!I;& SSLXW9-FnEEÊAOn>sE>E,jFe"x;#q/Bi(WwzEt54QR_%̳\J~ >RDDN'q[qptjE1 Kָ9a2Ѳ( yZ;{ݕBKu.|u6k3:]t#S8eb$ƦaѽS5IpGTo)ҽ9]XF,IX`48uj$ OQIZ=M MdSVsLi$v9Z`D +gal/)<8S]4ޯ  =j8hMcAq_rq5N2U/KIH%5}|I,F"v!*2U-;?9 U^zmŏYceװ6ۯ KP'f\D :]^G_y dr"~ n:Ϛa_p˩\I5HkspwZQ?MY)?_=P2ed!gaEqbdj!$i~%;"9Z5"+#Ω:gԷ˰IyVBĆ o6m>1O̳:B=vԦ/v!k5euU-ڌ'sKˇPsƨvl: 1]έA#z4:L-hP3IR 266vs܌3xw3Nta2Bɓmkڬu2Q>r536h80ͯpW yeJVmq M꺠U)$eBtpp`wYڣ3sJ$\* HAA!Ll z|?pz9@ -#Qb! sBv )A1 2up<ӨJl pS"N3%RX5LGY*< 3u"o*Xfod666>Rd^ˡp UF~+`7o8] u|Ri/V$az =h˻~4}:e&I8Mf\ˋ'd=}BkrDg^2JD 5EEjTWN-jcq^%%vvrO7e! )hئ?CCYr1&ZP*hq!Sψa.)w~=Q숽@MzgYAkZK/Dݱ9nnǗcwua;d^e9 ]zkydC+\UofHtQ{fʓPY2$DoB(]'hmW0K5E$0řJ}íSg; ,7XdVw ~rNZҊ|yd Kә*ޯųOEZôH3 jżYiűM򱏯ns3ǂl`He U}E׎,!c1cӤ`AQ]`0K˒lXqS>|::a$rH^7L|ӣy%FJY,P"vU+nMg`XV_9fIRY8{>^n#V u]*,tV-F8W 0Pܽxʌ}F<.#+A"+Y470gYϸHT{q޸ʧH_)8xW65[X9SLIaWMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMAMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMAMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMAgYRFRMTz爖YSQA9%պ27fL#_ l[y5m(cRW;>S-9ȣu &zה+)+&̙dfH;ٌ?p%ak:Fh #,yɫ)hƖBG'SFt4JQ@l$#7gmpJmeDowRSƊ\D8`-)l[j?=H~PfI^?!{]PnCHJم_iCoT M2FmG|Yq`iFq#P8()s*ӡ#P#g/)_o[Y{4VDQU^_+#4[2}:9z^)3%9rC=0apԵT!Xgy HgJseI饵V7i`CVc.T"m @» T⎡%1iP`*|2R[M=F^󦅕*J +:B w&1qu%xH \۞0Ba65|X=a/s@[-1_DkLUFDAjiREXSewlhpX9hl>kE6D:5cE QNk'(GE![5\ͱ,U?oxG.,i'kYLftROPQAd>N>[+Jo6c U}YƔXɬڋ-S~u=~JhtjIRzB=:2E!Ura j NH<ě=H_yD[S^S zxQX/L9FS~*!!SZ`\CNts/k>\~L pi:>qD(U54%t,?[w:[:2W y!ȟ!)T3E*AG|2mbui7p_FG%<l>DX3'!GPqbM a$09:҈%*#Z&RQhPjyr5 rV -BwaG=Kk1bBS u/0YY 0eF1~8n{@pHKwq[bᬑ$"ɖ^~MTËLQXDxP?LL%}=jce'X6ш|I|ٷ A_=z׆ZY{6umY1 Npi թHNJn0EܬƟP(ne19Rdlx=CY N{pddKH ۖ>/WlP&XXMWO3!Ŝ1,;%1J$և`G&i͒JVj_@r# Mn+EKnYD)Fn[0u,zA)=$ 1᥃X">&D_菶ߩ,wm6 ̮8Avp#MnX*e Ɩ9Ĺ{xX01B9QvoOG ~CQT2]#9Ai(: "r&,m2i Ipa"#D>;s&#I\lDPEEm,nLR@j!& mE>eN-y?TYi_9}t6"F=@(@=8-2Zvg&['Nǹ " c|c$h5|pnL i_0i2[֛ZQJUTweU, A8d)M<#Yo/"Y w6. ݣz``-dNy&As]DFAԩT k3cvCUHH zvv@]90C&$7jyf??vgBGAÙg'N-mqN:t`KEkC7}eΉr6}PL2zӆq&͛mI4/zMjmE091gE 7Ý%a{a\Id@SS =^3{g@НVY>!y@oߏ=`NJnh(~ N7-fG)m"0zi!G٦X/atr:[!1\by1K+>8y_xzXd>[Κ?e k85$=- e/~f׭}@H20qs[Y;w-f:v;a"&}P8mVmꡊRq?mGвd9X3& L,bRѶqJяT^̭ai0&VkqۗjBx Eҏ;GmV؂%h Ρ+3os pYy盫G ~HR;o>j&mXO2^ͦ0EOq5P`;D 󲃐'B>a0.8/[B LÒ#{l0>μܓ1f z֭-dG&"y 0 @.X'<΋Bΐ9m}oUM=P̐gf>:háu#]@cKVHoLZa2GM=(ڴ{EM,pBowͼ%!!Q|݅ ﹶ\ܕL\A&D.مPeI _sXUKeq7xRM]aO%zsx Ow~@Zص!d|$b%cvjq5D[+&\D ;FESiu_<,Z_\HlNGV^L Kiʹmo9RPr|]\nBl^8 :szYV'ɽ!tƉv Dh KNL/B*LkVpֱ67)\\VN=M:z2 ,P Wb D'Dlrp(Բ4Sq-`x~f @:ǽ1ɛ9{r m1rx)mX$ƞ.3uwkm viRg*G17EdbJR>}35TU@*|-#@KVn,^%c[H.k1XoInhc_j{?9~}i_P\ QF٘฀u"fF搼H^7UhCr",1ɕ$gN8L`./b=ӵvq{MO@ !s4"\zу݃%dG?>sm@28zXf.=줌J9lVB ʸꁐ)J3=CqC*$/[ʜ Gz/ 6Yr*j֯x( / HVQvIĄq4ƫbfW}'lQ7#zC<6rj 7R?0v4R n6Uv˂C'g!3|^7Άyabo &q]:hb`?vk().l(l */S\#~\rA>OjL S½]ЁtfG8+{";7K|SbrfNzRZSW|Fxi~ E0~#SmbbXfq&XS"`^7{qVqZ7wyT#hV.AAK9rTcet^_ZC]'r S[$AG DķF/,;LJ 8S|θ؄W K*vOA3:[^%DF53SB37^ &Pݱ h3qՋ/Ƅ'V&X -BF-CLì^78|V=-jC ^$b//-`BW%1~rPh=5R$}2*xiD[ǃ(@-~(+ qac#,G1hL JĀ*c?U"d{C#4 ErhTQRANa/.HP XF<'Ma87oW; {X~&>s9 v#ÒRL`63}pnE9u a㬖:C7z0z$.SK5:w Y^HG+Ǒ/]2ГgV-jzQ.CPs;ВzZ-l)ի $i;`yZu؄pQ^{F`Օvf8gxWAW: gˌ,dHvT2Qc6Tp6y=|AADDҨck\A߾T%b?^^(h]GBfBtU`?km[|y #%qƸ*0oe&׏0d*QF4w͚JOstiIͮXzՌ&i h~Sa)DZ\īiA!7K+? (bnP%gFHkp|̠1lb$חPyu]LQj/ &ͩ`c9!Z:ز?Wi` }Ԗ`.TG+ÓyC999 ӋVOvS냼Yya2'J ʪli z\'"9h6[}JQ/safecopy-1.7/test/test10/test3.badblocks0000644000175100001440000000002711202053543017226 0ustar ravenusers1 2 3 4 5 8 9 10 11 12 safecopy-1.7/test/test10/test.sh0000755000175100001440000001256211726747606015670 0ustar ravenusers#!/bin/sh test_name="safecopy, incremental recovery with blocksize variation and exclude blocks" source "../libtestsuite.sh" function test_current() { testsuite_debug "copying reference files for safecopy" cp "test2.dat" "$testsuite_tmpdir/test3.dat" >/dev/null 2>&1 cp "test2.dat" "$testsuite_tmpdir/test4.dat" >/dev/null 2>&1 cp "test2.dat" "$testsuite_tmpdir/test5.dat" >/dev/null 2>&1 cp "test2.dat" "$testsuite_tmpdir/test6.dat" >/dev/null 2>&1 testsuite_assert_files_identical "test2.dat" "$testsuite_tmpdir/test3.dat" testsuite_assert_files_identical "test2.dat" "$testsuite_tmpdir/test4.dat" testsuite_assert_files_identical "test2.dat" "$testsuite_tmpdir/test5.dat" testsuite_assert_files_identical "test2.dat" "$testsuite_tmpdir/test6.dat" testsuite_debug "Test, first run with big skipsize and resolution to produce output with holes" testsuite_debug " Must not touch exclude blocks." LD_PRELOAD="$preload" $safecopy -R 2 -b 1150 -f 4* -r 4* -x 490 -X xblocks -o "$testsuite_tmpdir/test1.badblocks" debug "$testsuite_tmpdir/test1.dat" >"$testsuite_tmpdir/test1.out" 2>&1 if [ $? != 1 ]; then testsuite_error "Run of safecopy returned wrong exit code. Output:" testsuite_debug_file "$testsuite_tmpdir/test1.out" fi testsuite_assert_files_identical "test1.dat" "$testsuite_tmpdir/test1.dat" testsuite_assert_files_identical "test1.badblocks" "$testsuite_tmpdir/test1.badblocks" testsuite_debug "Test, first run with big skipsize and resolution to produce output with holes + marking" testsuite_debug " Must not touch exclude blocks." LD_PRELOAD="$preload" $safecopy -M "MARKBAAD" -R 2 -b 1150 -f 4* -r 4* -x 490 -X xblocks -o "$testsuite_tmpdir/test2.badblocks" debug "$testsuite_tmpdir/test2.dat" >"$testsuite_tmpdir/test2.out" 2>&1 if [ $? != 1 ]; then testsuite_error "Run of safecopy returned wrong exit code. Output:" testsuite_debug_file "$testsuite_tmpdir/test2.out" fi testsuite_assert_files_identical "test2.dat" "$testsuite_tmpdir/test2.dat" testsuite_assert_files_identical "test1.badblocks" "$testsuite_tmpdir/test2.badblocks" testsuite_debug "Test, incremental, big skipsize, small resolution." testsuite_debug " Must transpose badblocks to correct new sectorsize." testsuite_debug " Must recover data at the end of bad areas but not overwrite already recovered data." testsuite_debug " Must not touch exclude blocks." LD_PRELOAD="$preload" $safecopy -R 2 -b 1024 -f 8* -i 1150 -I "$testsuite_tmpdir/test1.badblocks" -x 490 -X xblocks -o "$testsuite_tmpdir/test3.badblocks" debug "$testsuite_tmpdir/test3.dat" >"$testsuite_tmpdir/test3.out" 2>&1 if [ $? != 1 ]; then testsuite_error "Run of safecopy returned wrong exit code. Output:" testsuite_debug_file "$testsuite_tmpdir/test3.out" fi testsuite_assert_files_identical "test3.dat" "$testsuite_tmpdir/test3.dat" testsuite_assert_files_identical "test3.badblocks" "$testsuite_tmpdir/test3.badblocks" testsuite_debug "Test, incremental, small skipsize and atomic resolution." testsuite_debug " Must recover all recoverable data" testsuite_debug " Must not touch exclude blocks." LD_PRELOAD="$preload" $safecopy -R 2 -b 1024 -f 1* -r 1 -i 1150 -I "$testsuite_tmpdir/test1.badblocks" -x 490 -X xblocks -o "$testsuite_tmpdir/test4.badblocks" debug "$testsuite_tmpdir/test4.dat" >"$testsuite_tmpdir/test4.out" 2>&1 if [ $? != 1 ]; then testsuite_error "Run of safecopy returned wrong exit code. Output:" testsuite_debug_file "$testsuite_tmpdir/test4.out" fi testsuite_assert_files_identical "test4.dat" "$testsuite_tmpdir/test4.dat" testsuite_assert_files_identical "test4.badblocks" "$testsuite_tmpdir/test4.badblocks" testsuite_debug "Test, incremental, big skipsize, small resolution this time with marking." testsuite_debug " Must recover data at the end of bad areas." testsuite_debug " this one may overwrite successfully rescued data as long" testsuite_debug " as it affects only blocks marked as bad in the include file" testsuite_debug " Must not touch exclude blocks." LD_PRELOAD="$preload" $safecopy -M "MARKBAAD" -R 2 -b 1024 -f 8* -i 1150 -I "$testsuite_tmpdir/test1.badblocks" -x 490 -X xblocks -o "$testsuite_tmpdir/test5.badblocks" debug "$testsuite_tmpdir/test5.dat" >"$testsuite_tmpdir/test5.out" 2>&1 if [ $? != 1 ]; then testsuite_error "Run of safecopy returned wrong exit code. Output:" testsuite_debug_file "$testsuite_tmpdir/test5.out" fi testsuite_assert_files_identical "test5.dat" "$testsuite_tmpdir/test5.dat" testsuite_assert_files_identical "test3.badblocks" "$testsuite_tmpdir/test5.badblocks" testsuite_debug "Test, incremental, small skipsize and atomic resolution, with marking." testsuite_debug " Must only differ from test4.dat by shifts of marker strings, no real data differences" testsuite_debug " Must not touch exclude blocks." LD_PRELOAD="$preload" $safecopy -M "MARKBAAD" -R 2 -b 1024 -f 1* -r 1 -i 1150 -I "$testsuite_tmpdir/test1.badblocks" -x 490 -X xblocks -o "$testsuite_tmpdir/test6.badblocks" debug "$testsuite_tmpdir/test6.dat" >"$testsuite_tmpdir/test6.out" 2>&1 if [ $? != 1 ]; then testsuite_error "Run of safecopy returned wrong exit code. Output:" testsuite_debug_file "$testsuite_tmpdir/test6.out" fi testsuite_assert_files_identical "test6.dat" "$testsuite_tmpdir/test6.dat" testsuite_assert_files_identical "test4.badblocks" "$testsuite_tmpdir/test6.badblocks" } testsuite_runtest safecopy-1.7/test/test10/xblocks0000644000175100001440000000002511202053543015704 0ustar ravenusers12 13 14 15 16 17 26 safecopy-1.7/test/test10/test5.dat0000644000175100001440000004704011202053543016062 0ustar ravenusersiB֤/gW*WаQ2 UŶi jRT z.Bl#V'^mݙVͨ،Q!zUIznΛhdֵVtwPĹSp袆 ;k}w*E.Y* !FSΏ[¬9IFe0 oBv:C;}uLBNFQnfϑtdw_~E1N6/c5 >%"Y+mxU\K%WNa,ںgdT]`2xar2NPf *ȍLl>E\kX;/b П~aqi)!9ݬiI0 DQ =f4m3^`Z((]b17y[) `[pC5q GքIO}+DR!I;& SSLXW9-FnEEÊAOn>sE>E,jFe"x;#q/Bi(WwzEt54QR_%̳\J~ >RDDN'q[qptjE1 Kָ9a2Ѳ( yZ;{ݕBKu.|u6k3:]t#S8eb$ƦaѽS5IpGTo)ҽ9]XF,IX`48uj$ OQIZ=M MdSVsLi$v9Z`D +gal/)<8S]4ޯ  =j8hMcAq_rq5N2U/KIH%5}|I,F"v!*2U-;?9 U^zmŏYceװ6ۯ KP'f\D :]^G_y dr"~ n:Ϛa_p˩\I5HkspwZQ?MY)?_=P2ed!gaEqbdj!$i~%;"9Z5"+#Ω:gԷ|::a$rH^7L|ӣy%FJY,P"vU+nMg`XV_MARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMAgYRFRMTz爖YSQA9%պ27fL#_ l[y5m(cRW;>S-9ȣu &zה+)+&̙dfH;ٌ?p%ak:Fh #,yɫ)hƖBG'SFt4JQ@l$#7gmpJmeDowRSƊ\D8`-)l[j?=H~PfI^?!{]PnCHJم_iCoT M2FmG|Yq`iFq#P8()s*ӡ#P#g/)_o[Y{4VDQU^_+#4[2}:9z^)3%9rC=0apԵT!Xgy HgJseI饵V7i`CVc.T"m @» T⎡%1iP`*|2R[M=F^󦅕*J +:B w&1qu%xH \۞0Ba65|X=a/s@[-1_DkLUFDAjiREXSewlhpX9hl>kE6D:5cE QNk'(GE![5\ͱ,U?oxG.,i'kYLftROPQAd>N>[+Jo6c U}YƔXɬڋ-S~u=~JhtjIRzB=:2E!Ura j NH<ě=H_yD[S^S zxQX/L9FS~*!!SZ`\CNts/k>\~L pi:>qD(U54%t,?[w:[:2W y!ȟ!)T3E*AG|2mbui7p_FG%<l>DX3'!GPqbM a$09:҈%*#Z&RQhPjyr5 rV -BwaG=Kk1bBS u/0YY 0eF1~8n{@pHKwq[bᬑ$"ɖ^~MTËLQXDxP?LL%}=jce'X6ш|I|ٷ A_=z׆ZY{6umY1 Npi թHNJn0EܬƟP(ne19Rdlx=CY N{pddKH ۖ>/WlP&XXMWO3!Ŝ1,;%1J$և`G&i͒JVj_@r# Mn+EKnYD)Fn[0u,zA)=$ 1᥃X">&D_菶ߩ,wm6 ̮8Avp#MnX*e Ɩ9Ĺ{xX01B9QvoOG ~CQT2]#9Ai(: "r&,m2i Ipa"#D>;s&#I\lDPEEm,nLR@j!& mE>eN-y?TYi_9}t6"F=@(@=8-2Zvg&['Nǹ " c|c$h5|pnL i_0i2[֛ZQJUTweU, A8d)M<#Yo/"Y w6. ݣz``-dNy&As]DFAԩT k3cvCUHH zvv@]90C&$7jyf??vgBGAÙg'N-mqN:t`KEkC7}eΉr6}PL2zӆq&͛mI4/zMjmE091gE 7Ý%a{a\Id@SS =^3{g@НVY>!y@oߏ=`NJnh(~ N7-fG)m"0zi!G٦X/atr:[!1\by1K+>8y_xzXd>[Κ?e k85$=- e/~f׭}@H20qs[Y;w-f:v;a"&}P8mVmꡊRq?mGвd9X3& L,bRѶqJяT^̭ai0&VkqۗjBx Eҏ;GmV؂%h Ρ+3os pYy盫G ~HR;o>j&mXO2^ͦ0EOq5P`;D 󲃐'B>a0.8/[B LÒ#{l0>μܓ1f z֭-dG&"y 0 @.X'<΋Bΐ9m}oUM=P̐gf>:háu#]@cKVHoLZa2GM=(ڴ{EM,pBowͼ%!!Q|݅ ﹶ\ܕL\A&D.مPeI _sXUKeq7xRM]aO%zsx Ow~@Zص!d|$b%cvjq5D[+&\D ;FESiu_<,Z_\HlNGV^L Kiʹmo9RPr|]\nBl^8 :szYV'ɽ!tƉv Dh KNL/B*LkVpֱ67)\\VN=M:z2 ,P Wb D'Dlrp(Բ4Sq-`x~f @:ǽ1ɛ9{r m1rx)mX$ƞ.3uwkm viRg*G17EdbJR>}35TU@*|-#@KVn,^%c[H.k1XoInhc_j{?9~}i_P\ QF٘฀u"fF搼H^7UhCr",1ɕ$gN8L`./b=ӵvq{MO@ !s4"\zу݃%dG?>sm@28zXf.=줌J9lVB ʸꁐ)J3=CqC*$/[ʜ Gz/ 6Yr*j֯x( / HVQvIĄq4ƫbfW}'lQ7#zC<6rj 7R?0v4R n6Uv˂C'g!3|^7Άyabo &q]:hb`?vk().l(l */S\#~\rA>OjL S½]ЁtfG8+{";7K|SbrfNzRZSW|Fxi~ E0~#SmbbXfq&XS"`^7{qVqZ7wyT#hV.AAK9rTcet^_ZC]'r S[$AG DķF/,;LJ 8S|θ؄W K*vOA3:[^%DF53SB37^ &Pݱ h3qՋ/Ƅ'V&X -BF-CLì^78|V=-jC ^$b//-`BW%1~rPh=5R$}2*xiD[ǃ(@-~(+ qac#,G1hL JĀ*c?U"d{C#4 ErhTQRANa/.HP XF<'Ma87oW; {X~&>s9 v#ÒRL`63}pnE9u a㬖:C7z0z$.SK5:w Y^HG+Ǒ/]2ГgV-jzQ.CPs;ВzZ-l)ի $i;`yZu؄pQ^{F`Օvf8gxWAW: gˌ,dHvT2Qc6Tp6y=|AADDҨck\A߾T%b?^^(h]GBfBtU`?km[|y #%qƸ*0oe&׏0d*QF4w͚JOstiIͮXzՌ&i h~Sa)DZ\īiA!7K+? (bnP%gFHkp|̠1lb$חPyu]LQj/ &ͩ`c9!Z:ز?Wi` }Ԗ`.TG+ÓyC999 ӋVOvS냼Yya2'J ʪli z\'"9h6[}JQ/safecopy-1.7/test/test10/test4.dat0000644000175100001440000004704011202053543016061 0ustar ravenusersiB֤/gW*WаQ2 UŶi jRT z.Bl#V'^mݙVͨ،Q!zUIznΛhdֵVtwPĹSp袆 ;k}w*E.Y* !FSΏ[¬9IFe0 oBv:C;}uLBNFQnfϑtdw_~E1N6/c5 >%"Y+mxU\K%WNa,ںgdT]`2xar2NPf *ȍLl>E\kX;/b П~aqi)!9ݬiI0 DQ =f4m3^`Z((]b17y[) `[pC5q GքIO}+DR!I;& SSLXW9-FnEEÊAOn>sE>E,jFe"x;#q/Bi(WwzEt54QR_%̳\J~ >RDDN'q[qptjE1 Kָ9a2Ѳ( yZ;{ݕBKu.|u6k3:]t#S8eb$ƦaѽS5IpGTo)ҽ9]XF,IX`48uj$ OQIZ=M MdSVsLi$v9Z`D +gal/)<8S]4ޯ  =j8hMcAq_rq5N2U/KIH%5}|I,F"v!*2U-;?9 U^zmŏYceװ6ۯ KP'f\D :]^G_y dr"~ n:Ϛa_p˩\I5HkspwZQ?MY)?_=P2ed!gaEqbdj!$i~%;"9Z5"+#Ω:gԷ˰IyVBĆ o6m>1O̳:B=vԦ/v!k5euU-ڌ'sKˇPsƨvl: 1]έA#z4:L-hP3IR 266vs܌3xw3Nta2Bɓmkڬu2Q>r536h80ͯpW yeJVmq M꺠U)$eBtpp`wYڣ3sJ$\* HAA!Ll z|?pz9@ -#Qb! sBv )A1 2up<ӨJl pS"N3%RX5LGY*< 3u"o*Xfod666>Rd^ˡp UF~+`7o8] u|Ri/V$az =h˻~4}:e&I8Mf\ˋ'd=}BkrDg^2JD 5EEjTWN-jcq^%%vvrO7e! )hئ?CCYr1&ZP*hq!Sψa.)w~=Q숽@MzgYAkZK/Dݱ9nnǗcwua;d^e9 ]zkydC+\UofHtQ{fʓPY2$DoB(]'hmW0K5E$0řJ}íSg; ,7XdVw ~rNZҊ|yd Kә*ޯųOEZôH3 jżYiűM򱏯ns3ǂl`He U}E׎,!c1cӤ`AQ]`0K˒lXqS>|::a$rH^7L|ӣy%FJY,P"vU+nMg`XV_9fIRY8{>^n#V u]*,tV-F8W 0Pܽxʌ}F<.#+A"+Y470gYϸHT{q޸ʧH_)8xW65[X9SLIaWMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMAgYRFRMTz爖YSQA9%պ27fL#_ l[y5m(cRW;>S-9ȣu &zה+)+&̙dfH;ٌ?p%ak:Fh #,yɫ)hƖBG'SFt4JQ@l$#7gmpJmeDowRSƊ\D8`-)l[j?=H~PfI^?!{]PnCHJم_iCoT M2FmG|Yq`iFq#P8()s*ӡ#P#g/)_o[Y{4VDQU^_+#4[2}:9z^)3%9rC=0apԵT!Xgy HgJseI饵V7i`CVc.T"m @» T⎡%1iP`*|2R[M=F^󦅕*J +:B w&1qu%xH \۞0Ba65|X=a/s@[-1_DkLUFDAjiREXSewlhpX9hl>kE6D:5cE QNk'(GE![5\ͱ,U?oxG.,i'kYLftROPQAd>N>[+Jo6c U}YƔXɬڋ-S~u=~JhtjIRzB=:2E!Ura j NH<ě=H_yD[S^S zxQX/L9FS~*!!SZ`\CNts/k>\~L pi:>qD(U54%t,?[w:[:2W y!ȟ!)T3E*AG|2mbui7p_FG%<l>DX3'!GPqbM a$09:҈%*#Z&RQhPjyr5 rV -BwaG=Kk1bBS u/0YY 0eF1~8n{@pHKwq[bᬑ$"ɖ^~MTËLQXDxP?LL%}=jce'X6ш|I|ٷ A_=z׆ZY{6umY1 Npi թHNJn0EܬƟP(ne19Rdlx=CY N{pddKH ۖ>/WlP&XXMWO3!Ŝ1,;%1J$և`G&i͒JVj_@r# Mn+EKnYD)Fn[0u,zA)=$ 1᥃X">&D_菶ߩ,wm6 ̮8Avp#MnX*e Ɩ9Ĺ{xX01B9QvoOG ~CQT2]#9Ai(: "r&,m2i Ipa"#D>;s&#I\lDPEEm,nLR@j!& mE>eN-y?TYi_9}t6"F=@(@=8-2Zvg&['Nǹ " c|c$h5|pnL i_0i2[֛ZQJUTweU, A8d)M<#Yo/"Y w6. ݣz``-dNy&As]DFAԩT k3cvCUHH zvv@]90C&$7jyf??vgBGAÙg'N-mqN:t`KEkC7}eΉr6}PL2zӆq&͛mI4/zMjmE091gE 7Ý%a{a\Id@SS =^3{g@НVY>!y@oߏ=`NJnh(~ N7-fG)m"0zi!G٦X/atr:[!1\by1K+>8y_xzXd>[Κ?e k85$=- e/~f׭}@H20qs[Y;w-f:v;a"&}P8mVmꡊRq?mGвd9X3& L,bRѶqJяT^̭ai0&VkqۗjBx Eҏ;GmV؂%h Ρ+3os pYy盫G ~HR;o>j&mXO2^ͦ0EOq5P`;D 󲃐'B>a0.8/[B LÒ#{l0>μܓ1f z֭-dG&"y 0 @.X'<΋Bΐ9m}oUM=P̐gf>:háu#]@cKVHoLZa2GM=(ڴ{EM,pBowͼ%!!Q|݅ ﹶ\ܕL\A&D.مPeI _sXUKeq7xRM]aO%zsx Ow~@Zص!d|$b%cvjq5D[+&\D ;FESiu_<,Z_\HlNGV^L Kiʹmo9RPr|]\nBl^8 :szYV'ɽ!tƉv Dh KNL/B*LkVpֱ67)\\VN=M:z2 ,P Wb D'Dlrp(Բ4Sq-`x~f @:ǽ1ɛ9{r m1rx)mX$ƞ.3uwkm viRg*G17EdbJR>}35TU@*|-#@KVn,^%c[H.k1XoInhc_j{?9~}i_P\ QF٘฀u"fF搼H^7UhCr",1ɕ$gN8L`./b=ӵvq{MO@ !s4"\zу݃%dG?>sm@28zXf.=줌J9lVB ʸꁐ)J3=CqC*$/[ʜ Gz/ 6Yr*j֯x( / HVQvIĄq4ƫbfW}'lQ7#zC<6rj 7R?0v4R n6Uv˂C'g!3|^7Άyabo &q]:hb`?vk().l(l */S\#~\rA>OjL S½]ЁtfG8+{";7K|SbrfNzRZSW|Fxi~ E0~#SmbbXfq&XS"`^7{qVqZ7wyT#hV.AAK9rTcet^_ZC]'r S[$AG DķF/,;LJ 8S|θ؄W K*vOA3:[^%DF53SB37^ &Pݱ h3qՋ/Ƅ'V&X -BF-CLì^78|V=-jC ^$b//-`BW%1~rPh=5R$}2*xiD[ǃ(@-~(+ qac#,G1hL JĀ*c?U"d{C#4 ErhTQRANa/.HP XF<'Ma87oW; {X~&>s9 v#ÒRL`63}pnE9u a㬖:C7z0z$.SK5:w Y^HG+Ǒ/]2ГgV-jzQ.CPs;ВzZ-l)ի $i;`yZu؄pQ^{F`Օvf8gxWAW: gˌ,dHvT2Qc6Tp6y=|AADDҨck\A߾T%b?^^(h]GBfBtU`?km[|y #%qƸ*0oe&׏0d*QF4w͚JOstiIͮXzՌ&i h~Sa)DZ\īiA!7K+? (bnP%gFHkp|̠1lb$חPyu]LQj/ &ͩ`c9!Z:ز?Wi` }Ԗ`.TG+ÓyC999 ӋVOvS냼Yya2'J ʪli z\'"9h6[}JQ/safecopy-1.7/test/libtestsuite.sh0000644000175100001440000001150211210452244016252 0ustar ravenusers#!/bin/false # library include file with global variables and for safecopy test suite # safecopy and everything with it is copyright 2009 CorvusCorax # distributed under the terms and conditions of GPL v2 or higher if [ -z "$testsuite_defined" ]; then testsuite_defined=1 if [ -z "$testsuite_quiet" ]; then if echo "$@" |grep -q -- "quiet"; then testsuite_quiet=1 else testsuite_quiet=0 fi fi #rundir if [ -z "$testsuite_rundir" ]; then testsuite_rundir=$( pwd ) fi #basedir and testdir if [ -z "$testsuite_basedir" -o -z "$testsuite_testdir" ]; then if [ -e "./libtestsuite.sh" ]; then testsuite_testdir=$( pwd ) cd .. testsuite_basedir=$( pwd ) elif [ -e "../libtestsuite.sh" ]; then cd .. testsuite_testdir=$( pwd ) cd .. testsuite_basedir=$( pwd ) elif [ -e "test/libtestsuite.sh" ]; then testsuite_basedir=$( pwd ) cd "test" testsuite_testdir=$( pwd ) else echo "Error. Could not determine base directory." echo "Please run $0 from its own directory." exit 1 fi cd "$testsuite_rundir" fi #tmpdir if [ -z "$testsuite_tmpdir" ]; then testsuite_tmpdir="$testsuite_testdir/tmpdir" fi if [ -e "$testsuite_tmpdir" ]; then echo "Error. Temporary directory $testsuite_tmpdir already exists." echo "Please move it out of the way before running $0" echo "since we hesitate overwriting existing data." exit 1 fi #find tests if [ -z "$testsuite_tests" ]; then cd "$tesstsuite_testdir" testsuite_tests=$( find . -wholename "*test*/test.sh" |grep -oE "test[0-9]+" | grep -oE "[0-9]+" | sort -n ) fi #number of errors occured if [ -z "$testsuite_errors" ]; then testsuite_errors=0 fi #other global vars #testsuite_errormessage #testsuite_errorflag #functions function testsuite_setup() { # sets up the tmpdir if [ -e "$testsuite_tmpdir" ]; then testsuite_cleanup fi mkdir "$testsuite_tmpdir" if ! [ -d "$testsuite_tmpdir" ]; then echo "Error. Could not create tmp directory" echo "$testsuite_tmpdir" exit 1 fi testsuite_errorflag=0 } function testsuite_cleanup() { # cleans up tmpdir after testsuite is done if [ -d "$testsuite_tmpdir" ]; then rm -rf "$testsuite_tmpdir" fi if [ -d "$testsuite_tmpdir" ]; then echo "Error. Could not remove tmp directory" exit 1 fi } function testsuite_error() { testsuite_errormessage="$testsuite_errormessage Error: $@\\n" testsuite_debugmessage="$testsuite_debugmessage Error: $@\\n" testsuite_errorflag=1 return 1 } function testsuite_info() { echo "$1" |sed -e 's/\\n/\n' } function testsuite_debug() { testsuite_debugmessage="$testsuite_debugmessage $@\\n" } function testsuite_debug_file() { file0="$1" testsuite_debugmessage="$testsuite_debugmessage -- ..." testsuite_debug $( tail -n 20 $file0 | sed -e 's/^/\\n -- /g' ) } function testsuite_assert_file_exists() { file0="$1" if ! [ -e "$file0" ]; then testsuite_error "file $file0 does not exist" return 1 fi return 0 } function testsuite_assert_files_identical() { file1="$1" file2="$2" if ! testsuite_assert_file_exists "$file1"; then return 1 fi if ! testsuite_assert_file_exists "$file2"; then return 1 fi if ! diff --brief "$file1" "$file2" >/dev/null 2>&1; then testsuite_error "file $file1 and $file2 do not match" return 1 fi return 0 } function testsuite_assert_filesize() { file1="$1" filesize="$2" if ! testsuite_assert_file_exists "$file1"; then return 1 fi size=$( du -b "$file1" | cut -f 1 ) if ! [ "$size" -eq "$filesize" ]; then testsuite_error "file $file1 has size $size, should be $filesize" return 1 fi return 0 } function testsuite_runtest() { if [ ! -e ../libtestsuite.sh ]; then echo "Error. Could not find myself." echo "Please run test from its own directory." exit 1 fi testsuite_setup testsuite_debugmessage="" echo -n "Testing $test_name: " test_current echo "$testsuite_debugmessage" | sed -e 's/\\n/\n/g' >"$testsuite_tmpdir/errormessage.txt" if [ "$testsuite_errorflag" -eq 1 ]; then testsuite_errors=$(( testsuite_errors+1 )) echo "FAILED" if [ "$testsuite_quiet" -eq "0" ]; then echo "Details:" echo "$testsuite_debugmessage" | sed -e 's/\\n/\n/g' else echo "Details ommitted, check errormessage.txt" fi return 1 else testsuite_cleanup echo "OK" return 0 fi } function testsuite_runall() { num=0 for current in $testsuite_tests; do cd "$testsuite_testdir/test$current" echo "Running test $current:" source "test.sh" if [ "$testsuite_errorflag" -eq 1 ]; then testsuite_quiet=1; echo "storing temporary files of failed test$current in" echo "$testsuite_testdir/tmp_failed_test$current" mv "$testsuite_tmpdir" "$testsuite_testdir/tmp_failed_test$current" fi echo cd "$testsuite_rundir" num=$(( num+1 )) done if [ "$testsuite_errors" -gt "0" ]; then echo "$testsuite_errors of $num tests FAILED" return 1 else echo "Overall: OK" return 0 fi } source "$testsuite_testdir/config_in.sh" fi safecopy-1.7/test/test1/0000755000175100001440000000000011726756524014263 5ustar ravenuserssafecopy-1.7/test/test1/test.dat0000644000175100001440000002400011202053543015704 0ustar ravenusersŁcA< B줡YW#G`=m|^@1q3|Mf Si+HبV!BXw =vEgSf6$FW/~$5ìaN{:3{nսQ` #$׍(v_n""P#4ܕ{ Gc/DjLVŞ#LeA׭gV͊\?JE\;SAMcJZ RA%ߗdi =(@L9dj\l(3ZDQOkK3އjZ 3@An(GCZ9X'k*.zɘں㆕6Ƨ0\؅D5G#eTOPf'xoW6o` 4RGLv Eh$s7[dheuUm2RNU6\2As.akc ƬS9ڵX[ŮN1l9R%LwKbHD;c86=C([KZfd xg;LKWz'MwyGᱚE\}oi Gc+`v9eɹikʠn)p8X(bI)Ѐloטк?Rl\rdhUWCV1uȂV?3U`a :c[*^j +K, ѶrcqcJ<=AczgzNL }__nQ3dF0#u?$S/-\a7RDN!zZ% ۾Ppu[ >!Z%+p$t=rW~ǃgAبyf;`oPUiIZ*΅M&VY/ps{ex[^+[y1d|CACk:ȬՉS夐\04愞^ReɎMѼb\]>\F1[+RBMI¾-}54HufɱYRlF]cxYKaDSmcr4y[~^Էig:1\1 ZX.x%_h*g;tX$'#ne;+z )8hڠd&,W":*rs0ɴ[ v7>clO6N<$?$"ŒVwvL]7lBd6#Q^T4O@Թυǃa*1;1d?d+>` D׭yiI|+h aD{9(7h*[Z97R%xQI\^,W"<di=Bwbd x wVJ $Єȵ>޲3TJŷWp1F}K7 L{A꺫r(c,E<>so_#Ak7炊*=:P!?Jk)og y(<<|`,/&zQt6lv40զcfU[ua(.8$RG>)8]xY0hNyD82dzv ӟ hn^%ڽsx8_(og?K>x8Fr=BU:v'>,,xfk/jZ͋NkYkTʂM,VK%vkA!5NR'c-<6Yf^Q4 p `' g}1ˏdx74qӧ9:iɰW=`)Cgw[:߀,{A &&D_Z_y,fk55$W ;+F:~8Hph7b E=QOw4)^|كvD'\˸!İ|gn|Hw+) ([t-G5'W)ëVd$jjvA$o֩jI"=u: Y'Άĩ&'J۵mdi.O=PlW)So\s9Vj{c쩄NKBS@*x4+h;z-]~Y+o$_ZX.h"]7;2M`a%ҪX69b^ q79r8("@InZ20ƣvi* 𔛖vr`pbb=gO~T}ނãIoI 'h ϧq ]: OB(;0F~Քff_9 un=J0f"99KMpޜ)dPftph 4Ek}J+e~ܐSQrZEN5FQeKZ;:n߯"F.MXP2]w5U#Wʼn $5Cakz$bkgzc0@)ߊBlqz>7%5N=`D[,|@6B1;vYW2ii8mk%-7E.(&hz*Ç+G X)giۋR[s5bRl9Kx֛S@LkclVU2Slj\+$߸E+԰k )&H lڷ@8Lfm"0TGz{NlWy*y:H֎)'Pa͸57D`3F$JP,#o+29$8KB<)Vў ,Ө, b'Qb l4|-xV {q󀻯M)^{_{ՑZ$tvq=M(&~#F(EGZJd-ӌE5Ī5ⶱ/$Ċq/<F#t5R B/k~!G`'[%N _@lyЂsuJ 9g]̲Zhu ܻ2}y~%rO}vKbQmyH8nW1^k!\@;P҈4ō8}d1ѽlcL{ݯ[PqQ:M;Y)֍˗z!rCymBKYu-8ًE1k"5FdvG`>8fi;2MJi${[cFifC\[)QaĢ#n1.o#rP#=p%Z"YnZ*РHF*qU 3W%8>Ȗޫ0_VPE2BIF0u0JUcY]i{:@1E$4%,*I D`%@M!+19(Ӓ65dq1 (DZ,(pw4ULU!r`FOC<gRI$hz\-^qh*nSo;/;rq'= C Cq_@-9VsNL/2劵u0XuEv@Bm}n`0]0wS SQ\=00lx['|849m` Ț]ܯ_rzfNy JhmWyzc.6KWN' sPi0~ʖɍsx% ת8 QQf:\F;!lrļ~%D#b:ЯXC^VRQfkE0Ų+^2k4^昚߆ ٧Aǡ~AR1\_~So&[DVQZ'RJ)aChx;i3G +bTוtaM^6Lye(}405yWu:UUN, Q:3ͼ -v 0El Ъ[EwExݍLPBfFUfn.*A^IMYӱldk_ V7 3 ѕo99{io#ǐwi(KJ1zǢlU(Qc+v`Rh%sL7F]t"yxY,1~>_c*V"ϑ`S^RM@iz+*by>&=b7Kneq`m+׺|;gԀ8_3MO'(E?yr[& x/cT 5{J3PΗj}2UB@p`B9H`'\P9}{\N!6F}Tb5)Rx XekRepdick^b; &U?:?Sٟ8n r? Zݛ%<7g`|3:~4G<`CD 9@YK%f^Q>Sd&ٙE ־s =় 8Gu5"v  FwZT,xN OCYly|4E4<8Muo ygE t:?-&HV/*ҧ*$jJX"pFmV Zj2ŽߧP]j\va]]U:q@AbʒBJU :ʙ/eHp_S(%9)C6%FBZ&qh8&/TQ{>E޼4Z(i"> >y/V0 /M HQezcp*op*OV6n)g)Q6Q=$c*Bƚ ?.&+XgEܚoYgL|߅l& I/ѡI'> ~:\@/w8V|79gv"IpWВ k!>֯z~>̜GVio|:'v< 0مd"~[ HrŒoj"Wn,8W+U~@Vۅazܠsvyf+Hz:kbů@< (*&p;`;/!=Y aE٩لZ O˹=,TٺX\q8>{K}3qq)W >:LYBT6+0jwƠ[>{'08`yYc~b#yu1ih<7tqWJYfeܐHQ"*V hfDIt"TR:#Q2ȠJf}1BOo'60m'2ubsO3: 4\e  檊ZqZ Uǐ15@`<[l^ЏwLWXvAm>3Xߐo˫NqH?l҅a\T.ګ5InNPU9A`-vgx}/Fhzt-^XBhfk#:#t4Ę3GivG-4ZWuϒ?ꌋ A͇9YcRB415^˒G~d@՗UH@b?GG۳qԔ>Hꆖ%=[3Y CK8r,Kg Z+"JgnLEfd,͒_r`xrm뱃l⳽Nk̗q8k(Ȟt!,6Y.yp?-g9T[++ GGV-~"J~Qt0%zHϷvY 6͇y(doޠ7(>|/qc5J"$jiV!bЈ5k$y!) wX7̀Y}&Z yVeO[fHWboN} XС|fvAk C\H^lO*P9cR*ىD6? 41()6 8\؉@A=#2(TTَFB 8Y3hT23H[e!w 7Z ~YNeP6秛cȾď<0_yzl7͇ L d}P!2 A7J<#w2oDjzH2 ^{۾sg#wƱhڛ.j~6&^]hwcTRwCnRZ1$=ŋԎ7@,D bh2fL#aYj_+a_9A+fB>(H Y  ?mlZxZ\l6/V$K0'# .ND2+GFj: õWXm@0`\qބrL &B1 s:JQC XR*Q,tƉYw5Rj!ż0ίab&S|-KdBP[5N۵- <_PK^bH29iPbpyQ y[֡ڃ[ a" =F 0#I-&m2uOP&8<U==gRw>9rאg4ZBԳhɗ/R8RĪzX'\.m,2?jO{LFC@/#ǵ?0el to]Idp˕1ReQuBuQ +ET 46- Oqѷe=Nf0[Tv<%֌*{h,CkZ \!ӪɉW*#R1yX-;6sBBR1BrzEN ~9C\8- 4HHT h~a>^qG32$tqw  SYb0C UK@h}晤<Ϥ6;#G`<X*k3EǀCpp[*U'gݒ1; 8ePΘMEQJHSRU8EHOW+ۄlODX\LY)jk1Q idT҂{9I`i!ÉcD,*!{#vr0%_a6L@s0`h`s3v] QU]?Ԗ9E{HZt\tMsofd4]<>zySrhZùp3&v_t Kh3/6Vt. Tiw_u/q 0v` -ł]FtacŦđ sxwu!>)Ҿ͉{?safecopy-1.7/test/test1/test.sh0000755000175100001440000000105111726747606015577 0ustar ravenusers#!/bin/sh test_name="safecopy, ability to simply copy a regular file" source "../libtestsuite.sh" function test_current() { testsuite_debug "Test if a copy of a file created with safecopy is identical to the source." $safecopy "test.dat" "$testsuite_tmpdir/test.dat" >"$testsuite_tmpdir/test.out" 2>&1 if [ $? != 0 ]; then testsuite_error "Run of safecopy returned wrong exit code. Output:" testsuite_debug_file "$testsuite_tmpdir/test.out" fi testsuite_assert_files_identical "test.dat" "$testsuite_tmpdir/test.dat" } testsuite_runtest safecopy-1.7/test/test6/0000755000175100001440000000000011726756524014270 5ustar ravenuserssafecopy-1.7/test/test6/simulator.cfg0000644000175100001440000000023111202053544016741 0ustar ravenusersblocksize=1024 filesize=20480 source=test.dat softfailcount=2 hardfail=2 hardfail=4 hardfail=5 hardfail=8 hardfail=9 hardfail=10 hardfail=11 hardfail=12 safecopy-1.7/test/test6/test1.dat0000644000175100001440000005000011202053544015772 0ustar ravenusersŁcA< B줡YW#G`=m|^@1q3|Mf Si+HبV!BXw =vEgSf6$FW/~$5ìaN{:3{nսQ` #$׍(v_n""P#4ܕ{ Gc/DjLVŞ#LeA׭gV͊\?JE\;SAMcJZ RA%ߗdi =(@L9dj\l(3ZDQOkK3އjZ 3@An(GCZ9X'k*.zɘں㆕6Ƨ0\؅D5G#eTOPf'xoW6o` 4RGLv Eh$s7[dheuUm2RNU6\2As.akc ƬS9ڵX[ŮN1l9R%LwKbHD;c86=C([KZfd xg;LKWz'MwyGᱚE\}oi Gc+`v9eɹikʠn)p8X(bI)Ѐloטк?Rl\rdhUWCV1uȂV?3U`a :c[*^j +K, ѶrcqcJ<=AczgzNL }__nQ3dF0#u?$S/-\a7RDN!zZ% ۾Ppu[ >!Z%+p$t=rW~ǃgAبyf;`oPUiIZ*΅M&VY/ps{ex[^+[y1d|CACk:ȬՉS夐\04愞^ReɎMѼb\]>\F1[+RBMI¾-}54HufɱYRlF]cxYKaDSmcr4y[~^Էig:1\1 ZX.x%_h*g;tX$'#ne;+z )8hڠd&,W":*rs0ɴ[ v7>clO6N<$?$"ŒVwvL]7lBd6#Q^T4O@Թυǃa*1;1d?d+>` D׭yiI|+h aD{9(7h*[Z97R%xQI\^,W"<di=Bwbd x wVJ $Єȵ>޲3TJŷWp1F}K7 L{A꺫r(c,E<>so_#Ak7炊*=:P!?Jk) OCYly|4E4<8Muo ygE t:?-&HV/*ҧ*$jJX"pFmV Zj2ŽߧP]j\va]]U:q@AbʒBJU :ʙ/eHp_S(%9)C6%FBZ&qh8&/TQ{>E޼4Z(i"> >y/V0 /M HQezcp*op*OV6n)g)Q6Q=$c*Bƚ ?.&+XgEܚoYgL|߅l& I/ѡI'> ~:\@/w8V|79gv"IpWВ k!>֯z~>̜GVio|:'v< 0مd"~[ HrŒoj"Wn,8W+U~@Vۅazܠsvyf+Hz:kbů@< (*&p;`;/!=Y aE٩لZ O˹=,TٺX\q8>{K}3qq)W >:LYBT6+0jwƠ[>{'08`yYc~b#yu1ih<7tqWJYfeܐHQ"*V hfDIt"TR:#Q2ȠJf}1BOo'60m'2ubsO3: 4\e  檊ZqZ Uǐ15@`<[l^ЏwLWXvAm> OCYly|4E4<8Muo ygE t:?-&HV/*ҧ*$jJX"pFmV Zj2ŽߧP]j\va]]U:q@AbʒBJU :ʙ/eHp_S(%9)C6%FBZ&qh8&/TQ{>E޼4Z(i"> >y/V0 /M HQezcp*op*OV6n)g)Q6Q=$c*Bƚ ?.&+XgEܚoYgL|߅l& I/ѡI'> ~:\@/w8V|79gv"IpWВ k!>֯z~>̜GVio|:'v< 0مd"~[ HrŒoj"Wn,8W+U~@Vۅazܠsvyf+Hz:kbů@< (*&p;`;/!=Y aE٩لZ O˹=,TٺX\q8>{K}3qq)W >:LYBT6+0jwƠ[>{'08`yYc~b#yu1ih<7tqWJYfeܐHQ"*V hfDIt"TR:#Q2ȠJf}1BOo'60m'2ubsO3: 4\e  檊ZqZ Uǐ15@`<[l^ЏwLWXvAm>3Xߐo˫NqH?l҅a\T.ګ5InNPU9A`-vgx}/Fhzt-^XBhfk#:#t4Ę3GivG-4ZWuϒ?ꌋ A͇9YcRB415^˒G~d@՗UH@b?GG۳qԔ>Hꆖ%=[3Y CK8r,Kg Z+"JgnLEfd,͒_r`xrm뱃l⳽Nk̗q8k(Ȟt!,6Y.yp?-g9T[++ GGV-~"J~Qt0%zHϷvY 6͇y(doޠ7(>|/qc5J"$jiV!bЈ5k$y!) wX7̀Y}&Z yVeO[fHWboN} XС|fvAk C\H^lO*P9cR*ىD6? 41()6 8\؉@A=#2(TTَFB 8Y3hT23H[e!w 7Z ~YNeP6秛cȾď<0_yzl7͇ L d}P!2 A7J<#w2oDjzH2 ^{۾sg#wƱhڛ.j~6&^]hwcTRwCnRZ1$=ŋԎ7@,D bh2fL#aYj_+a_9A+fB>(H Y  ?mlZxZ\l6/V$K0'# .ND2+GFj: õWXm@0`\qބrL &B1 s:JQC XR*Q,tƉYw5Rj!ż0ίab&S|-KdBP[5N۵- <_PK^bH29iPbpyQ y[֡ڃ[ a" =F 0#I-&m2uOP&8<U==gRw>9rאg4ZBԳhɗ/R8RĪzX'\.m,2?jO{LFC@/#ǵ?0el to]Idp˕1ReQuBuQ +ET 46- Oqѷe=Nf0[Tv<%֌*{h,CkZ \!ӪɉW*#R1yX-;6sBBR1BrzEN ~9C\8- 4HHT h~a>^qG32$tqw  SYb0C UK@h}晤<Ϥ6;#G`<X*k3EǀCpp[*U'gݒ1; 8ePΘMEQJHSRU8EHOW+ۄlODX\LY)jk1Q idT҂{9I`i!ÉcD,*!{#vr0%_a6L@s0`h`s3v] QU]?Ԗ9E{HZt\tMsofd4]<>zySrhZùp3&v_t Kh3/6Vt. Tiw_u/q 0v` -ł]FtacŦđ sxwu!>)Ҿ͉{?safecopy-1.7/test/test6/test2.dat0000644000175100001440000005000011202053544015773 0ustar ravenusersŁcA< B줡YW#G`=m|^@1q3|Mf Si+HبV!BXw =vEgSf6$FW/~$5ìaN{:3{nսQ` #$׍(v_n""P#4ܕ{ Gc/DjLVŞ#LeA׭gV͊\?JE\;SAMcJZ RA%ߗdi =(@L9dj\l(3ZDQOkK3އjZ 3@An(GCZ9X'k*.zɘں㆕6Ƨ0\؅D5G#eTOPf'xoW6o` 4RGLv Eh$s7[dheuUm2RNU6\2As.akc ƬS9ڵX[ŮN1l9R%LwKbHD;c86=C([KZfd xg;LKWz'MwyGᱚE\}oi Gc+`v9eɹikʠn)p8X(bI)Ѐloטк?Rl\rdhUWCV1uȂV?3U`a :c[*^j +K, ѶrcqcJ<=AczgzNL }__nQ3dF0#u?$S/-\a7RDN!zZ% ۾Ppu[ >!Z%+p$t=rW~ǃgAبyf;`oPUiIZ*΅M&VY/ps{ex[^+[y1d|CACk:ȬՉS夐\04愞^ReɎMѼb\]>\F1[+RBMI¾-}54HufɱYRlF]cxYKaDSmcr4y[~^Էig:1\1 ZX.x%_h*g;tX$'#ne;+z )8hڠd&,W":*rs0ɴ[ v7>clO6N<$?$"ŒVwvL]7lBd6#Q^T4O@Թυǃa*1;1d?d+>` D׭yiI|+h aD{9(7h*[Z97R%xQI\^,W"<di=Bwbd x wVJ $Єȵ>޲3TJŷWp1F}K7 L{A꺫r(c,E<>so_#Ak7炊*=:P!?Jk) OCYly|4E4<8Muo ygE t:?-&HV/*ҧ*$jJX"pFmV Zj2ŽߧP]j\va]]U:q@AbʒBJU :ʙ/eHp_S(%9)C6%FBZ&qh8&/TQ{>E޼4Z(i"> >y/V0 /M HQezcp*op*OV6n)g)Q6Q=$c*Bƚ ?.&+XgEܚoYgL|߅l& I/ѡI'> ~:\@/w8V|79gv"IpWВ k!>֯z~>̜GVio|:'v< 0مd"~[ HrŒoj"Wn,8W+U~@Vۅazܠsvyf+Hz:kbů@< (*&p;`;/!=Y aE٩لZ O˹=,TٺX\q8>{K}3qq)W >:LYBT6+0jwƠ[>{'08`yYc~b#yu1ih<7tqWJYfeܐHQ"*V hfDIt"TR:#Q2ȠJf}1BOo'60m'2ubsO3: 4\e  檊ZqZ Uǐ15@`<[l^ЏwLWXvAm>(;0F~Քff_9 un=J0f"99KMpޜ)dPftph 4Ek}J+e~ܐSQrZEN5FQeKZ;:n߯"F.MXP2]w5U#Wʼn $5Cakz$bkgzc0@)ߊBlqz>7%5N=`D[,|@6B1;vYW2ii8mk%-7E.(&hz*Ç+G X)giۋR[s5bRl9Kx֛S@LkclVU2Slj\+$߸E+԰k )&H lڷ@8Lfm"0TGz{NlWy*y:H֎)'Pa͸57D`3F$JP,#o+29$8KB<)Vў ,Ө, b'Qb l4|-xV {q󀻯M)^{_{ՑZ$tvq=M(&~#F(EGZJd-ӌE5Ī5ⶱ/$Ċq/<F#t5R B/k~!G`'[%N _@lyЂsuJ 9g]̲Zhu ܻ2}y~%rO}vKbQmyH8nW1^k!\@;P҈4ō8}d1ѽlcL{ݯ[PqQ:M;Y)֍˗z!rCymBKYu-8ًE1k"5FdvG`>8fi;2MJi${[cFifC\[)QaĢ#n1.o#rP#=p%Z"YnZ*РHF*qU 3W%8>Ȗޫ0_VPE2BIF0u0JUcY]i{:@1E$4%,*I D`%@M!+19(Ӓ65dq1 (DZ,(pw4ULU!r`FOC<gRI$hz\-^qh*nSo;/;rq'= C Cq_@-9VsNL/2劵u0XuEv@Bm}n`0]0wS SQ\=00lx['|849m` Ț]ܯ_rzfNy JhmWyzc.6KWN' sPi0~ʖɍsx% ת8 QQf:\F;!lrļ~%D#b:ЯXC^VRQfkE0Ų+^2k4^昚߆ ٧Aǡ~AR1\_~So&[DVQZ'RJ)aChx;i3G +bTוtaM^6Lye(}405yWu:UUN, Q:3ͼ -v 0El Ъ[EwExݍLPBfFUfn.*A^IMYӱldk_ V7 3 ѕo99{io#ǐwi(KJ1zǢlU(Qc+v`Rh%sL7F]t"yxY,1~>_c*V"ϑ`S^RM@iz+*by>&=b7Kneq`m+׺|;gԀ8_3MO'(E?yr[& x/cT 5{J3PΗj}2UB@p`B9H`'\P9}{\N!6F}Tb5)Rx XekRepdick^b; &U?:?Sٟ8n r? Zݛ%<7g`|3:~4G<`CD 9@YK%f^Q>Sd&ٙE ־s =় 8Gu5"v  FwZT,xN OCYly|4E4<8Muo ygE t:?-&HV/*ҧ*$jJX"pFmV Zj2ŽߧP]j\va]]U:q@AbʒBJU :ʙ/eHp_S(%9)C6%FBZ&qh8&/TQ{>E޼4Z(i"> >y/V0 /M HQezcp*op*OV6n)g)Q6Q=$c*Bƚ ?.&+XgEܚoYgL|߅l& I/ѡI'> ~:\@/w8V|79gv"IpWВ k!>֯z~>̜GVio|:'v< 0مd"~[ HrŒoj"Wn,8W+U~@Vۅazܠsvyf+Hz:kbů@< (*&p;`;/!=Y aE٩لZ O˹=,TٺX\q8>{K}3qq)W >:LYBT6+0jwƠ[>{'08`yYc~b#yu1ih<7tqWJYfeܐHQ"*V hfDIt"TR:#Q2ȠJf}1BOo'60m'2ubsO3: 4\e  檊ZqZ Uǐ15@`<[l^ЏwLWXvAm>3Xߐo˫NqH?l҅a\T.ګ5InNPU9A`-vgx}/Fhzt-^XBhfk#:#t4Ę3GivG-4ZWuϒ?ꌋ A͇9YcRB415^˒G~d@՗UH@b?GG۳qԔ>Hꆖ%=[3Y CK8r,Kg Z+"JgnLEfd,͒_r`xrm뱃l⳽Nk̗q8k(Ȟt!,6Y.yp?-g9T[++ GGV-~"J~Qt0%zHϷvY 6͇y(doޠ7(>|/qc5J"$jiV!bЈ5k$y!) wX7̀Y}&Z yVeO[fHWboN} XС|fvAk C\H^lO*P9cR*ىD6? 41()6 8\؉@A=#2(TTَFB 8Y3hT23H[e!w 7Z ~YNeP6秛cȾď<0_yzl7͇ L d}P!2 A7J<#w2oDjzH2 ^{۾sg#wƱhڛ.j~6&^]hwcTRwCnRZ1$=ŋԎ7@,D bh2fL#aYj_+a_9A+fB>(H Y  ?mlZxZ\l6/V$K0'# .ND2+GFj: õWXm@0`\qބrL &B1 s:JQC XR*Q,tƉYw5Rj!ż0ίab&S|-KdBP[5N۵- <_PK^bH29iPbpyQ y[֡ڃ[ a" =F 0#I-&m2uOP&8<U==gRw>9rאg4ZBԳhɗ/R8RĪzX'\.m,2?jO{LFC@/#ǵ?0el to]Idp˕1ReQuBuQ +ET 46- Oqѷe=Nf0[Tv<%֌*{h,CkZ \!ӪɉW*#R1yX-;6sBBR1BrzEN ~9C\8- 4HHT h~a>^qG32$tqw  SYb0C UK@h}晤<Ϥ6;#G`<X*k3EǀCpp[*U'gݒ1; 8ePΘMEQJHSRU8EHOW+ۄlODX\LY)jk1Q idT҂{9I`i!ÉcD,*!{#vr0%_a6L@s0`h`s3v] QU]?Ԗ9E{HZt\tMsofd4]<>zySrhZùp3&v_t Kh3/6Vt. Tiw_u/q 0v` -ł]FtacŦđ sxwu!>)Ҿ͉{?safecopy-1.7/test/test6/test.dat0000644000175100001440000005000011202053544015711 0ustar ravenusersŁcA< B줡YW#G`=m|^@1q3|Mf Si+HبV!BXw =vEgSf6$FW/~$5ìaN{:3{nսQ` #$׍(v_n""P#4ܕ{ Gc/DjLVŞ#LeA׭gV͊\?JE\;SAMcJZ RA%ߗdi =(@L9dj\l(3ZDQOkK3އjZ 3@An(GCZ9X'k*.zɘں㆕6Ƨ0\؅D5G#eTOPf'xoW6o` 4RGLv Eh$s7[dheuUm2RNU6\2As.akc ƬS9ڵX[ŮN1l9R%LwKbHD;c86=C([KZfd xg;LKWz'MwyGᱚE\}oi Gc+`v9eɹikʠn)p8X(bI)Ѐloטк?Rl\rdhUWCV1uȂV?3U`a :c[*^j +K, ѶrcqcJ<=AczgzNL }__nQ3dF0#u?$S/-\a7RDN!zZ% ۾Ppu[ >!Z%+p$t=rW~ǃgAبyf;`oPUiIZ*΅M&VY/ps{ex[^+[y1d|CACk:ȬՉS夐\04愞^ReɎMѼb\]>\F1[+RBMI¾-}54HufɱYRlF]cxYKaDSmcr4y[~^Էig:1\1 ZX.x%_h*g;tX$'#ne;+z )8hڠd&,W":*rs0ɴ[ v7>clO6N<$?$"ŒVwvL]7lBd6#Q^T4O@Թυǃa*1;1d?d+>` D׭yiI|+h aD{9(7h*[Z97R%xQI\^,W"<di=Bwbd x wVJ $Єȵ>޲3TJŷWp1F}K7 L{A꺫r(c,E<>so_#Ak7炊*=:P!?Jk)og y(<<|`,/&zQt6lv40զcfU[ua(.8$RG>)8]xY0hNyD82dzv ӟ hn^%ڽsx8_(og?K>x8Fr=BU:v'>,,xfk/jZ͋NkYkTʂM,VK%vkA!5NR'c-<6Yf^Q4 p `' g}1ˏdx74qӧ9:iɰW=`)Cgw[:߀,{A &&D_Z_y,fk55$W ;+F:~8Hph7b E=QOw4)^|كvD'\˸!İ|gn|Hw+) ([t-G5'W)ëVd$jjvA$o֩jI"=u: Y'Άĩ&'J۵mdi.O=PlW)So\s9Vj{c쩄NKBS@*x4+h;z-]~Y+o$_ZX.h"]7;2M`a%ҪX69b^ q79r8("@InZ20ƣvi* 𔛖vr`pbb=gO~T}ނãIoI 'h ϧq ]: OB(;0F~Քff_9 un=J0f"99KMpޜ)dPftph 4Ek}J+e~ܐSQrZEN5FQeKZ;:n߯"F.MXP2]w5U#Wʼn $5Cakz$bkgzc0@)ߊBlqz>7%5N=`D[,|@6B1;vYW2ii8mk%-7E.(&hz*Ç+G X)giۋR[s5bRl9Kx֛S@LkclVU2Slj\+$߸E+԰k )&H lڷ@8Lfm"0TGz{NlWy*y:H֎)'Pa͸57D`3F$JP,#o+29$8KB<)Vў ,Ө, b'Qb l4|-xV {q󀻯M)^{_{ՑZ$tvq=M(&~#F(EGZJd-ӌE5Ī5ⶱ/$Ċq/<F#t5R B/k~!G`'[%N _@lyЂsuJ 9g]̲Zhu ܻ2}y~%rO}vKbQmyH8nW1^k!\@;P҈4ō8}d1ѽlcL{ݯ[PqQ:M;Y)֍˗z!rCymBKYu-8ًE1k"5FdvG`>8fi;2MJi${[cFifC\[)QaĢ#n1.o#rP#=p%Z"YnZ*РHF*qU 3W%8>Ȗޫ0_VPE2BIF0u0JUcY]i{:@1E$4%,*I D`%@M!+19(Ӓ65dq1 (DZ,(pw4ULU!r`FOC<gRI$hz\-^qh*nSo;/;rq'= C Cq_@-9VsNL/2劵u0XuEv@Bm}n`0]0wS SQ\=00lx['|849m` Ț]ܯ_rzfNy JhmWyzc.6KWN' sPi0~ʖɍsx% ת8 QQf:\F;!lrļ~%D#b:ЯXC^VRQfkE0Ų+^2k4^昚߆ ٧Aǡ~AR1\_~So&[DVQZ'RJ)aChx;i3G +bTוtaM^6Lye(}405yWu:UUN, Q:3ͼ -v 0El Ъ[EwExݍLPBfFUfn.*A^IMYӱldk_ V7 3 ѕo99{io#ǐwi(KJ1zǢlU(Qc+v`Rh%sL7F]t"yxY,1~>_c*V"ϑ`S^RM@iz+*by>&=b7Kneq`m+׺|;gԀ8_3MO'(E?yr[& x/cT 5{J3PΗj}2UB@p`B9H`'\P9}{\N!6F}Tb5)Rx XekRepdick^b; &U?:?Sٟ8n r? Zݛ%<7g`|3:~4G<`CD 9@YK%f^Q>Sd&ٙE ־s =় 8Gu5"v  FwZT,xN OCYly|4E4<8Muo ygE t:?-&HV/*ҧ*$jJX"pFmV Zj2ŽߧP]j\va]]U:q@AbʒBJU :ʙ/eHp_S(%9)C6%FBZ&qh8&/TQ{>E޼4Z(i"> >y/V0 /M HQezcp*op*OV6n)g)Q6Q=$c*Bƚ ?.&+XgEܚoYgL|߅l& I/ѡI'> ~:\@/w8V|79gv"IpWВ k!>֯z~>̜GVio|:'v< 0مd"~[ HrŒoj"Wn,8W+U~@Vۅazܠsvyf+Hz:kbů@< (*&p;`;/!=Y aE٩لZ O˹=,TٺX\q8>{K}3qq)W >:LYBT6+0jwƠ[>{'08`yYc~b#yu1ih<7tqWJYfeܐHQ"*V hfDIt"TR:#Q2ȠJf}1BOo'60m'2ubsO3: 4\e  檊ZqZ Uǐ15@`<[l^ЏwLWXvAm>3Xߐo˫NqH?l҅a\T.ګ5InNPU9A`-vgx}/Fhzt-^XBhfk#:#t4Ę3GivG-4ZWuϒ?ꌋ A͇9YcRB415^˒G~d@՗UH@b?GG۳qԔ>Hꆖ%=[3Y CK8r,Kg Z+"JgnLEfd,͒_r`xrm뱃l⳽Nk̗q8k(Ȟt!,6Y.yp?-g9T[++ GGV-~"J~Qt0%zHϷvY 6͇y(doޠ7(>|/qc5J"$jiV!bЈ5k$y!) wX7̀Y}&Z yVeO[fHWboN} XС|fvAk C\H^lO*P9cR*ىD6? 41()6 8\؉@A=#2(TTَFB 8Y3hT23H[e!w 7Z ~YNeP6秛cȾď<0_yzl7͇ L d}P!2 A7J<#w2oDjzH2 ^{۾sg#wƱhڛ.j~6&^]hwcTRwCnRZ1$=ŋԎ7@,D bh2fL#aYj_+a_9A+fB>(H Y  ?mlZxZ\l6/V$K0'# .ND2+GFj: õWXm@0`\qބrL &B1 s:JQC XR*Q,tƉYw5Rj!ż0ίab&S|-KdBP[5N۵- <_PK^bH29iPbpyQ y[֡ڃ[ a" =F 0#I-&m2uOP&8<U==gRw>9rאg4ZBԳhɗ/R8RĪzX'\.m,2?jO{LFC@/#ǵ?0el to]Idp˕1ReQuBuQ +ET 46- Oqѷe=Nf0[Tv<%֌*{h,CkZ \!ӪɉW*#R1yX-;6sBBR1BrzEN ~9C\8- 4HHT h~a>^qG32$tqw  SYb0C UK@h}晤<Ϥ6;#G`<X*k3EǀCpp[*U'gݒ1; 8ePΘMEQJHSRU8EHOW+ۄlODX\LY)jk1Q idT҂{9I`i!ÉcD,*!{#vr0%_a6L@s0`h`s3v] QU]?Ԗ9E{HZt\tMsofd4]<>zySrhZùp3&v_t Kh3/6Vt. Tiw_u/q 0v` -ł]FtacŦđ sxwu!>)Ҿ͉{?ŁcA< B줡YW#G`=m|^@1q3|Mf Si+HبV!BXw =vEgSf6$FW/~$5ìaN{:3{nսQ` #$׍(v_n""P#4ܕ{ Gc/DjLVŞ#LeA׭gV͊\?JE\;SAMcJZ RA%ߗdi =(@L9dj\l(3ZDQOkK3އjZ 3@An(GCZ9X'k*.zɘں㆕6Ƨ0\؅D5G#eTOPf'xoW6o` 4RGLv Eh$s7[dheuUm2RNU6\2As.akc ƬS9ڵX[ŮN1l9R%LwKbHD;c86=C([KZfd xg;LKWz'MwyGᱚE\}oi Gc+`v9eɹikʠn)p8X(bI)Ѐloטк?Rl\rdhUWCV1uȂV?3U`a :c[*^j +K, ѶrcqcJ<=AczgzNL }__nQ3dF0#u?$S/-\a7RDN!zZ% ۾Ppu[ >!Z%+p$t=rW~ǃgAبyf;`oPUiIZ*΅M&VY/ps{ex[^+[y1d|CACk:ȬՉS夐\04愞^ReɎMѼb\]>\F1[+RBMI¾-}54HufɱYRlF]cxYKaDSmcr4y[~^Էig:1\1 ZX.x%_h*g;tX$'#ne;+z )8hڠd&,W":*rs0ɴ[ v7>clO6N<$?$"ŒVwvL]7lBd6#Q^T4O@Թυǃa*1;1d?d+>` D׭yiI|+h aD{9(7h*[Z97R%xQI\^,W"<di=Bwbd x wVJ $Єȵ>޲3TJŷWp1F}K7 L{A꺫r(c,E<>so_#Ak7炊*=:P!?Jk)og y(<<|`,/&zQt6lv40զcfU[ua(.8$RG>)8]xY0hNyD82dzv ӟ hn^%ڽsx8_(og?K>x8Fr=BU:v'>,,xfk/jZ͋NkYkTʂM,VK%vkA!5NR'c-<6Yf^Q4 p `' g}1ˏdx74qӧ9:iɰW=`)Cgw[:߀,{A &&D_Z_y,fk55$W ;+F:~8Hph7b E=QOw4)^|كvD'\˸!İ|gn|Hw+) ([t-G5'W)ëVd$jjvA$o֩jI"=u: Y'Άĩ&'J۵mdi.O=PlW)So\s9Vj{c쩄NKBS@*x4+h;z-]~Y+o$_ZX.h"]7;2M`a%ҪX69b^ q79r8("@InZ20ƣvi* 𔛖vr`pbb=gO~T}ނãIoI 'h ϧq ]: OB(;0F~Քff_9 un=J0f"99KMpޜ)dPftph 4Ek}J+e~ܐSQrZEN5FQeKZ;:n߯"F.MXP2]w5U#Wʼn $5Cakz$bkgzc0@)ߊBlqz>7%5N=`D[,|@6B1;vYW2ii8mk%-7E.(&hz*Ç+G X)giۋR[s5bRl9Kx֛S@LkclVU2Slj\+$߸E+԰k )&H lڷ@8Lfm"0TGz{NlWy*y:H֎)'Pa͸57D`3F$JP,#o+29$8KB<)Vў ,Ө, b'Qb l4|-xV {q󀻯M)^{_{ՑZ$tvq=M(&~#F(EGZJd-ӌE5Ī5ⶱ/$Ċq/<F#t5R B/k~!G`'[%N _@lyЂsuJ 9g]̲Zhu ܻ2}y~%rO}vKbQmyH8nW1^k!\@;P҈4ō8}d1ѽlcL{ݯ[PqQ:M;Y)֍˗z!rCymBKYu-8ًE1k"5FdvG`>8fi;2MJi${[cFifC\[)QaĢ#n1.o#rP#=p%Z"YnZ*РHF*qU 3W%8>Ȗޫ0_VPE2BIF0u0JUcY]i{:@1E$4%,*I D`%@M!+19(Ӓ65dq1 (DZ,(pw4ULU!r`FOC<gRI$hz\-^qh*nSo;/;rq'= C Cq_@-9VsNL/2劵u0XuEv@Bm}n`0]0wS SQ\=00lx['|849m` Ț]ܯ_rzfNy JhmWyzc.6KWN' sPi0~ʖɍsx% ת8 QQf:\F;!lrļ~%D#b:ЯXC^VRQfkE0Ų+^2k4^昚߆ ٧Aǡ~AR1\_~So&[DVQZ'RJ)aChx;i3G +bTוtaM^6Lye(}405yWu:UUN, Q:3ͼ -v 0El Ъ[EwExݍLPBfFUfn.*A^IMYӱldk_ V7 3 ѕo99{io#ǐwi(KJ1zǢlU(Qc+v`Rh%sL7F]t"yxY,1~>_c*V"ϑ`S^RM@iz+*by>&=b7Kneq`m+׺|;gԀ8_3MO'(E?yr[& x/cT 5{J3PΗj}2UB@p`B9H`'\P9}{\N!6F}Tb5)Rx XekRepdick^b; &U?:?Sٟ8n r? Zݛ%<7g`|3:~4G<`CD 9@YK%f^Q>Sd&ٙE ־s =় 8Gu5"v  FwZT,xN OCYly|4E4<8Muo ygE t:?-&HV/*ҧ*$jJX"pFmV Zj2ŽߧP]j\va]]U:q@AbʒBJU :ʙ/eHp_S(%9)C6%FBZ&qh8&/TQ{>E޼4Z(i"> >y/V0 /M HQezcp*op*OV6n)g)Q6Q=$c*Bƚ ?.&+XgEܚoYgL|߅l& I/ѡI'> ~:\@/w8V|79gv"IpWВ k!>֯z~>̜GVio|:'v< 0مd"~[ HrŒoj"Wn,8W+U~@Vۅazܠsvyf+Hz:kbů@< (*&p;`;/!=Y aE٩لZ O˹=,TٺX\q8>{K}3qq)W >:LYBT6+0jwƠ[>{'08`yYc~b#yu1ih<7tqWJYfeܐHQ"*V hfDIt"TR:#Q2ȠJf}1BOo'60m'2ubsO3: 4\e  檊ZqZ Uǐ15@`<[l^ЏwLWXvAm>3Xߐo˫NqH?l҅a\T.ګ5InNPU9A`-vgx}/Fhzt-^XBhfk#:#t4Ę3GivG-4ZWuϒ?ꌋ A͇9YcRB415^˒G~d@՗UH@b?GG۳qԔ>Hꆖ%=[3Y CK8r,Kg Z+"JgnLEfd,͒_r`xrm뱃l⳽Nk̗q8k(Ȟt!,6Y.yp?-g9T[++ GGV-~"J~Qt0%zHϷvY 6͇y(doޠ7(>|/qc5J"$jiV!bЈ5k$y!) wX7̀Y}&Z yVeO[fHWboN} XС|fvAk C\H^lO*P9cR*ىD6? 41()6 8\؉@A=#2(TTَFB 8Y3hT23H[e!w 7Z ~YNeP6秛cȾď<0_yzl7͇ L d}P!2 A7J<#w2oDjzH2 ^{۾sg#wƱhڛ.j~6&^]hwcTRwCnRZ1$=ŋԎ7@,D bh2fL#aYj_+a_9A+fB>(H Y  ?mlZxZ\l6/V$K0'# .ND2+GFj: õWXm@0`\qބrL &B1 s:JQC XR*Q,tƉYw5Rj!ż0ίab&S|-KdBP[5N۵- <_PK^bH29iPbpyQ y[֡ڃ[ a" =F 0#I-&m2uOP&8<U==gRw>9rאg4ZBԳhɗ/R8RĪzX'\.m,2?jO{LFC@/#ǵ?0el to]Idp˕1ReQuBuQ +ET 46- Oqѷe=Nf0[Tv<%֌*{h,CkZ \!ӪɉW*#R1yX-;6sBBR1BrzEN ~9C\8- 4HHT h~a>^qG32$tqw  SYb0C UK@h}晤<Ϥ6;#G`<X*k3EǀCpp[*U'gݒ1; 8ePΘMEQJHSRU8EHOW+ۄlODX\LY)jk1Q idT҂{9I`i!ÉcD,*!{#vr0%_a6L@s0`h`s3v] QU]?Ԗ9E{HZt\tMsofd4]<>zySrhZùp3&v_t Kh3/6Vt. Tiw_u/q 0v` -ł]FtacŦđ sxwu!>)Ҿ͉{?safecopy-1.7/test/test6/test3.dat0000644000175100001440000005000011202053544015774 0ustar ravenusersŁcA< B줡YW#G`=m|^@1q3|Mf Si+HبV!BXw =vEgSf6$FW/~$5ìaN{:3{nսQ` #$׍(v_n""P#4ܕ{ Gc/DjLVŞ#LeA׭gV͊\?JE\;SAMcJZ RA%ߗdi =(@L9dj\l(3ZDQOkK3އjZ 3@An(GCZ9X'k*.zɘں㆕6Ƨ0\؅D5G#eTOPf'xoW6o` 4RGLv Eh$s7[dheuUm2RNU6\2As.akc ƬS9ڵX[ŮN1l9R%LwKbHD;c86=C([KZfd xg;LKWz'MwyGᱚE\}oi Gc+`v9eɹikʠn)p8X(bI)Ѐloטк?Rl\rdhUWCV1uȂV?3U`a :c[*^j +K, ѶrcqcJ<=AczgzNL }__nQ3dF0#u?$S/-\a7RDN!zZ% ۾Ppu[ >!Z%+p$t=rW~ǃgAبyf;`oPUiIZ*΅M&VY/ps{ex[^+[y1d|CACk:ȬՉS夐\04愞^ReɎMѼb\]>\F1[+RBMI¾-}54HufɱYRlF]cxYKaDSmcr4y[~^Էig:1\1 ZX.x%_h*g;tX$'#ne;+z )8hڠd&,W":*rs0ɴ[ v7>clO6N<$?$"ŒVwvL]7lBd6#Q^T4O@Թυǃa*1;1d?d+>` D׭yiI|+h aD{9(7h*[Z97R%xQI\^,W"<di=Bwbd x wVJ $Єȵ>޲3TJŷWp1F}K7 L{A꺫r(c,E<>so_#Ak7炊*=:P!?Jk)(;0F~Քff_9 un=J0f"99KMpޜ)dPftph 4Ek}J+e~ܐSQrZEN5FQeKZ;:n߯"F.MXP2]w5U#Wʼn $5Cakz$bkgzc0@)ߊBlqz>7%5N=`D[,|@6B1;vYW2ii8mk%-7E.(&hz*Ç+G X)giۋR[s5bRl9Kx֛S@LkclVU2Slj\+$߸E+԰k )&H lڷ@8Lfm"0TGz{NlWy*y:H֎)'Pa͸57D`3F$JP,#o+29$8KB<)Vў ,Ө, b'Qb l4|-xV {q󀻯M)^{_{ՑZ$tvq=M(&~#F(EGZJd-ӌE5Ī5ⶱ/$Ċq/<F#t5R B/k~!G`'[%N _@lyЂsuJ 9g]̲ZhuE t:?-&HV/*ҧ*$jJX"pFmV Zj2ŽߧP]j\va]]U:q@AbʒBJU :ʙ/eHp_S(%9)C6%FBZ&qh8&/TQ{>E޼4Z(i"> >y/V0 /M HQezcp*op*OV6n)g)Q6Q=$c*Bƚ ?.&+XgEܚoYgL|߅l& I/ѡI'> ~:\@/w8V|79gv"IpWВ k!>֯z~>̜GVio|:'v< 0مd"~[ HrŒoj"Wn,8W+U~@Vۅazܠsvyf+Hz:kbů@< (*&p;`;/!=Y aE٩لZ O˹=,TٺX\q8>{K}3qq)W >:LYBT6+0jwƠ[>{'08`yYc~b#yu1ih<7tqWJYfeܐHQ"*V hfDIt"TR:#Q2ȠJf}1BOo'60m'2ubsO3: 4\e  檊ZqZ Uǐ15@`<[l^ЏwLWXvAm>(;0F~Քff_9 un=J0f"99KMpޜ)dPftph 4Ek}J+e~ܐSQrZEN5FQeKZ;:n߯"F.MXP2]w5U#Wʼn $5Cakz$bkgzc0@)ߊBlqz>7%5N=`D[,|@6B1;vYW2ii8mk%-7E.(&hz*Ç+G X)giۋR[s5bRl9Kx֛S@LkclVU2Slj\+$߸E+԰k )&H lڷ@8Lfm"0TGz{NlWy*y:H֎)'Pa͸57D`3F$JP,#o+29$8KB<)Vў ,Ө, b'Qb l4|-xV {q󀻯M)^{_{ՑZ$tvq=M(&~#F(EGZJd-ӌE5Ī5ⶱ/$Ċq/<F#t5R B/k~!G`'[%N _@lyЂsuJ 9g]̲Zhu ܻ2}y~%rO}vKbQmyH8nW1^k!\@;P҈4ō8}d1ѽlcL{ݯ[PqQ:M;Y)֍˗z!rCymBKYu-8ًE1k"5FdvG`>8fi;2MJi${[cFifC\[)QaĢ#n1.o#rP#=p%Z"YnZ*РHF*qU 3W%8>Ȗޫ0_VPE2BIF0u0JUcY]i{:@1E$4%,*I D`%@M!+19(Ӓ65dq1 (DZ,(pw4ULU!r`FOC<gRI$hz\-^qh*nSo;/;rq'= C Cq_@-9VsNL/2劵u0XuEv@Bm}n`0]0wS SQ\=00lx['|849m` Ț]ܯ_rzfNy JhmWyzc.6KWN' sPi0~ʖɍsx% ת8 QQf:\F;!lrļ~%D#b:ЯXC^VRQfkE0Ų+^2k4^昚߆ ٧Aǡ~AR1\_~So&[DVQZ'RJ)aChx;i3G +bTוtaM^6Lye(}405yWu:UUN, Q:3ͼ -v 0El Ъ[EwExݍLPBfFUfn.*A^IMYӱldk_ V7 3 ѕo99{io#ǐwi(KJ1zǢlU(Qc+v`Rh%sL7F]t"yxY,1~>_c*V"ϑ`S^RM@iz+*by>&=b7Kneq`m+׺|;gԀ8_3MO'(E?yr[& x/cT 5{J3PΗj}2UB@p`B9H`'\P9}{\N!6F}Tb5)Rx XekRepdick^b; &U?:?Sٟ8n r? Zݛ%<7g`|3:~4G<`CD 9@YK%f^Q>Sd&ٙE ־s =় 8Gu5"v  FwZT,xN OCYly|4E4<8Muo ygE t:?-&HV/*ҧ*$jJX"pFmV Zj2ŽߧP]j\va]]U:q@AbʒBJU :ʙ/eHp_S(%9)C6%FBZ&qh8&/TQ{>E޼4Z(i"> >y/V0 /M HQezcp*op*OV6n)g)Q6Q=$c*Bƚ ?.&+XgEܚoYgL|߅l& I/ѡI'> ~:\@/w8V|79gv"IpWВ k!>֯z~>̜GVio|:'v< 0مd"~[ HrŒoj"Wn,8W+U~@Vۅazܠsvyf+Hz:kbů@< (*&p;`;/!=Y aE٩لZ O˹=,TٺX\q8>{K}3qq)W >:LYBT6+0jwƠ[>{'08`yYc~b#yu1ih<7tqWJYfeܐHQ"*V hfDIt"TR:#Q2ȠJf}1BOo'60m'2ubsO3: 4\e  檊ZqZ Uǐ15@`<[l^ЏwLWXvAm>3Xߐo˫NqH?l҅a\T.ګ5InNPU9A`-vgx}/Fhzt-^XBhfk#:#t4Ę3GivG-4ZWuϒ?ꌋ A͇9YcRB415^˒G~d@՗UH@b?GG۳qԔ>Hꆖ%=[3Y CK8r,Kg Z+"JgnLEfd,͒_r`xrm뱃l⳽Nk̗q8k(Ȟt!,6Y.yp?-g9T[++ GGV-~"J~Qt0%zHϷvY 6͇y(doޠ7(>|/qc5J"$jiV!bЈ5k$y!) wX7̀Y}&Z yVeO[fHWboN} XС|fvAk C\H^lO*P9cR*ىD6? 41()6 8\؉@A=#2(TTَFB 8Y3hT23H[e!w 7Z ~YNeP6秛cȾď<0_yzl7͇ L d}P!2 A7J<#w2oDjzH2 ^{۾sg#wƱhڛ.j~6&^]hwcTRwCnRZ1$=ŋԎ7@,D bh2fL#aYj_+a_9A+fB>(H Y  ?mlZxZ\l6/V$K0'# .ND2+GFj: õWXm@0`\qބrL &B1 s:JQC XR*Q,tƉYw5Rj!ż0ίab&S|-KdBP[5N۵- <_PK^bH29iPbpyQ y[֡ڃ[ a" =F 0#I-&m2uOP&8<U==gRw>9rאg4ZBԳhɗ/R8RĪzX'\.m,2?jO{LFC@/#ǵ?0el to]Idp˕1ReQuBuQ +ET 46- Oqѷe=Nf0[Tv<%֌*{h,CkZ \!ӪɉW*#R1yX-;6sBBR1BrzEN ~9C\8- 4HHT h~a>^qG32$tqw  SYb0C UK@h}晤<Ϥ6;#G`<X*k3EǀCpp[*U'gݒ1; 8ePΘMEQJHSRU8EHOW+ۄlODX\LY)jk1Q idT҂{9I`i!ÉcD,*!{#vr0%_a6L@s0`h`s3v] QU]?Ԗ9E{HZt\tMsofd4]<>zySrhZùp3&v_t Kh3/6Vt. Tiw_u/q 0v` -ł]FtacŦđ sxwu!>)Ҿ͉{?safecopy-1.7/test/test6/test1.badblocks0000644000175100001440000000003611202053544017152 0ustar ravenusers2 3 4 5 8 9 10 11 12 13 14 15 safecopy-1.7/test/test6/test3.badblocks0000644000175100001440000000002311202053544017150 0ustar ravenusers2 4 5 8 9 10 11 12 safecopy-1.7/test/test6/test.sh0000755000175100001440000001002311726747607015604 0ustar ravenusers#!/bin/sh test_name="safecopy, incremental recovery" source "../libtestsuite.sh" function test_current() { testsuite_debug "copying reference files for safecopy" cp "test1.dat" "$testsuite_tmpdir/test2.dat" >/dev/null 2>&1 cp "test1.dat" "$testsuite_tmpdir/test3.dat" >/dev/null 2>&1 cp "test1.dat" "$testsuite_tmpdir/test4.dat" >/dev/null 2>&1 cp "test1.dat" "$testsuite_tmpdir/test5.dat" >/dev/null 2>&1 testsuite_assert_files_identical "test1.dat" "$testsuite_tmpdir/test2.dat" testsuite_assert_files_identical "test1.dat" "$testsuite_tmpdir/test3.dat" testsuite_assert_files_identical "test1.dat" "$testsuite_tmpdir/test4.dat" testsuite_assert_files_identical "test1.dat" "$testsuite_tmpdir/test5.dat" testsuite_debug "Test, first run with big skipsize and resolution to produce output with holes" LD_PRELOAD="$preload" $safecopy -R 2 -b 1024 -f 4* -r 4* -o "$testsuite_tmpdir/test1.badblocks" debug "$testsuite_tmpdir/test1.dat" >"$testsuite_tmpdir/test1.out" 2>&1 if [ $? != 1 ]; then testsuite_error "Run of safecopy returned wrong exit code. Output:" testsuite_debug_file "$testsuite_tmpdir/test1.out" fi testsuite_assert_files_identical "test1.dat" "$testsuite_tmpdir/test1.dat" testsuite_assert_files_identical "test1.badblocks" "$testsuite_tmpdir/test1.badblocks" testsuite_debug "Test, incremental, big skipsize, small resolution." testsuite_debug " Must recover data at the end of bad areas but not overwrite already recovered data" LD_PRELOAD="$preload" $safecopy -R 2 -b 1024 -f 8* -I "$testsuite_tmpdir/test1.badblocks" -o "$testsuite_tmpdir/test2.badblocks" debug "$testsuite_tmpdir/test2.dat" >"$testsuite_tmpdir/test2.out" 2>&1 if [ $? != 1 ]; then testsuite_error "Run of safecopy returned wrong exit code. Output:" testsuite_debug_file "$testsuite_tmpdir/test2.out" fi testsuite_assert_files_identical "test2.dat" "$testsuite_tmpdir/test2.dat" testsuite_assert_files_identical "test2.badblocks" "$testsuite_tmpdir/test2.badblocks" testsuite_debug "Test, incremental, small skipsize and resolution." testsuite_debug " Must recover all recoverable data" LD_PRELOAD="$preload" $safecopy -R 2 -b 1024 -f 1* -I "$testsuite_tmpdir/test1.badblocks" -o "$testsuite_tmpdir/test3.badblocks" debug "$testsuite_tmpdir/test3.dat" >"$testsuite_tmpdir/test3.out" 2>&1 if [ $? != 1 ]; then testsuite_error "Run of safecopy returned wrong exit code. Output:" testsuite_debug_file "$testsuite_tmpdir/test3.out" fi testsuite_assert_files_identical "test3.dat" "$testsuite_tmpdir/test3.dat" testsuite_assert_files_identical "test3.badblocks" "$testsuite_tmpdir/test3.badblocks" testsuite_debug "Test, incremental, big skipsize, small resolution this time with marking." testsuite_debug " Must recover data at the end of bad areas but not overwrite already recovered data" LD_PRELOAD="$preload" $safecopy -M "MARKBAAD" -R 2 -b 1024 -f 8* -I "$testsuite_tmpdir/test1.badblocks" -o "$testsuite_tmpdir/test4.badblocks" debug "$testsuite_tmpdir/test4.dat" >"$testsuite_tmpdir/test4.out" 2>&1 if [ $? != 1 ]; then testsuite_error "Run of safecopy returned wrong exit code. Output:" testsuite_debug_file "$testsuite_tmpdir/test4.out" fi testsuite_assert_files_identical "test4.dat" "$testsuite_tmpdir/test4.dat" testsuite_assert_files_identical "test2.badblocks" "$testsuite_tmpdir/test4.badblocks" testsuite_debug "Test, incremental, small skipsize and resolution, with marking." testsuite_debug " Must recover all recoverable data" LD_PRELOAD="$preload" $safecopy -M "MARKBAAD" -R 2 -b 1024 -f 1* -I "$testsuite_tmpdir/test1.badblocks" -o "$testsuite_tmpdir/test5.badblocks" debug "$testsuite_tmpdir/test5.dat" >"$testsuite_tmpdir/test5.out" 2>&1 if [ $? != 1 ]; then testsuite_error "Run of safecopy returned wrong exit code. Output:" testsuite_debug_file "$testsuite_tmpdir/test5.out" fi testsuite_assert_files_identical "test5.dat" "$testsuite_tmpdir/test5.dat" testsuite_assert_files_identical "test3.badblocks" "$testsuite_tmpdir/test5.badblocks" } testsuite_runtest safecopy-1.7/test/test6/test2.badblocks0000644000175100001440000000002511202053544017151 0ustar ravenusers2 3 4 5 8 9 10 11 12 safecopy-1.7/test/test6/test5.dat0000644000175100001440000005000011202053544015776 0ustar ravenusersŁcA< B줡YW#G`=m|^@1q3|Mf Si+HبV!BXw =vEgSf6$FW/~$5ìaN{:3{nսQ` #$׍(v_n""P#4ܕ{ Gc/DjLVŞ#LeA׭gV͊\?JE\;SAMcJZ RA%ߗdi =(@L9dj\l(3ZDQOkK3އjZ 3@An(GCZ9X'k*.zɘں㆕6Ƨ0\؅D5G#eTOPf'xoW6o` 4RGLv Eh$s7[dheuUm2RNU6\2As.akc ƬS9ڵX[ŮN1l9R%LwKbHD;c86=C([KZfd xg;LKWz'MwyGᱚE\}oi Gc+`v9eɹikʠn)p8X(bI)Ѐloטк?Rl\rdhUWCV1uȂV?3U`a :c[*^j +K, ѶrcqcJ<=AczgzNL }__nQ3dF0#u?$S/-\a7RDN!zZ% ۾Ppu[ >!Z%+p$t=rW~ǃgAبyf;`oPUiIZ*΅M&VY/ps{ex[^+[y1d|CACk:ȬՉS夐\04愞^ReɎMѼb\]>\F1[+RBMI¾-}54HufɱYRlF]cxYKaDSmcr4y[~^Էig:1\1 ZX.x%_h*g;tX$'#ne;+z )8hڠd&,W":*rs0ɴ[ v7>clO6N<$?$"ŒVwvL]7lBd6#Q^T4O@Թυǃa*1;1d?d+>` D׭yiI|+h aD{9(7h*[Z97R%xQI\^,W"<di=Bwbd x wVJ $Єȵ>޲3TJŷWp1F}K7 L{A꺫r(c,E<>so_#Ak7炊*=:P!?Jk)MARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAAD(;0F~Քff_9 un=J0f"99KMpޜ)dPftph 4Ek}J+e~ܐSQrZEN5FQeKZ;:n߯"F.MXP2]w5U#Wʼn $5Cakz$bkgzc0@)ߊBlqz>7%5N=`D[,|@6B1;vYW2ii8mk%-7E.(&hz*Ç+G X)giۋR[s5bRl9Kx֛S@LkclVU2Slj\+$߸E+԰k )&H lڷ@8Lfm"0TGz{NlWy*y:H֎)'Pa͸57D`3F$JP,#o+29$8KB<)Vў ,Ө, b'Qb l4|-xV {q󀻯M)^{_{ՑZ$tvq=M(&~#F(EGZJd-ӌE5Ī5ⶱ/$Ċq/<F#t5R B/k~!G`'[%N _@lyЂsuJ 9g]̲ZhuE t:?-&HV/*ҧ*$jJX"pFmV Zj2ŽߧP]j\va]]U:q@AbʒBJU :ʙ/eHp_S(%9)C6%FBZ&qh8&/TQ{>E޼4Z(i"> >y/V0 /M HQezcp*op*OV6n)g)Q6Q=$c*Bƚ ?.&+XgEܚoYgL|߅l& I/ѡI'> ~:\@/w8V|79gv"IpWВ k!>֯z~>̜GVio|:'v< 0مd"~[ HrŒoj"Wn,8W+U~@Vۅazܠsvyf+Hz:kbů@< (*&p;`;/!=Y aE٩لZ O˹=,TٺX\q8>{K}3qq)W >:LYBT6+0jwƠ[>{'08`yYc~b#yu1ih<7tqWJYfeܐHQ"*V hfDIt"TR:#Q2ȠJf}1BOo'60m'2ubsO3: 4\e  檊ZqZ Uǐ15@`<[l^ЏwLWXvAm>MARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAAD(;0F~Քff_9 un=J0f"99KMpޜ)dPftph 4Ek}J+e~ܐSQrZEN5FQeKZ;:n߯"F.MXP2]w5U#Wʼn $5Cakz$bkgzc0@)ߊBlqz>7%5N=`D[,|@6B1;vYW2ii8mk%-7E.(&hz*Ç+G X)giۋR[s5bRl9Kx֛S@LkclVU2Slj\+$߸E+԰k )&H lڷ@8Lfm"0TGz{NlWy*y:H֎)'Pa͸57D`3F$JP,#o+29$8KB<)Vў ,Ө, b'Qb l4|-xV {q󀻯M)^{_{ՑZ$tvq=M(&~#F(EGZJd-ӌE5Ī5ⶱ/$Ċq/<F#t5R B/k~!G`'[%N _@lyЂsuJ 9g]̲Zhu ܻ2}y~%rO}vKbQmyH8nW1^k!\@;P҈4ō8}d1ѽlcL{ݯ[PqQ:M;Y)֍˗z!rCymBKYu-8ًE1k"5FdvG`>8fi;2MJi${[cFifC\[)QaĢ#n1.o#rP#=p%Z"YnZ*РHF*qU 3W%8>Ȗޫ0_VPE2BIF0u0JUcY]i{:@1E$4%,*I D`%@M!+19(Ӓ65dq1 (DZ,(pw4ULU!r`FOC<gRI$hz\-^qh*nSo;/;rq'= C Cq_@-9VsNL/2劵u0XuEv@Bm}n`0]0wS SQ\=00lx['|849m` Ț]ܯ_rzfNy JhmWyzc.6KWN' sPi0~ʖɍsx% ת8 QQf:\F;!lrļ~%D#b:ЯXC^VRQfkE0Ų+^2k4^昚߆ ٧Aǡ~AR1\_~So&[DVQZ'RJ)aChx;i3G +bTוtaM^6Lye(}405yWu:UUN, Q:3ͼ -v 0El Ъ[EwExݍLPBfFUfn.*A^IMYӱldk_ V7 3 ѕo99{io#ǐwi(KJ1zǢlU(Qc+v`Rh%sL7F]t"yxY,1~>_c*V"ϑ`S^RM@iz+*by>&=b7Kneq`m+׺|;gԀ8_3MO'(E?yr[& x/cT 5{J3PΗj}2UB@p`B9H`'\P9}{\N!6F}Tb5)Rx XekRepdick^b; &U?:?Sٟ8n r? Zݛ%<7g`|3:~4G<`CD 9@YK%f^Q>Sd&ٙE ־s =় 8Gu5"v  FwZT,xN OCYly|4E4<8Muo ygE t:?-&HV/*ҧ*$jJX"pFmV Zj2ŽߧP]j\va]]U:q@AbʒBJU :ʙ/eHp_S(%9)C6%FBZ&qh8&/TQ{>E޼4Z(i"> >y/V0 /M HQezcp*op*OV6n)g)Q6Q=$c*Bƚ ?.&+XgEܚoYgL|߅l& I/ѡI'> ~:\@/w8V|79gv"IpWВ k!>֯z~>̜GVio|:'v< 0مd"~[ HrŒoj"Wn,8W+U~@Vۅazܠsvyf+Hz:kbů@< (*&p;`;/!=Y aE٩لZ O˹=,TٺX\q8>{K}3qq)W >:LYBT6+0jwƠ[>{'08`yYc~b#yu1ih<7tqWJYfeܐHQ"*V hfDIt"TR:#Q2ȠJf}1BOo'60m'2ubsO3: 4\e  檊ZqZ Uǐ15@`<[l^ЏwLWXvAm>3Xߐo˫NqH?l҅a\T.ګ5InNPU9A`-vgx}/Fhzt-^XBhfk#:#t4Ę3GivG-4ZWuϒ?ꌋ A͇9YcRB415^˒G~d@՗UH@b?GG۳qԔ>Hꆖ%=[3Y CK8r,Kg Z+"JgnLEfd,͒_r`xrm뱃l⳽Nk̗q8k(Ȟt!,6Y.yp?-g9T[++ GGV-~"J~Qt0%zHϷvY 6͇y(doޠ7(>|/qc5J"$jiV!bЈ5k$y!) wX7̀Y}&Z yVeO[fHWboN} XС|fvAk C\H^lO*P9cR*ىD6? 41()6 8\؉@A=#2(TTَFB 8Y3hT23H[e!w 7Z ~YNeP6秛cȾď<0_yzl7͇ L d}P!2 A7J<#w2oDjzH2 ^{۾sg#wƱhڛ.j~6&^]hwcTRwCnRZ1$=ŋԎ7@,D bh2fL#aYj_+a_9A+fB>(H Y  ?mlZxZ\l6/V$K0'# .ND2+GFj: õWXm@0`\qބrL &B1 s:JQC XR*Q,tƉYw5Rj!ż0ίab&S|-KdBP[5N۵- <_PK^bH29iPbpyQ y[֡ڃ[ a" =F 0#I-&m2uOP&8<U==gRw>9rאg4ZBԳhɗ/R8RĪzX'\.m,2?jO{LFC@/#ǵ?0el to]Idp˕1ReQuBuQ +ET 46- Oqѷe=Nf0[Tv<%֌*{h,CkZ \!ӪɉW*#R1yX-;6sBBR1BrzEN ~9C\8- 4HHT h~a>^qG32$tqw  SYb0C UK@h}晤<Ϥ6;#G`<X*k3EǀCpp[*U'gݒ1; 8ePΘMEQJHSRU8EHOW+ۄlODX\LY)jk1Q idT҂{9I`i!ÉcD,*!{#vr0%_a6L@s0`h`s3v] QU]?Ԗ9E{HZt\tMsofd4]<>zySrhZùp3&v_t Kh3/6Vt. Tiw_u/q 0v` -ł]FtacŦđ sxwu!>)Ҿ͉{?safecopy-1.7/test/test6/test4.dat0000644000175100001440000005000011202053544015775 0ustar ravenusersŁcA< B줡YW#G`=m|^@1q3|Mf Si+HبV!BXw =vEgSf6$FW/~$5ìaN{:3{nսQ` #$׍(v_n""P#4ܕ{ Gc/DjLVŞ#LeA׭gV͊\?JE\;SAMcJZ RA%ߗdi =(@L9dj\l(3ZDQOkK3އjZ 3@An(GCZ9X'k*.zɘں㆕6Ƨ0\؅D5G#eTOPf'xoW6o` 4RGLv Eh$s7[dheuUm2RNU6\2As.akc ƬS9ڵX[ŮN1l9R%LwKbHD;c86=C([KZfd xg;LKWz'MwyGᱚE\}oi Gc+`v9eɹikʠn)p8X(bI)Ѐloטк?Rl\rdhUWCV1uȂV?3U`a :c[*^j +K, ѶrcqcJ<=AczgzNL }__nQ3dF0#u?$S/-\a7RDN!zZ% ۾Ppu[ >!Z%+p$t=rW~ǃgAبyf;`oPUiIZ*΅M&VY/ps{ex[^+[y1d|CACk:ȬՉS夐\04愞^ReɎMѼb\]>\F1[+RBMI¾-}54HufɱYRlF]cxYKaDSmcr4y[~^Էig:1\1 ZX.x%_h*g;tX$'#ne;+z )8hڠd&,W":*rs0ɴ[ v7>clO6N<$?$"ŒVwvL]7lBd6#Q^T4O@Թυǃa*1;1d?d+>` D׭yiI|+h aD{9(7h*[Z97R%xQI\^,W"<di=Bwbd x wVJ $Єȵ>޲3TJŷWp1F}K7 L{A꺫r(c,E<>so_#Ak7炊*=:P!?Jk)MARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAAD OCYly|4E4<8Muo ygE t:?-&HV/*ҧ*$jJX"pFmV Zj2ŽߧP]j\va]]U:q@AbʒBJU :ʙ/eHp_S(%9)C6%FBZ&qh8&/TQ{>E޼4Z(i"> >y/V0 /M HQezcp*op*OV6n)g)Q6Q=$c*Bƚ ?.&+XgEܚoYgL|߅l& I/ѡI'> ~:\@/w8V|79gv"IpWВ k!>֯z~>̜GVio|:'v< 0مd"~[ HrŒoj"Wn,8W+U~@Vۅazܠsvyf+Hz:kbů@< (*&p;`;/!=Y aE٩لZ O˹=,TٺX\q8>{K}3qq)W >:LYBT6+0jwƠ[>{'08`yYc~b#yu1ih<7tqWJYfeܐHQ"*V hfDIt"TR:#Q2ȠJf}1BOo'60m'2ubsO3: 4\e  檊ZqZ Uǐ15@`<[l^ЏwLWXvAm>MARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAAD(;0F~Քff_9 un=J0f"99KMpޜ)dPftph 4Ek}J+e~ܐSQrZEN5FQeKZ;:n߯"F.MXP2]w5U#Wʼn $5Cakz$bkgzc0@)ߊBlqz>7%5N=`D[,|@6B1;vYW2ii8mk%-7E.(&hz*Ç+G X)giۋR[s5bRl9Kx֛S@LkclVU2Slj\+$߸E+԰k )&H lڷ@8Lfm"0TGz{NlWy*y:H֎)'Pa͸57D`3F$JP,#o+29$8KB<)Vў ,Ө, b'Qb l4|-xV {q󀻯M)^{_{ՑZ$tvq=M(&~#F(EGZJd-ӌE5Ī5ⶱ/$Ċq/<F#t5R B/k~!G`'[%N _@lyЂsuJ 9g]̲Zhu ܻ2}y~%rO}vKbQmyH8nW1^k!\@;P҈4ō8}d1ѽlcL{ݯ[PqQ:M;Y)֍˗z!rCymBKYu-8ًE1k"5FdvG`>8fi;2MJi${[cFifC\[)QaĢ#n1.o#rP#=p%Z"YnZ*РHF*qU 3W%8>Ȗޫ0_VPE2BIF0u0JUcY]i{:@1E$4%,*I D`%@M!+19(Ӓ65dq1 (DZ,(pw4ULU!r`FOC<gRI$hz\-^qh*nSo;/;rq'= C Cq_@-9VsNL/2劵u0XuEv@Bm}n`0]0wS SQ\=00lx['|849m` Ț]ܯ_rzfNy JhmWyzc.6KWN' sPi0~ʖɍsx% ת8 QQf:\F;!lrļ~%D#b:ЯXC^VRQfkE0Ų+^2k4^昚߆ ٧Aǡ~AR1\_~So&[DVQZ'RJ)aChx;i3G +bTוtaM^6Lye(}405yWu:UUN, Q:3ͼ -v 0El Ъ[EwExݍLPBfFUfn.*A^IMYӱldk_ V7 3 ѕo99{io#ǐwi(KJ1zǢlU(Qc+v`Rh%sL7F]t"yxY,1~>_c*V"ϑ`S^RM@iz+*by>&=b7Kneq`m+׺|;gԀ8_3MO'(E?yr[& x/cT 5{J3PΗj}2UB@p`B9H`'\P9}{\N!6F}Tb5)Rx XekRepdick^b; &U?:?Sٟ8n r? Zݛ%<7g`|3:~4G<`CD 9@YK%f^Q>Sd&ٙE ־s =় 8Gu5"v  FwZT,xN OCYly|4E4<8Muo ygE t:?-&HV/*ҧ*$jJX"pFmV Zj2ŽߧP]j\va]]U:q@AbʒBJU :ʙ/eHp_S(%9)C6%FBZ&qh8&/TQ{>E޼4Z(i"> >y/V0 /M HQezcp*op*OV6n)g)Q6Q=$c*Bƚ ?.&+XgEܚoYgL|߅l& I/ѡI'> ~:\@/w8V|79gv"IpWВ k!>֯z~>̜GVio|:'v< 0مd"~[ HrŒoj"Wn,8W+U~@Vۅazܠsvyf+Hz:kbů@< (*&p;`;/!=Y aE٩لZ O˹=,TٺX\q8>{K}3qq)W >:LYBT6+0jwƠ[>{'08`yYc~b#yu1ih<7tqWJYfeܐHQ"*V hfDIt"TR:#Q2ȠJf}1BOo'60m'2ubsO3: 4\e  檊ZqZ Uǐ15@`<[l^ЏwLWXvAm>3Xߐo˫NqH?l҅a\T.ګ5InNPU9A`-vgx}/Fhzt-^XBhfk#:#t4Ę3GivG-4ZWuϒ?ꌋ A͇9YcRB415^˒G~d@՗UH@b?GG۳qԔ>Hꆖ%=[3Y CK8r,Kg Z+"JgnLEfd,͒_r`xrm뱃l⳽Nk̗q8k(Ȟt!,6Y.yp?-g9T[++ GGV-~"J~Qt0%zHϷvY 6͇y(doޠ7(>|/qc5J"$jiV!bЈ5k$y!) wX7̀Y}&Z yVeO[fHWboN} XС|fvAk C\H^lO*P9cR*ىD6? 41()6 8\؉@A=#2(TTَFB 8Y3hT23H[e!w 7Z ~YNeP6秛cȾď<0_yzl7͇ L d}P!2 A7J<#w2oDjzH2 ^{۾sg#wƱhڛ.j~6&^]hwcTRwCnRZ1$=ŋԎ7@,D bh2fL#aYj_+a_9A+fB>(H Y  ?mlZxZ\l6/V$K0'# .ND2+GFj: õWXm@0`\qބrL &B1 s:JQC XR*Q,tƉYw5Rj!ż0ίab&S|-KdBP[5N۵- <_PK^bH29iPbpyQ y[֡ڃ[ a" =F 0#I-&m2uOP&8<U==gRw>9rאg4ZBԳhɗ/R8RĪzX'\.m,2?jO{LFC@/#ǵ?0el to]Idp˕1ReQuBuQ +ET 46- Oqѷe=Nf0[Tv<%֌*{h,CkZ \!ӪɉW*#R1yX-;6sBBR1BrzEN ~9C\8- 4HHT h~a>^qG32$tqw  SYb0C UK@h}晤<Ϥ6;#G`<X*k3EǀCpp[*U'gݒ1; 8ePΘMEQJHSRU8EHOW+ۄlODX\LY)jk1Q idT҂{9I`i!ÉcD,*!{#vr0%_a6L@s0`h`s3v] QU]?Ԗ9E{HZt\tMsofd4]<>zySrhZùp3&v_t Kh3/6Vt. Tiw_u/q 0v` -ł]FtacŦđ sxwu!>)Ҿ͉{?safecopy-1.7/test/test9/0000755000175100001440000000000011726756524014273 5ustar ravenuserssafecopy-1.7/test/test9/simulator.cfg0000644000175100001440000000024511202053544016751 0ustar ravenusersblocksize=1024 filesize=20480 source=test.dat softfailcount=2 hardfail=2 hardfail=4 hardfail=5 hardfail=8 hardfail=9 hardfail=10 hardfail=11 hardfail=12 hardfail=13 safecopy-1.7/test/test9/test1.dat0000644000175100001440000005000011202053544015775 0ustar ravenusersŁcA< B줡YW#G`=m|^@1q3|Mf Si+HبV!BXw =vEgSf6$FW/~$5ìaN{:3{nսQ` #$׍(v_n""P#4ܕ{ Gc/DjLVŞ#LeA׭gV͊\?JE\;SAMcJZ RA%ߗdi =(@L9dj\l(3ZDQOkK3އjZ 3@An(GCZ9X'k*.zɘں㆕6Ƨ0\؅D5G#eTOPf'xoW6o` 4RGLv Eh$s7[dheuUm2RNU6\2As.akc ƬS9ڵX[ŮN1l9R%LwKbHD;c86=C([KZfd xg;LKWz'MwyGᱚE\}oi Gc+`v9eɹikʠn)p8X(bI)Ѐloטк?Rl\rdhUWCV1uȂV?3U`a :c[*^j +K, ѶrcqcJ<=AczgzNL }__nQ3dF0#u?$S/-\a7RDN!zZ% ۾Ppu[ >!Z%+p$t=rW~ǃgAبyf;`oPUiIZ*΅M&VY/ps{ex[^+[y1d|CACk:ȬՉS夐\04愞^ReɎMѼb\]>\F1[+RBMI¾-}54HufɱYRlF]cxYKaDSmcr4y[~^Էig:1\1 ZX.x%_h*g;tX$'#ne;+z )8hڠd&,W":*rs0ɴ[ v7>clO6N<$?$"ŒVwvL]7lBd6#Q^T4O@Թυǃa*1;1d?d+>` D׭yiI|+h aD{9(7h*[Z97R%xQI\^,W"<di=Bwbd x wVJ $Єȵ>޲3TJŷWp1F}K7 L{A꺫r(c,E<>so_#Ak7炊*=:P!?Jk)Rr7咥F:yi# Պx= izk7/1V6'? x^<3n/ʨn|}PaO/{= Sa6M> ܻ2}y~%rO}vKbQmyH8nW1^k!\@;P҈4ō8}d1ѽlcL{ݯ[PqQ:M;Y)֍˗z!rCymBKYu-8ًE1k"5FdvG`>8fi;2MJi${[cFifC\[)QaĢ#n1.o#rP#=p%Z"YnZ*РHF*qU 3W%8>Ȗޫ0_VPE2BIF0u0JUcY]i{:@1E$4%,*I D`%@M!+19(Ӓ65dq1 (DZ,(pw4ULU!r`FOC<gRI$hz\-^qh*nSo;/;rq'= C Cq_@-9VsNL/2劵u0XuEv@Bm}n`0]0wS SQ\=00lx['|849m` Ț]ܯ_rzfNy JhmWyzc.6KWN' sPi0~ʖɍsx% ת8 QQf:\F;!lrļ~%D#b:ЯXC^VRQfkE0Ų+^2k4^昚߆ ٧Aǡ~AR1\_~So&[DVQZ'RJ)aChx;i3G +bTוtaM^6Lye(}405yWu:UUN, Q:3ͼ -v 0El Ъ[EwExݍLPBfFUfn.*A^IMYӱldk_ V7 3 ѕo99{io#ǐwi(KJ1zǢlU(Qc+v`Rh%sL7F]t"yxY,1~>_c*V"ϑ`S^RM@iz+*by>&=b7Kneq`m+׺|;gԀ8_3MO'(E?yr[& x/cT 5{J3PΗj}2UB@p`B9H`'\P9}{\N!6F}Tb5)Rx XekRepdick^b; &U?:?Sٟ8n r? Zݛ%<7g`|3:~4G<`CD 9@YK%f^Q>Sd&ٙE ־s =় 8Gu5"v  FwZT,xN OCYly|4E4<8Muo ygE t:?-&HV/*ҧ*$jJX"pFmV Zj2ŽߧP]j\va]]U:q@AbʒBJU :ʙ/eHp_S(%9)C6%FBZ&qh8&/TQ{>E޼4Z(i"> >y/V0 /M HQezcp*op*OV6n)g)Q6Q=$c*Bƚ ?.&+XgEܚoYgL|߅l& I/ѡI'> ~:\@/w8V|79gv"IpWВ k!>֯z~>̜GVio|:'v< 0مd"~[ HrŒoj"Wn,8W+U~@Vۅazܠsvyf+Hz:kbů@< (*&p;`;/!=Y aE٩لZ O˹=,TٺX\q8>{K}3qq)W >:LYBT6+0jwƠ[>{'08`yYc~b#yu1ih<7tqWJYfeܐHQ"*V hfDIt"TR:#Q2ȠJf}1BOo'60m'2ubsO3: 4\e  檊ZqZ Uǐ15@`<[l^ЏwLWXvAm>WXm@0`\qބrL &B1 s:JQC XR*Q,tƉYw5Rj!ż0ίab&S|-KdBP[5N۵- <_PK^bH29iPbpyQ y[֡ڃ[ a" =F 0#I-&m2uOP&8<U==gRw>9rאg4ZBԳhɗ/R8RĪzX'\.m,2?jO{LFC@/#ǵ?0el to]Idp˕1ReQuBuQ +ET 46- Oqѷe=Nf0[Tv<%֌*{h,CkZ \!ӪɉW*#R1yX-;6sBBR1BrzEN ~9C\8- 4HHT h~a>^qG32$tqw  SYb0C UK@h}晤<Ϥ6;#G`<X*k3EǀCpp[*U'gݒ1; 8ePΘMEQJHSRU8EHOW+ۄlODX\LY)jk1Q idT҂{9I`i!ÉcD,*!{#vr0%_a6L@s0`h`s3v] QU]?Ԗ9E{HZt\tMsofd4]<>zySrhZùp3&v_t Kh3/6Vt. Tiw_u/q 0v` -ł]FtacŦđ sxwu!>)Ҿ͉{?safecopy-1.7/test/test9/test2.dat0000644000175100001440000005000011202053544015776 0ustar ravenusersŁcA< B줡YW#G`=m|^@1q3|Mf Si+HبV!BXw =vEgSf6$FW/~$5ìaN{:3{nսQ` #$׍(v_n""P#4ܕ{ Gc/DjLVŞ#LeA׭gV͊\?JE\;SAMcJZ RA%ߗdi =(@L9dj\l(3ZDQOkK3އjZ 3@An(GCZ9X'k*.zɘں㆕6Ƨ0\؅D5G#eTOPf'xoW6o` 4RGLv Eh$s7[dheuUm2RNU6\2As.akc ƬS9ڵX[ŮN1l9R%LwKbHD;c86=C([KZfd xg;LKWz'MwyGᱚE\}oi Gc+`v9eɹikʠn)p8X(bI)Ѐloטк?Rl\rdhUWCV1uȂV?3U`a :c[*^j +K, ѶrcqcJ<=AczgzNL }__nQ3dF0#u?$S/-\a7RDN!zZ% ۾Ppu[ >!Z%+p$t=rW~ǃgAبyf;`oPUiIZ*΅M&VY/ps{ex[^+[y1d|CACk:ȬՉS夐\04愞^ReɎMѼb\]>\F1[+RBMI¾-}54HufɱYRlF]cxYKaDSmcr4y[~^Էig:1\1 ZX.x%_h*g;tX$'#ne;+z )8hڠd&,W":*rs0ɴ[ v7>clO6N<$?$"ŒVwvL]7lBd6#Q^T4O@Թυǃa*1;1d?d+>` D׭yiI|+h aD{9(7h*[Z97R%xQI\^,W"<di=Bwbd x wVJ $Єȵ>޲3TJŷWp1F}K7 L{A꺫r(c,E<>so_#Ak7炊*=:P!?Jk)Rr7咥F:yi# Պx= izk7/1V6'? x^<3n/ʨn|}PaO/{= Sa6M> ܻ2}y~%rO}vKbQmyH8nW1^k!\@;P҈4ō8}d1ѽlcL{ݯ[PqQ:M;Y)֍˗z!rCymBKYu-8ًE1k"5FdvG`>8fi;2MJi${[cFifC\[)QaĢ#n1.o#rP#=p%Z"YnZ*РHF*qU 3W%8>Ȗޫ0_VPE2BIF0u0JUcY]i{:@1E$4%,*I D`%@M!+19(Ӓ65dq1 (DZ,(pw4ULU!r`FOC<gRI$hz\-^qh*nSo;/;rq'= C Cq_@-9VsNL/2劵u0XuEv@Bm}n`0]0wS SQ\=00lx['|849m` Ț]ܯ_rzfNy JhmWyzc.6KWN' sPi0~ʖɍsx% ת8 QQf:\F;!lrļ~%D#b:ЯXC^VRQfkE0Ų+^2k4^昚߆ ٧Aǡ~AR1\_~So&[DVQZ'RJ)aChx;i3G +bTוtaM^6Lye(}405yWu:UUN, Q:3ͼ -v 0El Ъ[EwExݍLPBfFUfn.*A^IMYӱldk_ V7 3 ѕo99{io#ǐwi(KJ1zǢlU(Qc+v`Rh%sL7F]t"yxY,1~>_c*V"ϑ`S^RM@iz+*by>&=b7Kneq`m+׺|;gԀ8_3MO'(E?yr[& x/cT 5{J3PΗj}2UB@p`B9H`'\P9}{\N!6F}Tb5)Rx XekRepdick^b; &U?:?Sٟ8n r? Zݛ%<7g`|3:~4G<`CD 9@YK%f^Q>Sd&ٙE ־s =় 8Gu5"v  FwZT,xN OCYly|4E4<8Muo ygE t:?-&HV/*ҧ*$jJX"pFmV Zj2ŽߧP]j\va]]U:q@AbʒBJU :ʙ/eHp_S(%9)C6%FBZ&qh8&/TQ{>E޼4Z(i"> >y/V0 /M HQezcp*op*OV6n)g)Q6Q=$c*Bƚ ?.&+XgEܚoYgL|߅l& I/ѡI'> ~:\@/w8V|79gv"IpWВ k!>֯z~>̜GVio|:'v< 0مd"~[ HrŒoj"Wn,8W+U~@Vۅazܠsvyf+Hz:kbů@< (*&p;`;/!=Y aE٩لZ O˹=,TٺX\q8>{K}3qq)W >:LYBT6+0jwƠ[>{'08`yYc~b#yu1ih<7tqWJYfeܐHQ"*V hfDIt"TR:#Q2ȠJf}1BOo'60m'2ubsO3: 4\e  檊ZqZ Uǐ15@`<[l^ЏwLWXvAm>WXm@0`\qބrL &B1 s:JQC XR*Q,tƉYw5Rj!ż0ίab&S|-KdBP[5N۵- <_PK^bH29iPbpyQ y[֡ڃ[ a" =F 0#I-&m2uOP&8<U==gRw>9rאg4ZBԳhɗ/R8RĪzX'\.m,2?jO{LFC@/#ǵ?0el to]Idp˕1ReQuBuQ +ET 46- Oqѷe=Nf0[Tv<%֌*{h,CkZ \!ӪɉW*#R1yX-;6sBBR1BrzEN ~9C\8- 4HHT h~a>^qG32$tqw  SYb0C UK@h}晤<Ϥ6;#G`<X*k3EǀCpp[*U'gݒ1; 8ePΘMEQJHSRU8EHOW+ۄlODX\LY)jk1Q idT҂{9I`i!ÉcD,*!{#vr0%_a6L@s0`h`s3v] QU]?Ԗ9E{HZt\tMsofd4]<>zySrhZùp3&v_t Kh3/6Vt. Tiw_u/q 0v` -ł]FtacŦđ sxwu!>)Ҿ͉{?safecopy-1.7/test/test9/test.dat0000644000175100001440000005000011202053544015714 0ustar ravenusersŁcA< B줡YW#G`=m|^@1q3|Mf Si+HبV!BXw =vEgSf6$FW/~$5ìaN{:3{nսQ` #$׍(v_n""P#4ܕ{ Gc/DjLVŞ#LeA׭gV͊\?JE\;SAMcJZ RA%ߗdi =(@L9dj\l(3ZDQOkK3އjZ 3@An(GCZ9X'k*.zɘں㆕6Ƨ0\؅D5G#eTOPf'xoW6o` 4RGLv Eh$s7[dheuUm2RNU6\2As.akc ƬS9ڵX[ŮN1l9R%LwKbHD;c86=C([KZfd xg;LKWz'MwyGᱚE\}oi Gc+`v9eɹikʠn)p8X(bI)Ѐloטк?Rl\rdhUWCV1uȂV?3U`a :c[*^j +K, ѶrcqcJ<=AczgzNL }__nQ3dF0#u?$S/-\a7RDN!zZ% ۾Ppu[ >!Z%+p$t=rW~ǃgAبyf;`oPUiIZ*΅M&VY/ps{ex[^+[y1d|CACk:ȬՉS夐\04愞^ReɎMѼb\]>\F1[+RBMI¾-}54HufɱYRlF]cxYKaDSmcr4y[~^Էig:1\1 ZX.x%_h*g;tX$'#ne;+z )8hڠd&,W":*rs0ɴ[ v7>clO6N<$?$"ŒVwvL]7lBd6#Q^T4O@Թυǃa*1;1d?d+>` D׭yiI|+h aD{9(7h*[Z97R%xQI\^,W"<di=Bwbd x wVJ $Єȵ>޲3TJŷWp1F}K7 L{A꺫r(c,E<>so_#Ak7炊*=:P!?Jk)og y(<<|`,/&zQt6lv40զcfU[ua(.8$RG>)8]xY0hNyD82dzv ӟ hn^%ڽsx8_(og?K>x8Fr=BU:v'>,,xfk/jZ͋NkYkTʂM,VK%vkA!5NR'c-<6Yf^Q4 p `' g}1ˏdx74qӧ9:iɰW=`)Cgw[:߀,{A &&D_Z_y,fk55$W ;+F:~8Hph7b E=QOw4)^|كvD'\˸!İ|gn|Hw+) ([t-G5'W)ëVd$jjvA$o֩jI"=u: Y'Άĩ&'J۵mdi.O=PlW)So\s9Vj{c쩄NKBS@*x4+h;z-]~Y+o$_ZX.h"]7;2M`a%ҪX69b^ q79r8("@InZ20ƣvi* 𔛖vr`pbb=gO~T}ނãIoI 'h ϧq ]: OB(;0F~Քff_9 un=J0f"99KMpޜ)dPftph 4Ek}J+e~ܐSQrZEN5FQeKZ;:n߯"F.MXP2]w5U#Wʼn $5Cakz$bkgzc0@)ߊBlqz>7%5N=`D[,|@6B1;vYW2ii8mk%-7E.(&hz*Ç+G X)giۋR[s5bRl9Kx֛S@LkclVU2Slj\+$߸E+԰k )&H lڷ@8Lfm"0TGz{NlWy*y:H֎)'Pa͸57D`3F$JP,#o+29$8KB<)Vў ,Ө, b'Qb l4|-xV {q󀻯M)^{_{ՑZ$tvq=M(&~#F(EGZJd-ӌE5Ī5ⶱ/$Ċq/<F#t5R B/k~!G`'[%N _@lyЂsuJ 9g]̲Zhu ܻ2}y~%rO}vKbQmyH8nW1^k!\@;P҈4ō8}d1ѽlcL{ݯ[PqQ:M;Y)֍˗z!rCymBKYu-8ًE1k"5FdvG`>8fi;2MJi${[cFifC\[)QaĢ#n1.o#rP#=p%Z"YnZ*РHF*qU 3W%8>Ȗޫ0_VPE2BIF0u0JUcY]i{:@1E$4%,*I D`%@M!+19(Ӓ65dq1 (DZ,(pw4ULU!r`FOC<gRI$hz\-^qh*nSo;/;rq'= C Cq_@-9VsNL/2劵u0XuEv@Bm}n`0]0wS SQ\=00lx['|849m` Ț]ܯ_rzfNy JhmWyzc.6KWN' sPi0~ʖɍsx% ת8 QQf:\F;!lrļ~%D#b:ЯXC^VRQfkE0Ų+^2k4^昚߆ ٧Aǡ~AR1\_~So&[DVQZ'RJ)aChx;i3G +bTוtaM^6Lye(}405yWu:UUN, Q:3ͼ -v 0El Ъ[EwExݍLPBfFUfn.*A^IMYӱldk_ V7 3 ѕo99{io#ǐwi(KJ1zǢlU(Qc+v`Rh%sL7F]t"yxY,1~>_c*V"ϑ`S^RM@iz+*by>&=b7Kneq`m+׺|;gԀ8_3MO'(E?yr[& x/cT 5{J3PΗj}2UB@p`B9H`'\P9}{\N!6F}Tb5)Rx XekRepdick^b; &U?:?Sٟ8n r? Zݛ%<7g`|3:~4G<`CD 9@YK%f^Q>Sd&ٙE ־s =় 8Gu5"v  FwZT,xN OCYly|4E4<8Muo ygE t:?-&HV/*ҧ*$jJX"pFmV Zj2ŽߧP]j\va]]U:q@AbʒBJU :ʙ/eHp_S(%9)C6%FBZ&qh8&/TQ{>E޼4Z(i"> >y/V0 /M HQezcp*op*OV6n)g)Q6Q=$c*Bƚ ?.&+XgEܚoYgL|߅l& I/ѡI'> ~:\@/w8V|79gv"IpWВ k!>֯z~>̜GVio|:'v< 0مd"~[ HrŒoj"Wn,8W+U~@Vۅazܠsvyf+Hz:kbů@< (*&p;`;/!=Y aE٩لZ O˹=,TٺX\q8>{K}3qq)W >:LYBT6+0jwƠ[>{'08`yYc~b#yu1ih<7tqWJYfeܐHQ"*V hfDIt"TR:#Q2ȠJf}1BOo'60m'2ubsO3: 4\e  檊ZqZ Uǐ15@`<[l^ЏwLWXvAm>3Xߐo˫NqH?l҅a\T.ګ5InNPU9A`-vgx}/Fhzt-^XBhfk#:#t4Ę3GivG-4ZWuϒ?ꌋ A͇9YcRB415^˒G~d@՗UH@b?GG۳qԔ>Hꆖ%=[3Y CK8r,Kg Z+"JgnLEfd,͒_r`xrm뱃l⳽Nk̗q8k(Ȟt!,6Y.yp?-g9T[++ GGV-~"J~Qt0%zHϷvY 6͇y(doޠ7(>|/qc5J"$jiV!bЈ5k$y!) wX7̀Y}&Z yVeO[fHWboN} XС|fvAk C\H^lO*P9cR*ىD6? 41()6 8\؉@A=#2(TTَFB 8Y3hT23H[e!w 7Z ~YNeP6秛cȾď<0_yzl7͇ L d}P!2 A7J<#w2oDjzH2 ^{۾sg#wƱhڛ.j~6&^]hwcTRwCnRZ1$=ŋԎ7@,D bh2fL#aYj_+a_9A+fB>(H Y  ?mlZxZ\l6/V$K0'# .ND2+GFj: õWXm@0`\qބrL &B1 s:JQC XR*Q,tƉYw5Rj!ż0ίab&S|-KdBP[5N۵- <_PK^bH29iPbpyQ y[֡ڃ[ a" =F 0#I-&m2uOP&8<U==gRw>9rאg4ZBԳhɗ/R8RĪzX'\.m,2?jO{LFC@/#ǵ?0el to]Idp˕1ReQuBuQ +ET 46- Oqѷe=Nf0[Tv<%֌*{h,CkZ \!ӪɉW*#R1yX-;6sBBR1BrzEN ~9C\8- 4HHT h~a>^qG32$tqw  SYb0C UK@h}晤<Ϥ6;#G`<X*k3EǀCpp[*U'gݒ1; 8ePΘMEQJHSRU8EHOW+ۄlODX\LY)jk1Q idT҂{9I`i!ÉcD,*!{#vr0%_a6L@s0`h`s3v] QU]?Ԗ9E{HZt\tMsofd4]<>zySrhZùp3&v_t Kh3/6Vt. Tiw_u/q 0v` -ł]FtacŦđ sxwu!>)Ҿ͉{?ŁcA< B줡YW#G`=m|^@1q3|Mf Si+HبV!BXw =vEgSf6$FW/~$5ìaN{:3{nսQ` #$׍(v_n""P#4ܕ{ Gc/DjLVŞ#LeA׭gV͊\?JE\;SAMcJZ RA%ߗdi =(@L9dj\l(3ZDQOkK3އjZ 3@An(GCZ9X'k*.zɘں㆕6Ƨ0\؅D5G#eTOPf'xoW6o` 4RGLv Eh$s7[dheuUm2RNU6\2As.akc ƬS9ڵX[ŮN1l9R%LwKbHD;c86=C([KZfd xg;LKWz'MwyGᱚE\}oi Gc+`v9eɹikʠn)p8X(bI)Ѐloטк?Rl\rdhUWCV1uȂV?3U`a :c[*^j +K, ѶrcqcJ<=AczgzNL }__nQ3dF0#u?$S/-\a7RDN!zZ% ۾Ppu[ >!Z%+p$t=rW~ǃgAبyf;`oPUiIZ*΅M&VY/ps{ex[^+[y1d|CACk:ȬՉS夐\04愞^ReɎMѼb\]>\F1[+RBMI¾-}54HufɱYRlF]cxYKaDSmcr4y[~^Էig:1\1 ZX.x%_h*g;tX$'#ne;+z )8hڠd&,W":*rs0ɴ[ v7>clO6N<$?$"ŒVwvL]7lBd6#Q^T4O@Թυǃa*1;1d?d+>` D׭yiI|+h aD{9(7h*[Z97R%xQI\^,W"<di=Bwbd x wVJ $Єȵ>޲3TJŷWp1F}K7 L{A꺫r(c,E<>so_#Ak7炊*=:P!?Jk)og y(<<|`,/&zQt6lv40զcfU[ua(.8$RG>)8]xY0hNyD82dzv ӟ hn^%ڽsx8_(og?K>x8Fr=BU:v'>,,xfk/jZ͋NkYkTʂM,VK%vkA!5NR'c-<6Yf^Q4 p `' g}1ˏdx74qӧ9:iɰW=`)Cgw[:߀,{A &&D_Z_y,fk55$W ;+F:~8Hph7b E=QOw4)^|كvD'\˸!İ|gn|Hw+) ([t-G5'W)ëVd$jjvA$o֩jI"=u: Y'Άĩ&'J۵mdi.O=PlW)So\s9Vj{c쩄NKBS@*x4+h;z-]~Y+o$_ZX.h"]7;2M`a%ҪX69b^ q79r8("@InZ20ƣvi* 𔛖vr`pbb=gO~T}ނãIoI 'h ϧq ]: OB(;0F~Քff_9 un=J0f"99KMpޜ)dPftph 4Ek}J+e~ܐSQrZEN5FQeKZ;:n߯"F.MXP2]w5U#Wʼn $5Cakz$bkgzc0@)ߊBlqz>7%5N=`D[,|@6B1;vYW2ii8mk%-7E.(&hz*Ç+G X)giۋR[s5bRl9Kx֛S@LkclVU2Slj\+$߸E+԰k )&H lڷ@8Lfm"0TGz{NlWy*y:H֎)'Pa͸57D`3F$JP,#o+29$8KB<)Vў ,Ө, b'Qb l4|-xV {q󀻯M)^{_{ՑZ$tvq=M(&~#F(EGZJd-ӌE5Ī5ⶱ/$Ċq/<F#t5R B/k~!G`'[%N _@lyЂsuJ 9g]̲Zhu ܻ2}y~%rO}vKbQmyH8nW1^k!\@;P҈4ō8}d1ѽlcL{ݯ[PqQ:M;Y)֍˗z!rCymBKYu-8ًE1k"5FdvG`>8fi;2MJi${[cFifC\[)QaĢ#n1.o#rP#=p%Z"YnZ*РHF*qU 3W%8>Ȗޫ0_VPE2BIF0u0JUcY]i{:@1E$4%,*I D`%@M!+19(Ӓ65dq1 (DZ,(pw4ULU!r`FOC<gRI$hz\-^qh*nSo;/;rq'= C Cq_@-9VsNL/2劵u0XuEv@Bm}n`0]0wS SQ\=00lx['|849m` Ț]ܯ_rzfNy JhmWyzc.6KWN' sPi0~ʖɍsx% ת8 QQf:\F;!lrļ~%D#b:ЯXC^VRQfkE0Ų+^2k4^昚߆ ٧Aǡ~AR1\_~So&[DVQZ'RJ)aChx;i3G +bTוtaM^6Lye(}405yWu:UUN, Q:3ͼ -v 0El Ъ[EwExݍLPBfFUfn.*A^IMYӱldk_ V7 3 ѕo99{io#ǐwi(KJ1zǢlU(Qc+v`Rh%sL7F]t"yxY,1~>_c*V"ϑ`S^RM@iz+*by>&=b7Kneq`m+׺|;gԀ8_3MO'(E?yr[& x/cT 5{J3PΗj}2UB@p`B9H`'\P9}{\N!6F}Tb5)Rx XekRepdick^b; &U?:?Sٟ8n r? Zݛ%<7g`|3:~4G<`CD 9@YK%f^Q>Sd&ٙE ־s =় 8Gu5"v  FwZT,xN OCYly|4E4<8Muo ygE t:?-&HV/*ҧ*$jJX"pFmV Zj2ŽߧP]j\va]]U:q@AbʒBJU :ʙ/eHp_S(%9)C6%FBZ&qh8&/TQ{>E޼4Z(i"> >y/V0 /M HQezcp*op*OV6n)g)Q6Q=$c*Bƚ ?.&+XgEܚoYgL|߅l& I/ѡI'> ~:\@/w8V|79gv"IpWВ k!>֯z~>̜GVio|:'v< 0مd"~[ HrŒoj"Wn,8W+U~@Vۅazܠsvyf+Hz:kbů@< (*&p;`;/!=Y aE٩لZ O˹=,TٺX\q8>{K}3qq)W >:LYBT6+0jwƠ[>{'08`yYc~b#yu1ih<7tqWJYfeܐHQ"*V hfDIt"TR:#Q2ȠJf}1BOo'60m'2ubsO3: 4\e  檊ZqZ Uǐ15@`<[l^ЏwLWXvAm>3Xߐo˫NqH?l҅a\T.ګ5InNPU9A`-vgx}/Fhzt-^XBhfk#:#t4Ę3GivG-4ZWuϒ?ꌋ A͇9YcRB415^˒G~d@՗UH@b?GG۳qԔ>Hꆖ%=[3Y CK8r,Kg Z+"JgnLEfd,͒_r`xrm뱃l⳽Nk̗q8k(Ȟt!,6Y.yp?-g9T[++ GGV-~"J~Qt0%zHϷvY 6͇y(doޠ7(>|/qc5J"$jiV!bЈ5k$y!) wX7̀Y}&Z yVeO[fHWboN} XС|fvAk C\H^lO*P9cR*ىD6? 41()6 8\؉@A=#2(TTَFB 8Y3hT23H[e!w 7Z ~YNeP6秛cȾď<0_yzl7͇ L d}P!2 A7J<#w2oDjzH2 ^{۾sg#wƱhڛ.j~6&^]hwcTRwCnRZ1$=ŋԎ7@,D bh2fL#aYj_+a_9A+fB>(H Y  ?mlZxZ\l6/V$K0'# .ND2+GFj: õWXm@0`\qބrL &B1 s:JQC XR*Q,tƉYw5Rj!ż0ίab&S|-KdBP[5N۵- <_PK^bH29iPbpyQ y[֡ڃ[ a" =F 0#I-&m2uOP&8<U==gRw>9rאg4ZBԳhɗ/R8RĪzX'\.m,2?jO{LFC@/#ǵ?0el to]Idp˕1ReQuBuQ +ET 46- Oqѷe=Nf0[Tv<%֌*{h,CkZ \!ӪɉW*#R1yX-;6sBBR1BrzEN ~9C\8- 4HHT h~a>^qG32$tqw  SYb0C UK@h}晤<Ϥ6;#G`<X*k3EǀCpp[*U'gݒ1; 8ePΘMEQJHSRU8EHOW+ۄlODX\LY)jk1Q idT҂{9I`i!ÉcD,*!{#vr0%_a6L@s0`h`s3v] QU]?Ԗ9E{HZt\tMsofd4]<>zySrhZùp3&v_t Kh3/6Vt. Tiw_u/q 0v` -ł]FtacŦđ sxwu!>)Ҿ͉{?safecopy-1.7/test/test9/test3.dat0000644000175100001440000005000011202053544015777 0ustar ravenusersŁcA< B줡YW#G`=m|^@1q3|Mf Si+HبV!BXw =vEgSf6$FW/~$5ìaN{:3{nսQ` #$׍(v_n""P#4ܕ{ Gc/DjLVŞ#LeA׭gV͊\?JE\;SAMcJZ RA%ߗdi =(@L9dj\l(3ZDQOkK3އjZ 3@An(GCZ9X'k*.zɘں㆕6Ƨ0\؅D5G#eTOPf'xoW6o` 4RGLv Eh$s7[dheuUm2RNU6\2As.akc ƬS9ڵX[ŮN1l9R%LwKbHD;c86=C([KZfd xg;LKWz'MwyGᱚE\}oi Gc+`v9eɹikʠn)p8X(bI)Ѐloטк?Rl\rdhUWCV1uȂV?3U`a :c[*^j +K, ѶrcqcJ<=AczgzNL }__nQ3dF0#u?$S/-\a7RDN!zZ% ۾Ppu[ >!Z%+p$t=rW~ǃgAبyf;`oPUiIZ*΅M&VY/ps{ex[^+[y1d|CACk:ȬՉS夐\04愞^ReɎMѼb\]>\F1[+RBMI¾-}54HufɱYRlF]cxYKaDSmcr4y[~^Էig:1\1 ZX.x%_h*g;tX$'#ne;+z )8hڠd&,W":*rs0ɴ[ v7>clO6N<$?$"ŒVwvL]7lBd6#Q^T4O@Թυǃa*1;1d?d+>` D׭yiI|+h aD{9(7h*[Z97R%xQI\^,W"<di=Bwbd x wVJ $Єȵ>޲3TJŷWp1F}K7 L{A꺫r(c,E<>so_#Ak7炊*=:P!?Jk)(;0F~Քff_9 un=J0f"99KMpޜ)dPftph 4Ek}J+e~ܐSQrZEN5FQeKZ;:n߯"F.MXP2]w5U#Wʼn $5Cakz$bkgzc0@)ߊBlqz>7%5N=`D[,|@6B1;vYW2ii8mk%-7E.(&hz*Ç+G X)giۋR[s5bRl9Kx֛S@LkclVU2Slj\+$߸E+԰k )&H lڷ@8Lfm"0TGz{NlWy*y:H֎)'Pa͸57D`3F$JP,#o+29$8KB<)Vў ,Ө, b'Qb l4|-xV {q󀻯M)^{_{ՑZ$tvq=M(&~#F(EGZJd-ӌE5Ī5ⶱ/$Ċq/<F#t5R B/k~!G`'[%N _@lyЂsuJ 9g]̲Zhu ܻ2}y~%rO}vKbQmyH8nW1^k!\@;P҈4ō8}d1ѽlcL{ݯ[PqQ:M;Y)֍˗z!rCymBKYu-8ًE1k"5FdvG`>8fi;2MJi${[cFifC\[)QaĢ#n1.o#rP#=p%Z"YnZ*РHF*qU 3W%8>Ȗޫ0_VPE2BIF0u0JUcY]i{:@1E$4%,*I D`%@M!+19(Ӓ65dq1 (DZ,(pw4ULU!r`FOC<gRI$hz\-^qh*nSo;/;rq'= C Cq_@-9VsNL/2劵u0XuEv@Bm}n`0]0wS SQ\=00lx['|849m` Ț]ܯ_rzfNy JhmWyzc.6KWN' sPi0~ʖɍsx% ת8 QQf:\F;!lrļ~%D#b:ЯXC^VRQfkE0Ų+^2k4^昚߆ ٧Aǡ~AR1\_~So&[DVQZ'RJ)aChx;i3G +bTוtaM^6Lye(}405yWu:UUN, Q:3ͼ -v 0El Ъ[EwExݍLPBfFUfn.*A^IMYӱldk_ V7 3 ѕo99{io#ǐwi(KJ1zǢlU(Qc+v`Rh%sL7F]t"yxY,1~>_c*V"ϑ`S^RM@iz+*by>&=b7Kneq`m+׺|;gԀ8_3MO'(E?yr[& x/cT 5{J3PΗj}2UB@p`B9H`'\P9}{\N!6F}Tb5)Rx XekRepdick^b; &U?:?Sٟ8n r? Zݛ%<7g`|3:~4G<`CD 9@YK%f^Q>Sd&ٙE ־s =় 8Gu5"v  FwZT,xN OCYly|4E4<8Muo ygE t:?-&HV/*ҧ*$jJX"pFmV Zj2ŽߧP]j\va]]U:q@AbʒBJU :ʙ/eHp_S(%9)C6%FBZ&qh8&/TQ{>E޼4Z(i"> >y/V0 /M HQezcp*op*OV6n)g)Q6Q=$c*Bƚ ?.&+XgEܚoYgL|߅l& I/ѡI'> ~:\@/w8V|79gv"IpWВ k!>֯z~>̜GVio|:'v< 0مd"~[ HrŒoj"Wn,8W+U~@Vۅazܠsvyf+Hz:kbů@< (*&p;`;/!=Y aE٩لZ O˹=,TٺX\q8>{K}3qq)W >:LYBT6+0jwƠ[>{'08`yYc~b#yu1ih<7tqWJYfeܐHQ"*V hfDIt"TR:#Q2ȠJf}1BOo'60m'2ubsO3: 4\e  檊ZqZ Uǐ15@`<[l^ЏwLWXvAm>WXm@0`\qބrL &B1 s:JQC XR*Q,tƉYw5Rj!ż0ίab&S|-KdBP[5N۵- <_PK^bH29iPbpyQ y[֡ڃ[ a" =F 0#I-&m2uOP&8<U==gRw>9rאg4ZBԳhɗ/R8RĪzX'\.m,2?jO{LFC@/#ǵ?0el to]Idp˕1ReQuBuQ +ET 46- Oqѷe=Nf0[Tv<%֌*{h,CkZ \!ӪɉW*#R1yX-;6sBBR1BrzEN ~9C\8- 4HHT h~a>^qG32$tqw  SYb0C UK@h}晤<Ϥ6;#G`<X*k3EǀCpp[*U'gݒ1; 8ePΘMEQJHSRU8EHOW+ۄlODX\LY)jk1Q idT҂{9I`i!ÉcD,*!{#vr0%_a6L@s0`h`s3v] QU]?Ԗ9E{HZt\tMsofd4]<>zySrhZùp3&v_t Kh3/6Vt. Tiw_u/q 0v` -ł]FtacŦđ sxwu!>)Ҿ͉{?safecopy-1.7/test/test9/test1.badblocks0000644000175100001440000000002611202053544017154 0ustar ravenusers2 3 4 5 9 10 11 12 13 safecopy-1.7/test/test9/test3.badblocks0000644000175100001440000000002411202053544017154 0ustar ravenusers2 4 5 9 10 11 12 13 safecopy-1.7/test/test9/test.sh0000755000175100001440000001035411726747607015616 0ustar ravenusers#!/bin/sh test_name="safecopy, incremental recovery with exclude blocks" source "../libtestsuite.sh" function test_current() { testsuite_debug "copying reference files for safecopy" cp "test1.dat" "$testsuite_tmpdir/test2.dat" >/dev/null 2>&1 cp "test1.dat" "$testsuite_tmpdir/test3.dat" >/dev/null 2>&1 cp "test1.dat" "$testsuite_tmpdir/test4.dat" >/dev/null 2>&1 cp "test1.dat" "$testsuite_tmpdir/test5.dat" >/dev/null 2>&1 testsuite_assert_files_identical "test1.dat" "$testsuite_tmpdir/test2.dat" testsuite_assert_files_identical "test1.dat" "$testsuite_tmpdir/test3.dat" testsuite_assert_files_identical "test1.dat" "$testsuite_tmpdir/test4.dat" testsuite_assert_files_identical "test1.dat" "$testsuite_tmpdir/test5.dat" testsuite_debug "Test, first run with big skipsize and resolution to produce output with holes" LD_PRELOAD="$preload" $safecopy -R 2 -b 1024 -f 4* -r 4* -X xblocks -o "$testsuite_tmpdir/test1.badblocks" debug "$testsuite_tmpdir/test1.dat" >"$testsuite_tmpdir/test1.out" 2>&1 if [ $? != 1 ]; then testsuite_error "Run of safecopy returned wrong exit code. Output:" testsuite_debug_file "$testsuite_tmpdir/test1.out" fi testsuite_assert_files_identical "test1.dat" "$testsuite_tmpdir/test1.dat" testsuite_assert_files_identical "test1.badblocks" "$testsuite_tmpdir/test1.badblocks" testsuite_debug "Test, incremental, big skipsize, small resolution." testsuite_debug " Must recover some data, not touch exclude blocks" LD_PRELOAD="$preload" $safecopy -R 2 -b 1024 -f 8* -X xblocks -I "$testsuite_tmpdir/test1.badblocks" -o "$testsuite_tmpdir/test2.badblocks" debug "$testsuite_tmpdir/test2.dat" >"$testsuite_tmpdir/test2.out" 2>&1 if [ $? != 1 ]; then testsuite_error "Run of safecopy returned wrong exit code. Output:" testsuite_debug_file "$testsuite_tmpdir/test2.out" fi testsuite_assert_files_identical "test2.dat" "$testsuite_tmpdir/test2.dat" testsuite_assert_files_identical "test2.badblocks" "$testsuite_tmpdir/test2.badblocks" testsuite_debug "Test, incremental, small skipsize and resolution." testsuite_debug " Must recover all recoverable data within size limit, not touch exclude blocks" LD_PRELOAD="$preload" $safecopy -R 2 -b 1024 -f 1* -X xblocks -I "$testsuite_tmpdir/test1.badblocks" -o "$testsuite_tmpdir/test3.badblocks" debug "$testsuite_tmpdir/test3.dat" >"$testsuite_tmpdir/test3.out" 2>&1 if [ $? != 1 ]; then testsuite_error "Run of safecopy returned wrong exit code. Output:" testsuite_debug_file "$testsuite_tmpdir/test3.out" fi testsuite_assert_files_identical "test3.dat" "$testsuite_tmpdir/test3.dat" testsuite_assert_files_identical "test3.badblocks" "$testsuite_tmpdir/test3.badblocks" testsuite_debug "Test, incremental, big skipsize, small resolution, with marking." testsuite_debug " Must recover data at the end of bad areas but not overwrite already recovered data." testsuite_debug " Must not touch exclude blocks." LD_PRELOAD="$preload" $safecopy -M "MARKBAAD" -R 2 -b 1024 -f 8* -X xblocks -I "$testsuite_tmpdir/test1.badblocks" -o "$testsuite_tmpdir/test4.badblocks" debug "$testsuite_tmpdir/test4.dat" >"$testsuite_tmpdir/test4.out" 2>&1 if [ $? != 1 ]; then testsuite_error "Run of safecopy returned wrong exit code. Output:" testsuite_debug_file "$testsuite_tmpdir/test4.out" fi testsuite_assert_files_identical "test4.dat" "$testsuite_tmpdir/test4.dat" testsuite_assert_files_identical "test2.badblocks" "$testsuite_tmpdir/test4.badblocks" testsuite_debug "Test, incremental, small skipsize and resolution, with marking." testsuite_debug " Must recover all recoverable data, and mark the rest within size limit" testsuite_debug " Must not touch exclude blocks." LD_PRELOAD="$preload" $safecopy -M "MARKBAAD" -R 2 -b 1024 -f 1* -X xblocks -I "$testsuite_tmpdir/test1.badblocks" -o "$testsuite_tmpdir/test5.badblocks" debug "$testsuite_tmpdir/test5.dat" >"$testsuite_tmpdir/test5.out" 2>&1 if [ $? != 1 ]; then testsuite_error "Run of safecopy returned wrong exit code. Output:" testsuite_debug_file "$testsuite_tmpdir/test5.out" fi testsuite_assert_files_identical "test5.dat" "$testsuite_tmpdir/test5.dat" testsuite_assert_files_identical "test3.badblocks" "$testsuite_tmpdir/test5.badblocks" } testsuite_runtest safecopy-1.7/test/test9/test2.badblocks0000644000175100001440000000002611202053544017155 0ustar ravenusers2 3 4 5 9 10 11 12 13 safecopy-1.7/test/test9/xblocks0000644000175100001440000000001111202053544015630 0ustar ravenusers6 7 8 18 safecopy-1.7/test/test9/test5.dat0000644000175100001440000005000011202053544016001 0ustar ravenusersŁcA< B줡YW#G`=m|^@1q3|Mf Si+HبV!BXw =vEgSf6$FW/~$5ìaN{:3{nսQ` #$׍(v_n""P#4ܕ{ Gc/DjLVŞ#LeA׭gV͊\?JE\;SAMcJZ RA%ߗdi =(@L9dj\l(3ZDQOkK3އjZ 3@An(GCZ9X'k*.zɘں㆕6Ƨ0\؅D5G#eTOPf'xoW6o` 4RGLv Eh$s7[dheuUm2RNU6\2As.akc ƬS9ڵX[ŮN1l9R%LwKbHD;c86=C([KZfd xg;LKWz'MwyGᱚE\}oi Gc+`v9eɹikʠn)p8X(bI)Ѐloטк?Rl\rdhUWCV1uȂV?3U`a :c[*^j +K, ѶrcqcJ<=AczgzNL }__nQ3dF0#u?$S/-\a7RDN!zZ% ۾Ppu[ >!Z%+p$t=rW~ǃgAبyf;`oPUiIZ*΅M&VY/ps{ex[^+[y1d|CACk:ȬՉS夐\04愞^ReɎMѼb\]>\F1[+RBMI¾-}54HufɱYRlF]cxYKaDSmcr4y[~^Էig:1\1 ZX.x%_h*g;tX$'#ne;+z )8hڠd&,W":*rs0ɴ[ v7>clO6N<$?$"ŒVwvL]7lBd6#Q^T4O@Թυǃa*1;1d?d+>` D׭yiI|+h aD{9(7h*[Z97R%xQI\^,W"<di=Bwbd x wVJ $Єȵ>޲3TJŷWp1F}K7 L{A꺫r(c,E<>so_#Ak7炊*=:P!?Jk)MARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAAD(;0F~Քff_9 un=J0f"99KMpޜ)dPftph 4Ek}J+e~ܐSQrZEN5FQeKZ;:n߯"F.MXP2]w5U#Wʼn $5Cakz$bkgzc0@)ߊBlqz>7%5N=`D[,|@6B1;vYW2ii8mk%-7E.(&hz*Ç+G X)giۋR[s5bRl9Kx֛S@LkclVU2Slj\+$߸E+԰k )&H lڷ@8Lfm"0TGz{NlWy*y:H֎)'Pa͸57D`3F$JP,#o+29$8KB<)Vў ,Ө, b'Qb l4|-xV {q󀻯M)^{_{ՑZ$tvq=M(&~#F(EGZJd-ӌE5Ī5ⶱ/$Ċq/<F#t5R B/k~!G`'[%N _@lyЂsuJ 9g]̲Zhu ܻ2}y~%rO}vKbQmyH8nW1^k!\@;P҈4ō8}d1ѽlcL{ݯ[PqQ:M;Y)֍˗z!rCymBKYu-8ًE1k"5FdvG`>8fi;2MJi${[cFifC\[)QaĢ#n1.o#rP#=p%Z"YnZ*РHF*qU 3W%8>Ȗޫ0_VPE2BIF0u0JUcY]i{:@1E$4%,*I D`%@M!+19(Ӓ65dq1 (DZ,(pw4ULU!r`FOC<gRI$hz\-^qh*nSo;/;rq'= C Cq_@-9VsNL/2劵u0XuEv@Bm}n`0]0wS SQ\=00lx['|849m` Ț]ܯ_rzfNy JhmWyzc.6KWN' sPi0~ʖɍsx% ת8 QQf:\F;!lrļ~%D#b:ЯXC^VRQfkE0Ų+^2k4^昚߆ ٧Aǡ~AR1\_~So&[DVQZ'RJ)aChx;i3G +bTוtaM^6Lye(}405yWu:UUN, Q:3ͼ -v 0El Ъ[EwExݍLPBfFUfn.*A^IMYӱldk_ V7 3 ѕo99{io#ǐwi(KJ1zǢlU(Qc+v`Rh%sL7F]t"yxY,1~>_c*V"ϑ`S^RM@iz+*by>&=b7Kneq`m+׺|;gԀ8_3MO'(E?yr[& x/cT 5{J3PΗj}2UB@p`B9H`'\P9}{\N!6F}Tb5)Rx XekRepdick^b; &U?:?Sٟ8n r? Zݛ%<7g`|3:~4G<`CD 9@YK%f^Q>Sd&ٙE ־s =় 8Gu5"v  FwZT,xN OCYly|4E4<8Muo ygE t:?-&HV/*ҧ*$jJX"pFmV Zj2ŽߧP]j\va]]U:q@AbʒBJU :ʙ/eHp_S(%9)C6%FBZ&qh8&/TQ{>E޼4Z(i"> >y/V0 /M HQezcp*op*OV6n)g)Q6Q=$c*Bƚ ?.&+XgEܚoYgL|߅l& I/ѡI'> ~:\@/w8V|79gv"IpWВ k!>֯z~>̜GVio|:'v< 0مd"~[ HrŒoj"Wn,8W+U~@Vۅazܠsvyf+Hz:kbů@< (*&p;`;/!=Y aE٩لZ O˹=,TٺX\q8>{K}3qq)W >:LYBT6+0jwƠ[>{'08`yYc~b#yu1ih<7tqWJYfeܐHQ"*V hfDIt"TR:#Q2ȠJf}1BOo'60m'2ubsO3: 4\e  檊ZqZ Uǐ15@`<[l^ЏwLWXvAm>WXm@0`\qބrL &B1 s:JQC XR*Q,tƉYw5Rj!ż0ίab&S|-KdBP[5N۵- <_PK^bH29iPbpyQ y[֡ڃ[ a" =F 0#I-&m2uOP&8<U==gRw>9rאg4ZBԳhɗ/R8RĪzX'\.m,2?jO{LFC@/#ǵ?0el to]Idp˕1ReQuBuQ +ET 46- Oqѷe=Nf0[Tv<%֌*{h,CkZ \!ӪɉW*#R1yX-;6sBBR1BrzEN ~9C\8- 4HHT h~a>^qG32$tqw  SYb0C UK@h}晤<Ϥ6;#G`<X*k3EǀCpp[*U'gݒ1; 8ePΘMEQJHSRU8EHOW+ۄlODX\LY)jk1Q idT҂{9I`i!ÉcD,*!{#vr0%_a6L@s0`h`s3v] QU]?Ԗ9E{HZt\tMsofd4]<>zySrhZùp3&v_t Kh3/6Vt. Tiw_u/q 0v` -ł]FtacŦđ sxwu!>)Ҿ͉{?safecopy-1.7/test/test9/test4.dat0000644000175100001440000005000011202053544016000 0ustar ravenusersŁcA< B줡YW#G`=m|^@1q3|Mf Si+HبV!BXw =vEgSf6$FW/~$5ìaN{:3{nսQ` #$׍(v_n""P#4ܕ{ Gc/DjLVŞ#LeA׭gV͊\?JE\;SAMcJZ RA%ߗdi =(@L9dj\l(3ZDQOkK3އjZ 3@An(GCZ9X'k*.zɘں㆕6Ƨ0\؅D5G#eTOPf'xoW6o` 4RGLv Eh$s7[dheuUm2RNU6\2As.akc ƬS9ڵX[ŮN1l9R%LwKbHD;c86=C([KZfd xg;LKWz'MwyGᱚE\}oi Gc+`v9eɹikʠn)p8X(bI)Ѐloטк?Rl\rdhUWCV1uȂV?3U`a :c[*^j +K, ѶrcqcJ<=AczgzNL }__nQ3dF0#u?$S/-\a7RDN!zZ% ۾Ppu[ >!Z%+p$t=rW~ǃgAبyf;`oPUiIZ*΅M&VY/ps{ex[^+[y1d|CACk:ȬՉS夐\04愞^ReɎMѼb\]>\F1[+RBMI¾-}54HufɱYRlF]cxYKaDSmcr4y[~^Էig:1\1 ZX.x%_h*g;tX$'#ne;+z )8hڠd&,W":*rs0ɴ[ v7>clO6N<$?$"ŒVwvL]7lBd6#Q^T4O@Թυǃa*1;1d?d+>` D׭yiI|+h aD{9(7h*[Z97R%xQI\^,W"<di=Bwbd x wVJ $Єȵ>޲3TJŷWp1F}K7 L{A꺫r(c,E<>so_#Ak7炊*=:P!?Jk)MARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADRr7咥F:yi# Պx= izk7/1V6'? x^<3n/ʨn|}PaO/{= Sa6M> ܻ2}y~%rO}vKbQmyH8nW1^k!\@;P҈4ō8}d1ѽlcL{ݯ[PqQ:M;Y)֍˗z!rCymBKYu-8ًE1k"5FdvG`>8fi;2MJi${[cFifC\[)QaĢ#n1.o#rP#=p%Z"YnZ*РHF*qU 3W%8>Ȗޫ0_VPE2BIF0u0JUcY]i{:@1E$4%,*I D`%@M!+19(Ӓ65dq1 (DZ,(pw4ULU!r`FOC<gRI$hz\-^qh*nSo;/;rq'= C Cq_@-9VsNL/2劵u0XuEv@Bm}n`0]0wS SQ\=00lx['|849m` Ț]ܯ_rzfNy JhmWyzc.6KWN' sPi0~ʖɍsx% ת8 QQf:\F;!lrļ~%D#b:ЯXC^VRQfkE0Ų+^2k4^昚߆ ٧Aǡ~AR1\_~So&[DVQZ'RJ)aChx;i3G +bTוtaM^6Lye(}405yWu:UUN, Q:3ͼ -v 0El Ъ[EwExݍLPBfFUfn.*A^IMYӱldk_ V7 3 ѕo99{io#ǐwi(KJ1zǢlU(Qc+v`Rh%sL7F]t"yxY,1~>_c*V"ϑ`S^RM@iz+*by>&=b7Kneq`m+׺|;gԀ8_3MO'(E?yr[& x/cT 5{J3PΗj}2UB@p`B9H`'\P9}{\N!6F}Tb5)Rx XekRepdick^b; &U?:?Sٟ8n r? Zݛ%<7g`|3:~4G<`CD 9@YK%f^Q>Sd&ٙE ־s =় 8Gu5"v  FwZT,xN OCYly|4E4<8Muo ygE t:?-&HV/*ҧ*$jJX"pFmV Zj2ŽߧP]j\va]]U:q@AbʒBJU :ʙ/eHp_S(%9)C6%FBZ&qh8&/TQ{>E޼4Z(i"> >y/V0 /M HQezcp*op*OV6n)g)Q6Q=$c*Bƚ ?.&+XgEܚoYgL|߅l& I/ѡI'> ~:\@/w8V|79gv"IpWВ k!>֯z~>̜GVio|:'v< 0مd"~[ HrŒoj"Wn,8W+U~@Vۅazܠsvyf+Hz:kbů@< (*&p;`;/!=Y aE٩لZ O˹=,TٺX\q8>{K}3qq)W >:LYBT6+0jwƠ[>{'08`yYc~b#yu1ih<7tqWJYfeܐHQ"*V hfDIt"TR:#Q2ȠJf}1BOo'60m'2ubsO3: 4\e  檊ZqZ Uǐ15@`<[l^ЏwLWXvAm>WXm@0`\qބrL &B1 s:JQC XR*Q,tƉYw5Rj!ż0ίab&S|-KdBP[5N۵- <_PK^bH29iPbpyQ y[֡ڃ[ a" =F 0#I-&m2uOP&8<U==gRw>9rאg4ZBԳhɗ/R8RĪzX'\.m,2?jO{LFC@/#ǵ?0el to]Idp˕1ReQuBuQ +ET 46- Oqѷe=Nf0[Tv<%֌*{h,CkZ \!ӪɉW*#R1yX-;6sBBR1BrzEN ~9C\8- 4HHT h~a>^qG32$tqw  SYb0C UK@h}晤<Ϥ6;#G`<X*k3EǀCpp[*U'gݒ1; 8ePΘMEQJHSRU8EHOW+ۄlODX\LY)jk1Q idT҂{9I`i!ÉcD,*!{#vr0%_a6L@s0`h`s3v] QU]?Ԗ9E{HZt\tMsofd4]<>zySrhZùp3&v_t Kh3/6Vt. Tiw_u/q 0v` -ł]FtacŦđ sxwu!>)Ҿ͉{?safecopy-1.7/test/test.sh0000755000175100001440000000007111234145746014527 0ustar ravenusers#!/bin/bash source "libtestsuite.sh" testsuite_runall safecopy-1.7/test/test5/0000755000175100001440000000000011726756524014267 5ustar ravenuserssafecopy-1.7/test/test5/simulator.cfg0000644000175100001440000000025411202053543016744 0ustar ravenusersblocksize=1024 filesize=10240 source=test.dat softfailcount=2 hardfail=0 hardfail=1 hardfail=2 hardfail=3 hardfail=4 hardfail=5 hardfail=6 hardfail=7 hardfail=8 hardfail=9 safecopy-1.7/test/test5/test1.dat0000644000175100001440000000000011202053543015763 0ustar ravenuserssafecopy-1.7/test/test5/test2.dat0000644000175100001440000002400011202053543015772 0ustar ravenusersMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADsafecopy-1.7/test/test5/test.dat0000644000175100001440000002400011202053543015710 0ustar ravenusersŁcA< B줡YW#G`=m|^@1q3|Mf Si+HبV!BXw =vEgSf6$FW/~$5ìaN{:3{nսQ` #$׍(v_n""P#4ܕ{ Gc/DjLVŞ#LeA׭gV͊\?JE\;SAMcJZ RA%ߗdi =(@L9dj\l(3ZDQOkK3އjZ 3@An(GCZ9X'k*.zɘں㆕6Ƨ0\؅D5G#eTOPf'xoW6o` 4RGLv Eh$s7[dheuUm2RNU6\2As.akc ƬS9ڵX[ŮN1l9R%LwKbHD;c86=C([KZfd xg;LKWz'MwyGᱚE\}oi Gc+`v9eɹikʠn)p8X(bI)Ѐloטк?Rl\rdhUWCV1uȂV?3U`a :c[*^j +K, ѶrcqcJ<=AczgzNL }__nQ3dF0#u?$S/-\a7RDN!zZ% ۾Ppu[ >!Z%+p$t=rW~ǃgAبyf;`oPUiIZ*΅M&VY/ps{ex[^+[y1d|CACk:ȬՉS夐\04愞^ReɎMѼb\]>\F1[+RBMI¾-}54HufɱYRlF]cxYKaDSmcr4y[~^Էig:1\1 ZX.x%_h*g;tX$'#ne;+z )8hڠd&,W":*rs0ɴ[ v7>clO6N<$?$"ŒVwvL]7lBd6#Q^T4O@Թυǃa*1;1d?d+>` D׭yiI|+h aD{9(7h*[Z97R%xQI\^,W"<di=Bwbd x wVJ $Єȵ>޲3TJŷWp1F}K7 L{A꺫r(c,E<>so_#Ak7炊*=:P!?Jk)og y(<<|`,/&zQt6lv40զcfU[ua(.8$RG>)8]xY0hNyD82dzv ӟ hn^%ڽsx8_(og?K>x8Fr=BU:v'>,,xfk/jZ͋NkYkTʂM,VK%vkA!5NR'c-<6Yf^Q4 p `' g}1ˏdx74qӧ9:iɰW=`)Cgw[:߀,{A &&D_Z_y,fk55$W ;+F:~8Hph7b E=QOw4)^|كvD'\˸!İ|gn|Hw+) ([t-G5'W)ëVd$jjvA$o֩jI"=u: Y'Άĩ&'J۵mdi.O=PlW)So\s9Vj{c쩄NKBS@*x4+h;z-]~Y+o$_ZX.h"]7;2M`a%ҪX69b^ q79r8("@InZ20ƣvi* 𔛖vr`pbb=gO~T}ނãIoI 'h ϧq ]: OB(;0F~Քff_9 un=J0f"99KMpޜ)dPftph 4Ek}J+e~ܐSQrZEN5FQeKZ;:n߯"F.MXP2]w5U#Wʼn $5Cakz$bkgzc0@)ߊBlqz>7%5N=`D[,|@6B1;vYW2ii8mk%-7E.(&hz*Ç+G X)giۋR[s5bRl9Kx֛S@LkclVU2Slj\+$߸E+԰k )&H lڷ@8Lfm"0TGz{NlWy*y:H֎)'Pa͸57D`3F$JP,#o+29$8KB<)Vў ,Ө, b'Qb l4|-xV {q󀻯M)^{_{ՑZ$tvq=M(&~#F(EGZJd-ӌE5Ī5ⶱ/$Ċq/<F#t5R B/k~!G`'[%N _@lyЂsuJ 9g]̲Zhu ܻ2}y~%rO}vKbQmyH8nW1^k!\@;P҈4ō8}d1ѽlcL{ݯ[PqQ:M;Y)֍˗z!rCymBKYu-8ًE1k"5FdvG`>8fi;2MJi${[cFifC\[)QaĢ#n1.o#rP#=p%Z"YnZ*РHF*qU 3W%8>Ȗޫ0_VPE2BIF0u0JUcY]i{:@1E$4%,*I D`%@M!+19(Ӓ65dq1 (DZ,(pw4ULU!r`FOC<gRI$hz\-^qh*nSo;/;rq'= C Cq_@-9VsNL/2劵u0XuEv@Bm}n`0]0wS SQ\=00lx['|849m` Ț]ܯ_rzfNy JhmWyzc.6KWN' sPi0~ʖɍsx% ת8 QQf:\F;!lrļ~%D#b:ЯXC^VRQfkE0Ų+^2k4^昚߆ ٧Aǡ~AR1\_~So&[DVQZ'RJ)aChx;i3G +bTוtaM^6Lye(}405yWu:UUN, Q:3ͼ -v 0El Ъ[EwExݍLPBfFUfn.*A^IMYӱldk_ V7 3 ѕo99{io#ǐwi(KJ1zǢlU(Qc+v`Rh%sL7F]t"yxY,1~>_c*V"ϑ`S^RM@iz+*by>&=b7Kneq`m+׺|;gԀ8_3MO'(E?yr[& x/cT 5{J3PΗj}2UB@p`B9H`'\P9}{\N!6F}Tb5)Rx XekRepdick^b; &U?:?Sٟ8n r? Zݛ%<7g`|3:~4G<`CD 9@YK%f^Q>Sd&ٙE ־s =় 8Gu5"v  FwZT,xN OCYly|4E4<8Muo ygE t:?-&HV/*ҧ*$jJX"pFmV Zj2ŽߧP]j\va]]U:q@AbʒBJU :ʙ/eHp_S(%9)C6%FBZ&qh8&/TQ{>E޼4Z(i"> >y/V0 /M HQezcp*op*OV6n)g)Q6Q=$c*Bƚ ?.&+XgEܚoYgL|߅l& I/ѡI'> ~:\@/w8V|79gv"IpWВ k!>֯z~>̜GVio|:'v< 0مd"~[ HrŒoj"Wn,8W+U~@Vۅazܠsvyf+Hz:kbů@< (*&p;`;/!=Y aE٩لZ O˹=,TٺX\q8>{K}3qq)W >:LYBT6+0jwƠ[>{'08`yYc~b#yu1ih<7tqWJYfeܐHQ"*V hfDIt"TR:#Q2ȠJf}1BOo'60m'2ubsO3: 4\e  檊ZqZ Uǐ15@`<[l^ЏwLWXvAm>3Xߐo˫NqH?l҅a\T.ګ5InNPU9A`-vgx}/Fhzt-^XBhfk#:#t4Ę3GivG-4ZWuϒ?ꌋ A͇9YcRB415^˒G~d@՗UH@b?GG۳qԔ>Hꆖ%=[3Y CK8r,Kg Z+"JgnLEfd,͒_r`xrm뱃l⳽Nk̗q8k(Ȟt!,6Y.yp?-g9T[++ GGV-~"J~Qt0%zHϷvY 6͇y(doޠ7(>|/qc5J"$jiV!bЈ5k$y!) wX7̀Y}&Z yVeO[fHWboN} XС|fvAk C\H^lO*P9cR*ىD6? 41()6 8\؉@A=#2(TTَFB 8Y3hT23H[e!w 7Z ~YNeP6秛cȾď<0_yzl7͇ L d}P!2 A7J<#w2oDjzH2 ^{۾sg#wƱhڛ.j~6&^]hwcTRwCnRZ1$=ŋԎ7@,D bh2fL#aYj_+a_9A+fB>(H Y  ?mlZxZ\l6/V$K0'# .ND2+GFj: õWXm@0`\qބrL &B1 s:JQC XR*Q,tƉYw5Rj!ż0ίab&S|-KdBP[5N۵- <_PK^bH29iPbpyQ y[֡ڃ[ a" =F 0#I-&m2uOP&8<U==gRw>9rאg4ZBԳhɗ/R8RĪzX'\.m,2?jO{LFC@/#ǵ?0el to]Idp˕1ReQuBuQ +ET 46- Oqѷe=Nf0[Tv<%֌*{h,CkZ \!ӪɉW*#R1yX-;6sBBR1BrzEN ~9C\8- 4HHT h~a>^qG32$tqw  SYb0C UK@h}晤<Ϥ6;#G`<X*k3EǀCpp[*U'gݒ1; 8ePΘMEQJHSRU8EHOW+ۄlODX\LY)jk1Q idT҂{9I`i!ÉcD,*!{#vr0%_a6L@s0`h`s3v] QU]?Ԗ9E{HZt\tMsofd4]<>zySrhZùp3&v_t Kh3/6Vt. Tiw_u/q 0v` -ł]FtacŦđ sxwu!>)Ҿ͉{?safecopy-1.7/test/test5/test1.badblocks0000644000175100001440000000002411202053543017145 0ustar ravenusers0 1 2 3 4 5 6 7 8 9 safecopy-1.7/test/test5/test.sh0000755000175100001440000000246111726747607015612 0ustar ravenusers#!/bin/sh test_name="safecopy, copying from completely unreadable file" source "../libtestsuite.sh" function test_current() { testsuite_debug "Test, no marking, output file is 0 bytes, badblock list complete" LD_PRELOAD="$preload" $safecopy -R 2 -b 1024 -f 4* -o "$testsuite_tmpdir/test1.badblocks" debug "$testsuite_tmpdir/test1.dat" >"$testsuite_tmpdir/test1.out" 2>&1 if [ $? != 1 ]; then testsuite_error "Run of safecopy returned wrong exit code. Output:" testsuite_debug_file "$testsuite_tmpdir/test1.out" fi testsuite_assert_files_identical "test1.dat" "$testsuite_tmpdir/test1.dat" testsuite_assert_files_identical "test1.badblocks" "$testsuite_tmpdir/test1.badblocks" testsuite_debug "Test, marking, output file is correct size all marked, badblock list complete" LD_PRELOAD="$preload" $safecopy -M "MARKBAAD" -R 2 -b 1024 -f 4* -o "$testsuite_tmpdir/test2.badblocks" debug "$testsuite_tmpdir/test2.dat" >"$testsuite_tmpdir/test2.out" 2>&1 if [ $? != 1 ]; then testsuite_error "Run of safecopy returned wrong exit code. Output:" testsuite_debug_file "$testsuite_tmpdir/test2.out" fi testsuite_assert_files_identical "test2.dat" "$testsuite_tmpdir/test2.dat" testsuite_assert_files_identical "test1.badblocks" "$testsuite_tmpdir/test2.badblocks" } testsuite_runtest safecopy-1.7/test/test12/0000755000175100001440000000000011726756524014345 5ustar ravenuserssafecopy-1.7/test/test12/simulator.cfg0000644000175100001440000000020211251753652017027 0ustar ravenusersblocksize=1024 filesize=20480 source=test.dat softfailcount=2 hardfail=4 hardfail=5 hardfail=8 hardfail=9 hardfail=12 hardfail=13 safecopy-1.7/test/test12/test1.dat0000644000175100001440000005000011251753652016062 0ustar ravenusersDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCH ݬPe(5LHN#DhW/>?n?-=nRPr{J]J]jailrnY Pl ĝ0&`~d~{zs6"aJLxE}'Ĝ:]O6/!\fG0F\;(%<ڹzϖ?ANWqW4z'nAuobIUpbwrHlQ~}ȚEɨG;ti-v k=ڂ/e Qo?Uhы˒-L"Vd]^B0ySxc4KkZ䬆K:0We*q.G*+8* WD8P[|U.nK:"p"5WzD Ηw[, ;b\JB?jf']e%f&毰TO{iϫl[ ~HT6YтQA@>>U~urEvaN u!;`Yʁ]/%a}Q)a=P nNVE7`GK냴[^wmk(la_ B-CC$%wM %2VR C(=2.&ѴZnH( n⧼~E91Ā>eV8ԦE~\HvrfBEOI~hFS}4TS,@>kr;Dq ZP3ywb H-4 \9?,,Xg;gzݞCgo/@\SRόvȎd;RoM-;Ǒ, ^ |/؈鿑t>S Jk508cڶe fa~`'97;u8//1Ðe>eC iFņZlvoLA!)ҴDh),E k'J,m S p+Čp4P}C9~Sie7D ތQ}&yjإPjRBZFr\b'):Ȑ>F |NnD'`շ\i͓l4 `ؤGC |.$`:Ncj͞% QyNS4,둱b/VC@:/GS%]嵤PEYbe6Ylj!$z>k%ootG8KDau=Px|TW 3T@+Ip{gȰjc{0?0pF"*Vp8u*NU}mJH{ܢxwwRRVc+>c3:ML+gJx:+=SMZ$LPR͂& Ӯ1FHyߤt{p`=!%w;\=|HBTZ5Q:xp%xVQ/#)׃D65yPl:JҜ=UoKnܧ`=,]{eWIg%C`]T@4}&t?e^lQ sWODONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHDONTOUCHsafecopy-1.7/test/test12/test.dat0000644000175100001440000005000011251753652016001 0ustar ravenusersO9O^TŖڷX71g%a! .fF>_yz`M4]b~~!f֜ S D iXH5h$1 R h<-& ?wP[±:A) 8qԀO aF19i4sk~ 'bat,̲hX>q`5D=h7y<1<6 &i=ۤވn~Cc쨅`M]#OA~hRðo?O1-j֣9 2~\AǷZڽ;ՙ hF! ZMNriRr4:mwfR>jfk+?r̓B%/ӃEʍ4,8@k,q9l?cיrrI% NRUoGȳTUd&Oy,m/0bU-h"㍕y> Zy{oqh[@m利;q }fƗgP\Qt3V9Y>$0ܘ8X,-jSVԺџ) R \ľ>&~nD=I9K^J,u+(i)M̜̉Ox*G8O+zm;I@CY.>IFB%_u#)78@-qciW3Q}/bB:Ɉc?zĂYZ+t%jM{5{8wj6E: ;!PM L2W\Z~@Ez\.n{#+ s4+/K7zn!"IH:يMy8 +cer49I[i`@;(j+̂VNa*7Pl_Wޤ8=5Z/$2mByuU-`Rމ&L>3K͝Y՚vg+\}Ӊ!DQ|F\辙tFp'6oojف'&0k4ek(tUoj RqJ$XZ_R&qR(RC5јM#F&"!aQrEy'2LP򚾪zI#Z0YaFhF ` [ $t1ȵJ:>|)?LUrBmcK陟dA!TzY"{UVPZ$6)y>k&ȓ~@AA -Yit2u&|#?4μ$(HTh+:Px@:p@>v!..<`J3kDR`#"5/sԙ>:DĞ:'pzrQn]S@Wt*ܝɘ]d2)D\\HEsa2!Bqߡ; O'SQYyN,j'kg#!g܊[ix=15m82jd?'tl7=inO] $n k6dF](" B>MT{IaA']=Sє Ͱ@ 6'wIY0 ɤ@ \eq观T]Ppz+$&cʬxn(}3hN8vnb:7//Ǒۼ̫"O&3͌_xZg3 VV5u i[esjfHIⱓ욇15dXtղNjKf$6yX"}IH+Ѹ*]tnٖUVR o'W*6 ӻ7~ -0:)'UYEޚRn͏NGl2Qtv/KDMlB6* X!V $_ev](]EL+N96Pd*|F,iyt+( YM/%,JV<'V]A\v1dH'^ E䵾>Lp"U9m L<.{w  2ql%+v jXmh$ e#_ܼ!1R:c 4pO }GBjc{kUe~hY̼tWwF(I+vrFz9ԪXFTPk/q7V?YmT^ʯHEc(зt<)jZ<4pm\ZΝe U*>\xB_n xLIy~ĕ. Z_ r-xr7ZwXP^^bgv 249XryqhcՆ hnqQ ǒ&WޯzwA#7]͔rN+XJL@,ͷe1[UMBuiL(Wq3A)JA"aF6^}k?`[z?yPe'- n ݬPe(5LHN#DhW/>?n?-=nRPr{J]J]jailrnY Pl ĝ0&`~d~{zs6"aJLxE}'Ĝ:]O6/!\fG0F\;(%<ڹzϖ?ANWqW4z'nAuobIUpbwrHlQ~}ȚEɨG;ti-v k=ڂ/e Qo?Uhы˒-L"Vd]^B0ySxc4KkZ䬆K:0We*q.G*+8* WD8P[|U.nK:"p"5WzD Ηw[, ;b\JB?jf']e%f&毰TO{iϫl[ ~HT6YтQA@>>U~urEvaN u!;`Yʁ]/%a}Q)a=P nNVE7`GK냴[^wmk(la_ B-CC$%wM %2VR C(=2.&ѴZnH( n⧼~E91Ā>eV8ԦE~\HvrfBEOI~hFS}4TS,@>kr;Dq ZP3ywb H-4 \9?,,Xg;gzݞCgo/@\SRόvȎd;RoM-;Ǒ, ^ |/؈鿑t>S Jk508cڶe fa~`'97;u8//1Ðe>eC iFņZlvoLP3%(7O #:t]N7 Y'E?*őhKCBC:o5xԂljX½N1vm95 qFwy|sqml:.otu7Oﰘ=L Wph}Teq4ĉ5$܎N|9nVxH(nzglWȃ8E=m$ ~6"b)o A#Zni)g>\axbN)wR-#@FnߺEܘ~%TAҨ`{Fy `IR'JpyUhkmŨ+d0\K>$ 7KAN;d,2Ҕ- Qw*'0h05NF"]3 Hx|Qgdb)^/~f2ODӞwͶ~F@ڿKFfSײ bM<%^R ww^+n'zQ8񽕅i/>F}^Zjvl]Gz*E(Kk'=kJ, #XgGB48<ѲJQZە ,xN:uyCX/4ChT@Ԡ_ȨZ !ũfhsg (de\U7 ioq^P{hѪ򃡤r#U#.N&n".ORdG_Ta&z؉sR.=`G3P _biS%x$=$S2B^ppQWz8 懘"Fm&;D.Е4RAknć}U?*Ec{)Ҹ8ˍ/Ozf"N(<[f,FCž$<rգm#"J 8]UKP9=V'IsfgPS>}QHl'-ԋY o'%,xP D|T?MHnԒDNu!ϤQ؃q̀7ACSu&$Bw[t7+Dn8gd}`)<ȩm)!InmSOM`!MW| nԚE@;xJMpR´='UQ^|g/9*@4WHXl[[b_JI -i pc5Kȣh~3]ο'ّnWdL-Bb}*KYpW e {"J9ɶ,3PPdmmn#Vcs5# 5 (TB({Rr;jDV[1J#BӮYY}esӈvhDZ~GpO2X쏩QvԚnz@Ldq}SpRڐxw"cFR>5*Y &k5`qP:@)K9/ii7&w3j+W],nJb3-*) V]AO N:{Uw8|RJWB'Hԏ)Ta[d{tȫ[uU鲚&I>טO]:z>`ߒjnQݺhIxtsB$QHJ diXhڰ& hv.D)aK+ /~ZzUd_5]Z80bUJy#yÒq-0P 8bT|"[8g3^A/QSZZ٤T+t`}5sMN߭m9hwDY{T/L3*G|τX z3CZnOZu:H<8Ezᦜ\5 |ю50 |~5s z=OXPIbk(//5:KdjgP`3+J CR m6oD"U/b֘JꞁczzJR޾OԽ4sY u)F 3j3bȓƾpzb8OL#AgaPaHCYٳΐ}[Lm~NBkũn\ֿXy\$$-!(fZT, r-!{5c͗S溌jeo_mӳC7+_:rV+?WU&ڙOd`h TTw7Ǜŷ[y;ozxa>!hA4h'.r_\O?&o!E*e[%<^_>@=‚#k,+60%vZFZ,V#wUpJXnr $\9Q8g&K5sHxi|RbŚ%w!lp[ݍjyVwV ARel\mup߈R w^xL@LMvr_~32q;YR:V!;cA*t|"[$tXCRz{mF{\yt#Og%$&%@K}=swFOGU jXUb7 Ղ;q F9 hɗܤb&,|-6V-Pz&N;]s $t|C[Wm#a:AXGvkM)ڃxgvp0*:$ *AMe2t\p͊?VMJVYt gM_fq ֪q<3nV}^afiW&%NJ=^X v|j̟(TQ c+<]^{Y$g)i&豫S6E>xtsj(fs_`G1EIh1/ ʶE1,P2&xŏ;s >}дY8ƐH/ȷfA,X\oZ.j-+~qsz3+«rgo 9MFG&Wf$ͷ;,xc{3D]nvѱ2vΆb2JÐtFnw(UM5-9й"Lxk%re%CWhF2oy~l_Q')+[S7I! q;`I3 i}21;mZ잉XaG2J$G*u6hf{^dA0'9g>Ji^E}^iDԕF\O>f~ @pN]7-ݾxةl(P8Eq9YQvwIc}i8j`Q !Iye/DK&(h9h> 6h3,{FB mx!wG|ަ'P" ht >^FKyryw D :;"w>8Q6~#Q.Ňv_<bgcS=~/Ad-5 tFiO"S'a9x','m u oEz +س ֟dJz=IJYx.ۊ = N0wA`I /}3 XQ֩";w"atzzHCJM f8;ϣ6 ]꼰JFΈRGF|r2RO ehH^ I2LC~< O*B7r(/`mv-:q(&d+I!,DU#+aG̭?.HW9*0K[ ݘI8hPz rhX!n![F#Q?F'3К*9av@gcem8c@/JUGE". _FK^Z֢-2?dW+=>ےm*b=#Q )r5Ri%MP':D+o~Äha]cT.79aA C}&24|NuRON0S¯t"vc>j6zMQXS&{eEhaJ6eJ%;{d;+>YIBvTlm8ܾWh΅ӎ7Vr ^qoEؖ-kE>'hvi4΄gM{皡V?V :_s,f}Q&g4In>IƣBԝo7gc@D_'"h珞'qBZɷYA42?ՃȡK?VY?A3GΉHNL{`8Ouc:p ?Yh*p;%GEd,VTHadW!d S#'4ZR'hd$ry5X+3]sd;>,؁`;ep:qLҹV9)ʴ6䘈_4Cr}L T!'" {=CxCjF< XB4UqđX[Tr;rύ-NqnQ&Vim'ZKv"o>續7HsJF]<:mk?<tX;eA5gϼC{onR{/TZ}v1+~XW\*<ˡô@*vث.4+૝qH2%=6KO1+0B'5m:{s /EF yW0NHZi*6 D[ΨU+cVhNI`CKGǽRm^${k+Db_dQ{H2V|Dջ4.G Ioho|p=G",=9Vƨڇ#EO N'Gqf~S $ ǔmo6vy^\ݚBM+UwE]8n\JYY22ř ܖ~)kE5TN}*Y8<>0v. 8Ztҽ]e%)rL<9pU_KI{ޡѺ.9VW@NT2ȝ$t`UmTbiř*k-MeOLc'tS(vK fid#KoCֿL< BX\DX )cO`yri2)O?A^5Mf)wyjꏚ}ΎIll:gJQX8G%4R_WQ_cWAc@܊)L|E>j,un}n1C&Q{jQ4jVl<ʲ d &9u )11fy'G>Ѭ[QR6%l*a/t%φ` É 5{ZgrT<3#F~>ywEDUU1;4e0]XBe5r-}`h:5\53 @A+ xA\ϛ g'#ڳ2j1ErH"̴{d9+6%kխl \INVlHj]3Tn  ҿDzqkڇ؄놻w1][fd,..Fo$bs=33oQ}х"\/y3Qjޢ^x0`"|YJLս/$܅`1lrl1^zOx4yy&!6x΁y̙8$8:eXmp\;wvFBXӽgw5}kT rϰGpnM!‚IgɄ=;"^'хax?G":0 *JuˡFazU{]Nfl|eFKEBZaX^ T{3dzД /=!Ś"@ )^6/0v7Pwv%3+?-$ >Ҁ-5{A)̐1F7f=HGn]W!(G5QhKI|kme,%j-}?ɹ*1JyE<8͐_9*f뉦?'n)GTU?0ɤ7)An+w'E ={#ąY2!_gpc=5縩=</_ިb̠LN` Llzq2T*:hWG(!X*7!z %N9xmrPTT Rs|?R/V!S+1h5I>%"kqVW]A,xUw S\P F?rB[`Wv=\@l/h[UڇS?˥BBkD*)_s' ^ #=vC̜`Wg+wRM 8=F6*rL~#],ͪaj>߈4(gPrXwB{_j>`_9ݰq3Q4-RNiV@JWA@ZC`Hz+@> b+GӾ۟O\VlɃdGdG{ /9UGٜNE:rPM"^:KEnBsw/'/v*i仠a;ҵKJӂ%`tӆ]|*,ZY,hז4qU04!,PcQ,'&w1w>6'B=%ARs QR!ԕ%Rz9>6U!5hg(=(Eˀ!9֭1z9J/]:a#|-ΫYnMRP~K"_%4h[8;|Ħk~~R7OҜ65p1-YNcQ!W#k1nq اb34&'-]nKNZ^I\]i&DzIԆ'V%WH<ͺ"uH{'2D^"zτADQS=A5y&| 󈉽w[wk+HfIht~)hP@2B5 )mWLH|M};eqgrTob^KJ( ĆZ6kxqXZvsE (HSIrݿȆDVP:./u3t6f^m*4 Jx:W|C'HƜ%lDSC}uZt~GOD2 H_[ӰX/!l5m;U%$]zPݻSz4 6& ,z4?0ZTnd?ZwURCT!g`zNXTNmxW>yK{>^pVQ:̢Nb.A倬{HMHSDcZ߄x6A!)ҴDh),E k'J,m S p+Čp4P}C9~Sie7D ތQ}&yjإPjRBZFr\b'):Ȑ>F |NnD'`շ\i͓l4 `ؤGC |.$`:Ncj͞% QyNS4,둱b/VC@:/GS%]嵤PEYbe6Ylj!$z>k%ootG8KDau=Px|TW 3T@+Ip{gȰjc{0?0pF"*Vp8u*NU}mJH{ܢxwwRRVc+>c3:ML+gJx:+=SMZ$LPR͂& Ӯ1FHyߤt{p`=!%w;\=|HBTZ5Q:xp%xVQ/#)׃D65yPl:JҜ=UoKnܧ`=,]{eWIg%C`]T@4}&t?e^lQ sWO2WZE]6 7Xx#AYfo@1-hT"\ΉIH4&xlh?#׊Yu¹- WPěqD}Z,J[4I^Vܑ9&bɵ Z4e|?.u Pnn:r,O:a Ÿ^mGA2k7bZDJ=fK/wzA\=FtG<@ɡI2\8H_ǯK{B;2jƉb?v.h/~z|bC]Sœ.&мICybHׂDzê?:xLtE|y:4Yw>^sUru29l}s;ɔLˠ> ,"a~JN2E^, ex,.G!Mq:/ Aʞ8ޘt,S [: K!ZG]j7=x/ސӦHDy$D"1V~MHPJɫ3V|>sc԰t]NS1>f4 45)m9k9*I [ Oӈ̩=+09W,>聃 CJ5#Ap<0"oACwǗ U}K} ){^LXBtDel0PZ2j莚^#8 FFtM*W'|= L)} GUgQ$֛asR[I%&U% ْGޘY vF>3 ̯3  Mv2v!0X>%;.'{ʩVpL.!vغCB$q2$EV\r ~[BE Hr"TN.p@~pI;?D'?s+f5,w9q@Wi翀Nv'H'9v:2VaiiFa({av RX=? ;N3C3ɳ +r^U`_))-$~*~Yz+ ,BL};"aƗRn/! $эjG%ᄫEkSt7%yM]/dX*IIɔPmyFBS{?FBG-[/pX?#W &Jŏ|?,!Lwɒjb빿kW=Yוs[/I5Y=O;r2=޸5Qq3wL"6t'<8^(% A̞VlҦPK??{m 38E32ܦjWz{ba10Z>c*Vl=yS>S:"O ?gg̈́xȎh9FyʙHDE;:TǾ[^e2δmdK8X[Hv0oO^m߽^xOO%g{~.Mz""i~^cS o\*Dȁ3Ϛ|1H-\v".W7Ma*D.1ƼZX\cRZC=@G)=`T "|6{LHJ>\QvlqO9FaA&4Ne8:(B▙RҗUvdtX>=~ٷ^$ɂ%R6Mk|nir*KR!,Hl3۠xFoG hFŐ ,\2w=MšMSqۺy1GQ]KQ`1P7uoQӯݩ~,{A=e.?yw~e}=xyDًet6]R$#^C2Ňґ|a08=b&Yb#^:1VK z_R~&j IO~KTIД"V@r{}E+Bfv`"L=zn~,$ټm*Iq}9J aOʗW|S"+gX7uP<`B𴿺.dbvdS Jp`j'm--+2r0Dgx?qL:l'w?Q(j3D${Mθ[p&P+cOE h o ^2'@5&T|'|f5f?ضC]k('dwy>#x[7𧜛f+T7LϚ2Q =G/)^19!S+T\Wk3٥9 mhaFB)iWG0KXDUBX_n9:{AbB3+H}-ݾmBR 32[FJܑyx>^ե+$Oߤ:]`W?;wdN5/@@t~4nXvRp)@x~-G )?Mv™OƓf̩BX|I^G8t)jH4Ev%t(~s*Az9gR*15fi`D4.(<$iNҿ͖E%UlQU$m*AgTETg%4lߖA&Jl& s̃0|w, ECpPCSji,]D̻8:utsTeemćʹe?t}Â2Ѷ(H &o=7Hab Yk̸귖5Ե+e,^>|4y8,-tp9+KɺU9ԭwU!?΋AQK$;ܭKX}Α?^ V*)s-u2+OesU}[խd@,kP88I|lprƯ= !j̓]ErVTi.埃'b[$Tu1By[cךּ,CIHe3 [j jmճ_ՐFO|t巙 YwRR-8X,uY5WlNS"EzWLJ|D*p l9(bT$r^,hʠRP`d~(75:z$?cE߰)B(dїu+3wLf>wM]<(Ԙ@MC]ۍ hi4 £58H-4|r4v4(&+ZjG0^Q)W*b&R~.q;<[/@S /Dg۪ڻ390},E6՛ H!jl LF2M;l盕I-LwGr˝)y(zV'\O ӻdqeC[+D& ;Ƒni}Oh .D:TJҘ}#Xg%oކ9Gew#K݆)eru mQI nOAa8 Se7pN*F^fiLW>d $)o,ߤ#}6/x\& 3 ,Uj8 8gC}-.;֣sh^m\.dUuX tbAjx. WZՓ 5h)IvAclӎo>.lʱP,5_IzS!5G/iC85/Xc G*yz;ˍ`1/c!V `kBzS)%ޅdN9+7cKH, 1WQd @aRiޟ*perDcARB6KdـG/8?IlyI#a'8W!ӈ`r|;Vcx/[p DxV)MVT2L k(82E=WmҊekczu! n|$pIP#!ak=M"%+7ˠکocԿO Hp*m^U b'H:#iX$O2sP嚖dP MiUF%w==`@_zd$W{Q<ꜱInthkHMw8D~=.,nh<Ƶt˟^f)Ny':m!oh^Kw f9c]dV? grN^9!.W&Ky>*1BCYv r=6.cxFJ=L\r,yNu ;x-)=F,|4*튀k4|ジ,M^1+safecopy-1.7/test/test12/test.sh0000755000175100001440000000141011726745164015655 0ustar ravenusers#!/bin/sh test_name="safecopy, correct handling of include blocks when marking badblocks (bug #2854324)" source "../libtestsuite.sh" function test_current() { testsuite_debug "copying reference files for safecopy" cp "test1.dat" "$testsuite_tmpdir/test1.dat" >/dev/null 2>&1 testsuite_debug "Test, safecopy must not overwrite data between include blocks" LD_PRELOAD="$preload" $safecopy -M "MARKBAAD" -R 2 -b 1024 -f 1* -I iblocks debug "$testsuite_tmpdir/test1.dat" >"$testsuite_tmpdir/test1.out" 2>&1 if [ $? != 1 ]; then testsuite_error "Run of safecopy returned wrong exit code. Output:" testsuite_debug_file "$testsuite_tmpdir/test1.out" fi testsuite_assert_files_identical "test1.dat" "$testsuite_tmpdir/test1.dat" } testsuite_runtest safecopy-1.7/test/test12/iblocks0000644000175100001440000000001711251753652015704 0ustar ravenusers3 4 5 12 13 14 safecopy-1.7/test/test2/0000755000175100001440000000000011726756524014264 5ustar ravenuserssafecopy-1.7/test/test2/simulator.cfg0000644000175100001440000000011111202053543016731 0ustar ravenusersblocksize=1024 filesize=10240 source=test.dat softfailcount=2 softfail=2 safecopy-1.7/test/test2/test2.dat0000644000175100001440000002400011202053543015767 0ustar ravenusersŁcA< B줡YW#G`=m|^@1q3|Mf Si+HبV!BXw =vEgSf6$FW/~$5ìaN{:3{nսQ` #$׍(v_n""P#4ܕ{ Gc/DjLVŞ#LeA׭gV͊\?JE\;SAMcJZ RA%ߗdi =(@L9dj\l(3ZDQOkK3އjZ 3@An(GCZ9X'k*.zɘں㆕6Ƨ0\؅D5G#eTOPf'xoW6o` 4RGLv Eh$s7[dheuUm2RNU6\2As.akc ƬS9ڵX[ŮN1l9R%LwKbHD;c86=C([KZfd xg;LKWz'MwyGᱚE\}oi Gc+`v9eɹikʠn)p8X(bI)Ѐloטк?Rl\rdhUWCV1uȂV?3U`a :c[*^j +K, ѶrcqcJ<=AczgzNL }__nQ3dF0#u?$S/-\a7RDN!zZ% ۾Ppu[ >!Z%+p$t=rW~ǃgAبyf;`oPUiIZ*΅M&VY/ps{ex[^+[y1d|CACk:ȬՉS夐\04愞^ReɎMѼb\]>\F1[+RBMI¾-}54HufɱYRlF]cxYKaDSmcr4y[~^Էig:1\1 ZX.x%_h*g;tX$'#ne;+z )8hڠd&,W":*rs0ɴ[ v7>clO6N<$?$"ŒVwvL]7lBd6#Q^T4O@Թυǃa*1;1d?d+>` D׭yiI|+h aD{9(7h*[Z97R%xQI\^,W"<di=Bwbd x wVJ $Єȵ>޲3TJŷWp1F}K7 L{A꺫r(c,E<>so_#Ak7炊*=:P!?Jk)(;0F~Քff_9 un=J0f"99KMpޜ)dPftph 4Ek}J+e~ܐSQrZEN5FQeKZ;:n߯"F.MXP2]w5U#Wʼn $5Cakz$bkgzc0@)ߊBlqz>7%5N=`D[,|@6B1;vYW2ii8mk%-7E.(&hz*Ç+G X)giۋR[s5bRl9Kx֛S@LkclVU2Slj\+$߸E+԰k )&H lڷ@8Lfm"0TGz{NlWy*y:H֎)'Pa͸57D`3F$JP,#o+29$8KB<)Vў ,Ө, b'Qb l4|-xV {q󀻯M)^{_{ՑZ$tvq=M(&~#F(EGZJd-ӌE5Ī5ⶱ/$Ċq/<F#t5R B/k~!G`'[%N _@lyЂsuJ 9g]̲Zhu ܻ2}y~%rO}vKbQmyH8nW1^k!\@;P҈4ō8}d1ѽlcL{ݯ[PqQ:M;Y)֍˗z!rCymBKYu-8ًE1k"5FdvG`>8fi;2MJi${[cFifC\[)QaĢ#n1.o#rP#=p%Z"YnZ*РHF*qU 3W%8>Ȗޫ0_VPE2BIF0u0JUcY]i{:@1E$4%,*I D`%@M!+19(Ӓ65dq1 (DZ,(pw4ULU!r`FOC<gRI$hz\-^qh*nSo;/;rq'= C Cq_@-9VsNL/2劵u0XuEv@Bm}n`0]0wS SQ\=00lx['|849m` Ț]ܯ_rzfNy JhmWyzc.6KWN' sPi0~ʖɍsx% ת8 QQf:\F;!lrļ~%D#b:ЯXC^VRQfkE0Ų+^2k4^昚߆ ٧Aǡ~AR1\_~So&[DVQZ'RJ)aChx;i3G +bTוtaM^6Lye(}405yWu:UUN, Q:3ͼ -v 0El Ъ[EwExݍLPBfFUfn.*A^IMYӱldk_ V7 3 ѕo99{io#ǐwi(KJ1zǢlU(Qc+v`Rh%sL7F]t"yxY,1~>_c*V"ϑ`S^RM@iz+*by>&=b7Kneq`m+׺|;gԀ8_3MO'(E?yr[& x/cT 5{J3PΗj}2UB@p`B9H`'\P9}{\N!6F}Tb5)Rx XekRepdick^b; &U?:?Sٟ8n r? Zݛ%<7g`|3:~4G<`CD 9@YK%f^Q>Sd&ٙE ־s =় 8Gu5"v  FwZT,xN OCYly|4E4<8Muo ygE t:?-&HV/*ҧ*$jJX"pFmV Zj2ŽߧP]j\va]]U:q@AbʒBJU :ʙ/eHp_S(%9)C6%FBZ&qh8&/TQ{>E޼4Z(i"> >y/V0 /M HQezcp*op*OV6n)g)Q6Q=$c*Bƚ ?.&+XgEܚoYgL|߅l& I/ѡI'> ~:\@/w8V|79gv"IpWВ k!>֯z~>̜GVio|:'v< 0مd"~[ HrŒoj"Wn,8W+U~@Vۅazܠsvyf+Hz:kbů@< (*&p;`;/!=Y aE٩لZ O˹=,TٺX\q8>{K}3qq)W >:LYBT6+0jwƠ[>{'08`yYc~b#yu1ih<7tqWJYfeܐHQ"*V hfDIt"TR:#Q2ȠJf}1BOo'60m'2ubsO3: 4\e  檊ZqZ Uǐ15@`<[l^ЏwLWXvAm>3Xߐo˫NqH?l҅a\T.ګ5InNPU9A`-vgx}/Fhzt-^XBhfk#:#t4Ę3GivG-4ZWuϒ?ꌋ A͇9YcRB415^˒G~d@՗UH@b?GG۳qԔ>Hꆖ%=[3Y CK8r,Kg Z+"JgnLEfd,͒_r`xrm뱃l⳽Nk̗q8k(Ȟt!,6Y.yp?-g9T[++ GGV-~"J~Qt0%zHϷvY 6͇y(doޠ7(>|/qc5J"$jiV!bЈ5k$y!) wX7̀Y}&Z yVeO[fHWboN} XС|fvAk C\H^lO*P9cR*ىD6? 41()6 8\؉@A=#2(TTَFB 8Y3hT23H[e!w 7Z ~YNeP6秛cȾď<0_yzl7͇ L d}P!2 A7J<#w2oDjzH2 ^{۾sg#wƱhڛ.j~6&^]hwcTRwCnRZ1$=ŋԎ7@,D bh2fL#aYj_+a_9A+fB>(H Y  ?mlZxZ\l6/V$K0'# .ND2+GFj: õWXm@0`\qބrL &B1 s:JQC XR*Q,tƉYw5Rj!ż0ίab&S|-KdBP[5N۵- <_PK^bH29iPbpyQ y[֡ڃ[ a" =F 0#I-&m2uOP&8<U==gRw>9rאg4ZBԳhɗ/R8RĪzX'\.m,2?jO{LFC@/#ǵ?0el to]Idp˕1ReQuBuQ +ET 46- Oqѷe=Nf0[Tv<%֌*{h,CkZ \!ӪɉW*#R1yX-;6sBBR1BrzEN ~9C\8- 4HHT h~a>^qG32$tqw  SYb0C UK@h}晤<Ϥ6;#G`<X*k3EǀCpp[*U'gݒ1; 8ePΘMEQJHSRU8EHOW+ۄlODX\LY)jk1Q idT҂{9I`i!ÉcD,*!{#vr0%_a6L@s0`h`s3v] QU]?Ԗ9E{HZt\tMsofd4]<>zySrhZùp3&v_t Kh3/6Vt. Tiw_u/q 0v` -ł]FtacŦđ sxwu!>)Ҿ͉{?safecopy-1.7/test/test2/test.dat0000644000175100001440000002400011202053543015705 0ustar ravenusersŁcA< B줡YW#G`=m|^@1q3|Mf Si+HبV!BXw =vEgSf6$FW/~$5ìaN{:3{nսQ` #$׍(v_n""P#4ܕ{ Gc/DjLVŞ#LeA׭gV͊\?JE\;SAMcJZ RA%ߗdi =(@L9dj\l(3ZDQOkK3އjZ 3@An(GCZ9X'k*.zɘں㆕6Ƨ0\؅D5G#eTOPf'xoW6o` 4RGLv Eh$s7[dheuUm2RNU6\2As.akc ƬS9ڵX[ŮN1l9R%LwKbHD;c86=C([KZfd xg;LKWz'MwyGᱚE\}oi Gc+`v9eɹikʠn)p8X(bI)Ѐloטк?Rl\rdhUWCV1uȂV?3U`a :c[*^j +K, ѶrcqcJ<=AczgzNL }__nQ3dF0#u?$S/-\a7RDN!zZ% ۾Ppu[ >!Z%+p$t=rW~ǃgAبyf;`oPUiIZ*΅M&VY/ps{ex[^+[y1d|CACk:ȬՉS夐\04愞^ReɎMѼb\]>\F1[+RBMI¾-}54HufɱYRlF]cxYKaDSmcr4y[~^Էig:1\1 ZX.x%_h*g;tX$'#ne;+z )8hڠd&,W":*rs0ɴ[ v7>clO6N<$?$"ŒVwvL]7lBd6#Q^T4O@Թυǃa*1;1d?d+>` D׭yiI|+h aD{9(7h*[Z97R%xQI\^,W"<di=Bwbd x wVJ $Єȵ>޲3TJŷWp1F}K7 L{A꺫r(c,E<>so_#Ak7炊*=:P!?Jk)og y(<<|`,/&zQt6lv40զcfU[ua(.8$RG>)8]xY0hNyD82dzv ӟ hn^%ڽsx8_(og?K>x8Fr=BU:v'>,,xfk/jZ͋NkYkTʂM,VK%vkA!5NR'c-<6Yf^Q4 p `' g}1ˏdx74qӧ9:iɰW=`)Cgw[:߀,{A &&D_Z_y,fk55$W ;+F:~8Hph7b E=QOw4)^|كvD'\˸!İ|gn|Hw+) ([t-G5'W)ëVd$jjvA$o֩jI"=u: Y'Άĩ&'J۵mdi.O=PlW)So\s9Vj{c쩄NKBS@*x4+h;z-]~Y+o$_ZX.h"]7;2M`a%ҪX69b^ q79r8("@InZ20ƣvi* 𔛖vr`pbb=gO~T}ނãIoI 'h ϧq ]: OB(;0F~Քff_9 un=J0f"99KMpޜ)dPftph 4Ek}J+e~ܐSQrZEN5FQeKZ;:n߯"F.MXP2]w5U#Wʼn $5Cakz$bkgzc0@)ߊBlqz>7%5N=`D[,|@6B1;vYW2ii8mk%-7E.(&hz*Ç+G X)giۋR[s5bRl9Kx֛S@LkclVU2Slj\+$߸E+԰k )&H lڷ@8Lfm"0TGz{NlWy*y:H֎)'Pa͸57D`3F$JP,#o+29$8KB<)Vў ,Ө, b'Qb l4|-xV {q󀻯M)^{_{ՑZ$tvq=M(&~#F(EGZJd-ӌE5Ī5ⶱ/$Ċq/<F#t5R B/k~!G`'[%N _@lyЂsuJ 9g]̲Zhu ܻ2}y~%rO}vKbQmyH8nW1^k!\@;P҈4ō8}d1ѽlcL{ݯ[PqQ:M;Y)֍˗z!rCymBKYu-8ًE1k"5FdvG`>8fi;2MJi${[cFifC\[)QaĢ#n1.o#rP#=p%Z"YnZ*РHF*qU 3W%8>Ȗޫ0_VPE2BIF0u0JUcY]i{:@1E$4%,*I D`%@M!+19(Ӓ65dq1 (DZ,(pw4ULU!r`FOC<gRI$hz\-^qh*nSo;/;rq'= C Cq_@-9VsNL/2劵u0XuEv@Bm}n`0]0wS SQ\=00lx['|849m` Ț]ܯ_rzfNy JhmWyzc.6KWN' sPi0~ʖɍsx% ת8 QQf:\F;!lrļ~%D#b:ЯXC^VRQfkE0Ų+^2k4^昚߆ ٧Aǡ~AR1\_~So&[DVQZ'RJ)aChx;i3G +bTוtaM^6Lye(}405yWu:UUN, Q:3ͼ -v 0El Ъ[EwExݍLPBfFUfn.*A^IMYӱldk_ V7 3 ѕo99{io#ǐwi(KJ1zǢlU(Qc+v`Rh%sL7F]t"yxY,1~>_c*V"ϑ`S^RM@iz+*by>&=b7Kneq`m+׺|;gԀ8_3MO'(E?yr[& x/cT 5{J3PΗj}2UB@p`B9H`'\P9}{\N!6F}Tb5)Rx XekRepdick^b; &U?:?Sٟ8n r? Zݛ%<7g`|3:~4G<`CD 9@YK%f^Q>Sd&ٙE ־s =় 8Gu5"v  FwZT,xN OCYly|4E4<8Muo ygE t:?-&HV/*ҧ*$jJX"pFmV Zj2ŽߧP]j\va]]U:q@AbʒBJU :ʙ/eHp_S(%9)C6%FBZ&qh8&/TQ{>E޼4Z(i"> >y/V0 /M HQezcp*op*OV6n)g)Q6Q=$c*Bƚ ?.&+XgEܚoYgL|߅l& I/ѡI'> ~:\@/w8V|79gv"IpWВ k!>֯z~>̜GVio|:'v< 0مd"~[ HrŒoj"Wn,8W+U~@Vۅazܠsvyf+Hz:kbů@< (*&p;`;/!=Y aE٩لZ O˹=,TٺX\q8>{K}3qq)W >:LYBT6+0jwƠ[>{'08`yYc~b#yu1ih<7tqWJYfeܐHQ"*V hfDIt"TR:#Q2ȠJf}1BOo'60m'2ubsO3: 4\e  檊ZqZ Uǐ15@`<[l^ЏwLWXvAm>3Xߐo˫NqH?l҅a\T.ګ5InNPU9A`-vgx}/Fhzt-^XBhfk#:#t4Ę3GivG-4ZWuϒ?ꌋ A͇9YcRB415^˒G~d@՗UH@b?GG۳qԔ>Hꆖ%=[3Y CK8r,Kg Z+"JgnLEfd,͒_r`xrm뱃l⳽Nk̗q8k(Ȟt!,6Y.yp?-g9T[++ GGV-~"J~Qt0%zHϷvY 6͇y(doޠ7(>|/qc5J"$jiV!bЈ5k$y!) wX7̀Y}&Z yVeO[fHWboN} XС|fvAk C\H^lO*P9cR*ىD6? 41()6 8\؉@A=#2(TTَFB 8Y3hT23H[e!w 7Z ~YNeP6秛cȾď<0_yzl7͇ L d}P!2 A7J<#w2oDjzH2 ^{۾sg#wƱhڛ.j~6&^]hwcTRwCnRZ1$=ŋԎ7@,D bh2fL#aYj_+a_9A+fB>(H Y  ?mlZxZ\l6/V$K0'# .ND2+GFj: õWXm@0`\qބrL &B1 s:JQC XR*Q,tƉYw5Rj!ż0ίab&S|-KdBP[5N۵- <_PK^bH29iPbpyQ y[֡ڃ[ a" =F 0#I-&m2uOP&8<U==gRw>9rאg4ZBԳhɗ/R8RĪzX'\.m,2?jO{LFC@/#ǵ?0el to]Idp˕1ReQuBuQ +ET 46- Oqѷe=Nf0[Tv<%֌*{h,CkZ \!ӪɉW*#R1yX-;6sBBR1BrzEN ~9C\8- 4HHT h~a>^qG32$tqw  SYb0C UK@h}晤<Ϥ6;#G`<X*k3EǀCpp[*U'gݒ1; 8ePΘMEQJHSRU8EHOW+ۄlODX\LY)jk1Q idT҂{9I`i!ÉcD,*!{#vr0%_a6L@s0`h`s3v] QU]?Ԗ9E{HZt\tMsofd4]<>zySrhZùp3&v_t Kh3/6Vt. Tiw_u/q 0v` -ł]FtacŦđ sxwu!>)Ҿ͉{?safecopy-1.7/test/test2/test1.badblocks0000644000175100001440000000000011202053543017134 0ustar ravenuserssafecopy-1.7/test/test2/test.sh0000755000175100001440000000501311726747607015603 0ustar ravenusers#!/bin/sh test_name="safecopy, restoring data with non-persistant IO errors" source "../libtestsuite.sh" function test_current() { testsuite_debug "Test if the data gets copied successfully despite of recoverable read errors." LD_PRELOAD="$preload" $safecopy -R 3 -b 1024 -f 4* -o "$testsuite_tmpdir/test1.badblocks" debug "$testsuite_tmpdir/test1.dat" >"$testsuite_tmpdir/test1.out" 2>&1 if [ $? != 0 ]; then testsuite_error "Run of safecopy returned wrong exit code. Output:" testsuite_debug_file "$testsuite_tmpdir/test1.out" fi testsuite_assert_files_identical "test.dat" "$testsuite_tmpdir/test1.dat" testsuite_assert_files_identical "test1.badblocks" "$testsuite_tmpdir/test1.badblocks" testsuite_debug "Test if the data gets partially copied with unrecoverable read errors." LD_PRELOAD="$preload" $safecopy -R 2 -b 1024 -f 4* -o "$testsuite_tmpdir/test2.badblocks" debug "$testsuite_tmpdir/test2.dat" >"$testsuite_tmpdir/test2.out" 2>&1 if [ $? != 1 ]; then testsuite_error "Run of safecopy returned wrong exit code. Output:" testsuite_debug_file "$testsuite_tmpdir/test2.out" fi testsuite_assert_files_identical "test2.dat" "$testsuite_tmpdir/test2.dat" testsuite_assert_files_identical "test2.badblocks" "$testsuite_tmpdir/test2.badblocks" testsuite_debug "Test if the data gets copied successfully despite of recoverable read errors (with marking option)." LD_PRELOAD="$preload" $safecopy -M "MARKBAAD" -R 3 -b 1024 -f 4* -o "$testsuite_tmpdir/test3.badblocks" debug "$testsuite_tmpdir/test3.dat" >"$testsuite_tmpdir/test3.out" 2>&1 if [ $? != 0 ]; then testsuite_error "Run of safecopy returned wrong exit code. Output:" testsuite_debug_file "$testsuite_tmpdir/test3.out" fi testsuite_assert_files_identical "test.dat" "$testsuite_tmpdir/test3.dat" testsuite_assert_files_identical "test1.badblocks" "$testsuite_tmpdir/test3.badblocks" testsuite_debug "Test if the data gets partially copied with unrecoverable read errors and the rest marked as bad." LD_PRELOAD="$preload" $safecopy -M "MARKBAAD" -R 2 -b 1024 -f 4* -o "$testsuite_tmpdir/test4.badblocks" debug "$testsuite_tmpdir/test4.dat" >"$testsuite_tmpdir/test4.out" 2>&1 if [ $? != 1 ]; then testsuite_error "Run of safecopy returned wrong exit code. Output:" testsuite_debug_file "$testsuite_tmpdir/test4.out" fi testsuite_assert_files_identical "test4.dat" "$testsuite_tmpdir/test4.dat" testsuite_assert_files_identical "test2.badblocks" "$testsuite_tmpdir/test4.badblocks" } testsuite_runtest safecopy-1.7/test/test2/test2.badblocks0000644000175100001440000000000211202053543017137 0ustar ravenusers2 safecopy-1.7/test/test2/test4.dat0000644000175100001440000002400011202053543015771 0ustar ravenusersŁcA< B줡YW#G`=m|^@1q3|Mf Si+HبV!BXw =vEgSf6$FW/~$5ìaN{:3{nսQ` #$׍(v_n""P#4ܕ{ Gc/DjLVŞ#LeA׭gV͊\?JE\;SAMcJZ RA%ߗdi =(@L9dj\l(3ZDQOkK3އjZ 3@An(GCZ9X'k*.zɘں㆕6Ƨ0\؅D5G#eTOPf'xoW6o` 4RGLv Eh$s7[dheuUm2RNU6\2As.akc ƬS9ڵX[ŮN1l9R%LwKbHD;c86=C([KZfd xg;LKWz'MwyGᱚE\}oi Gc+`v9eɹikʠn)p8X(bI)Ѐloטк?Rl\rdhUWCV1uȂV?3U`a :c[*^j +K, ѶrcqcJ<=AczgzNL }__nQ3dF0#u?$S/-\a7RDN!zZ% ۾Ppu[ >!Z%+p$t=rW~ǃgAبyf;`oPUiIZ*΅M&VY/ps{ex[^+[y1d|CACk:ȬՉS夐\04愞^ReɎMѼb\]>\F1[+RBMI¾-}54HufɱYRlF]cxYKaDSmcr4y[~^Էig:1\1 ZX.x%_h*g;tX$'#ne;+z )8hڠd&,W":*rs0ɴ[ v7>clO6N<$?$"ŒVwvL]7lBd6#Q^T4O@Թυǃa*1;1d?d+>` D׭yiI|+h aD{9(7h*[Z97R%xQI\^,W"<di=Bwbd x wVJ $Єȵ>޲3TJŷWp1F}K7 L{A꺫r(c,E<>so_#Ak7炊*=:P!?Jk)MARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAADMARKBAAD(;0F~Քff_9 un=J0f"99KMpޜ)dPftph 4Ek}J+e~ܐSQrZEN5FQeKZ;:n߯"F.MXP2]w5U#Wʼn $5Cakz$bkgzc0@)ߊBlqz>7%5N=`D[,|@6B1;vYW2ii8mk%-7E.(&hz*Ç+G X)giۋR[s5bRl9Kx֛S@LkclVU2Slj\+$߸E+԰k )&H lڷ@8Lfm"0TGz{NlWy*y:H֎)'Pa͸57D`3F$JP,#o+29$8KB<)Vў ,Ө, b'Qb l4|-xV {q󀻯M)^{_{ՑZ$tvq=M(&~#F(EGZJd-ӌE5Ī5ⶱ/$Ċq/<F#t5R B/k~!G`'[%N _@lyЂsuJ 9g]̲Zhu ܻ2}y~%rO}vKbQmyH8nW1^k!\@;P҈4ō8}d1ѽlcL{ݯ[PqQ:M;Y)֍˗z!rCymBKYu-8ًE1k"5FdvG`>8fi;2MJi${[cFifC\[)QaĢ#n1.o#rP#=p%Z"YnZ*РHF*qU 3W%8>Ȗޫ0_VPE2BIF0u0JUcY]i{:@1E$4%,*I D`%@M!+19(Ӓ65dq1 (DZ,(pw4ULU!r`FOC<gRI$hz\-^qh*nSo;/;rq'= C Cq_@-9VsNL/2劵u0XuEv@Bm}n`0]0wS SQ\=00lx['|849m` Ț]ܯ_rzfNy JhmWyzc.6KWN' sPi0~ʖɍsx% ת8 QQf:\F;!lrļ~%D#b:ЯXC^VRQfkE0Ų+^2k4^昚߆ ٧Aǡ~AR1\_~So&[DVQZ'RJ)aChx;i3G +bTוtaM^6Lye(}405yWu:UUN, Q:3ͼ -v 0El Ъ[EwExݍLPBfFUfn.*A^IMYӱldk_ V7 3 ѕo99{io#ǐwi(KJ1zǢlU(Qc+v`Rh%sL7F]t"yxY,1~>_c*V"ϑ`S^RM@iz+*by>&=b7Kneq`m+׺|;gԀ8_3MO'(E?yr[& x/cT 5{J3PΗj}2UB@p`B9H`'\P9}{\N!6F}Tb5)Rx XekRepdick^b; &U?:?Sٟ8n r? Zݛ%<7g`|3:~4G<`CD 9@YK%f^Q>Sd&ٙE ־s =় 8Gu5"v  FwZT,xN OCYly|4E4<8Muo ygE t:?-&HV/*ҧ*$jJX"pFmV Zj2ŽߧP]j\va]]U:q@AbʒBJU :ʙ/eHp_S(%9)C6%FBZ&qh8&/TQ{>E޼4Z(i"> >y/V0 /M HQezcp*op*OV6n)g)Q6Q=$c*Bƚ ?.&+XgEܚoYgL|߅l& I/ѡI'> ~:\@/w8V|79gv"IpWВ k!>֯z~>̜GVio|:'v< 0مd"~[ HrŒoj"Wn,8W+U~@Vۅazܠsvyf+Hz:kbů@< (*&p;`;/!=Y aE٩لZ O˹=,TٺX\q8>{K}3qq)W >:LYBT6+0jwƠ[>{'08`yYc~b#yu1ih<7tqWJYfeܐHQ"*V hfDIt"TR:#Q2ȠJf}1BOo'60m'2ubsO3: 4\e  檊ZqZ Uǐ15@`<[l^ЏwLWXvAm>3Xߐo˫NqH?l҅a\T.ګ5InNPU9A`-vgx}/Fhzt-^XBhfk#:#t4Ę3GivG-4ZWuϒ?ꌋ A͇9YcRB415^˒G~d@՗UH@b?GG۳qԔ>Hꆖ%=[3Y CK8r,Kg Z+"JgnLEfd,͒_r`xrm뱃l⳽Nk̗q8k(Ȟt!,6Y.yp?-g9T[++ GGV-~"J~Qt0%zHϷvY 6͇y(doޠ7(>|/qc5J"$jiV!bЈ5k$y!) wX7̀Y}&Z yVeO[fHWboN} XС|fvAk C\H^lO*P9cR*ىD6? 41()6 8\؉@A=#2(TTَFB 8Y3hT23H[e!w 7Z ~YNeP6秛cȾď<0_yzl7͇ L d}P!2 A7J<#w2oDjzH2 ^{۾sg#wƱhڛ.j~6&^]hwcTRwCnRZ1$=ŋԎ7@,D bh2fL#aYj_+a_9A+fB>(H Y  ?mlZxZ\l6/V$K0'# .ND2+GFj: õWXm@0`\qބrL &B1 s:JQC XR*Q,tƉYw5Rj!ż0ίab&S|-KdBP[5N۵- <_PK^bH29iPbpyQ y[֡ڃ[ a" =F 0#I-&m2uOP&8<U==gRw>9rאg4ZBԳhɗ/R8RĪzX'\.m,2?jO{LFC@/#ǵ?0el to]Idp˕1ReQuBuQ +ET 46- Oqѷe=Nf0[Tv<%֌*{h,CkZ \!ӪɉW*#R1yX-;6sBBR1BrzEN ~9C\8- 4HHT h~a>^qG32$tqw  SYb0C UK@h}晤<Ϥ6;#G`<X*k3EǀCpp[*U'gݒ1; 8ePΘMEQJHSRU8EHOW+ۄlODX\LY)jk1Q idT҂{9I`i!ÉcD,*!{#vr0%_a6L@s0`h`s3v] QU]?Ԗ9E{HZt\tMsofd4]<>zySrhZùp3&v_t Kh3/6Vt. Tiw_u/q 0v` -ł]FtacŦđ sxwu!>)Ҿ͉{?safecopy-1.7/depcomp0000755000000000000000000004426711474672310013267 0ustar rootroot#! /bin/sh # depcomp - compile a program generating dependencies as side-effects scriptversion=2009-04-28.21; # UTC # Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009 Free # Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Alexandre Oliva . case $1 in '') echo "$0: No command. Try \`$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: depcomp [--help] [--version] PROGRAM [ARGS] Run PROGRAMS ARGS to compile a file, generating dependencies as side-effects. Environment variables: depmode Dependency tracking mode. source Source file read by `PROGRAMS ARGS'. object Object file output by `PROGRAMS ARGS'. DEPDIR directory where to store dependencies. depfile Dependency file to output. tmpdepfile Temporary file to use when outputing dependencies. libtool Whether libtool is used (yes/no). Report bugs to . EOF exit $? ;; -v | --v*) echo "depcomp $scriptversion" exit $? ;; esac if test -z "$depmode" || test -z "$source" || test -z "$object"; then echo "depcomp: Variables source, object and depmode must be set" 1>&2 exit 1 fi # Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. depfile=${depfile-`echo "$object" | sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} rm -f "$tmpdepfile" # Some modes work just like other modes, but use different flags. We # parameterize here, but still list the modes in the big case below, # to make depend.m4 easier to write. Note that we *cannot* use a case # here, because this file can only contain one case statement. if test "$depmode" = hp; then # HP compiler uses -M and no extra arg. gccflag=-M depmode=gcc fi if test "$depmode" = dashXmstdout; then # This is just like dashmstdout with a different argument. dashmflag=-xM depmode=dashmstdout fi cygpath_u="cygpath -u -f -" if test "$depmode" = msvcmsys; then # This is just like msvisualcpp but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u="sed s,\\\\\\\\,/,g" depmode=msvisualcpp fi case "$depmode" in gcc3) ## gcc 3 implements dependency tracking that does exactly what ## we want. Yay! Note: for some reason libtool 1.4 doesn't like ## it if -MD -MP comes after the -MF stuff. Hmm. ## Unfortunately, FreeBSD c89 acceptance of flags depends upon ## the command line argument order; so add the flags where they ## appear in depend2.am. Note that the slowdown incurred here ## affects only configure: in makefiles, %FASTDEP% shortcuts this. for arg do case $arg in -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; *) set fnord "$@" "$arg" ;; esac shift # fnord shift # $arg done "$@" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi mv "$tmpdepfile" "$depfile" ;; gcc) ## There are various ways to get dependency output from gcc. Here's ## why we pick this rather obscure method: ## - Don't want to use -MD because we'd like the dependencies to end ## up in a subdir. Having to rename by hand is ugly. ## (We might end up doing this anyway to support other compilers.) ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like ## -MM, not -M (despite what the docs say). ## - Using -M directly means running the compiler twice (even worse ## than renaming). if test -z "$gccflag"; then gccflag=-MD, fi "$@" -Wp,"$gccflag$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz ## The second -e expression handles DOS-style file names with drive letters. sed -e 's/^[^:]*: / /' \ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" ## This next piece of magic avoids the `deleted header file' problem. ## The problem is that when a header file which appears in a .P file ## is deleted, the dependency causes make to die (because there is ## typically no way to rebuild the header). We avoid this by adding ## dummy dependencies for each header file. Too bad gcc doesn't do ## this for us directly. tr ' ' ' ' < "$tmpdepfile" | ## Some versions of gcc put a space before the `:'. On the theory ## that the space means something, we add a space to the output as ## well. ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; sgi) if test "$libtool" = yes; then "$@" "-Wp,-MDupdate,$tmpdepfile" else "$@" -MDupdate "$tmpdepfile" fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files echo "$object : \\" > "$depfile" # Clip off the initial element (the dependent). Don't try to be # clever and replace this with sed code, as IRIX sed won't handle # lines with more than a fixed number of characters (4096 in # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; # the IRIX cc adds comments like `#:fec' to the end of the # dependency line. tr ' ' ' ' < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ tr ' ' ' ' >> "$depfile" echo >> "$depfile" # The second pass generates a dummy entry for each header file. tr ' ' ' ' < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ >> "$depfile" else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile # "include basename.Plo" scheme. echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; aix) # The C for AIX Compiler uses -M and outputs the dependencies # in a .u file. In older versions, this file always lives in the # current directory. Also, the AIX compiler puts `$object:' at the # start of each line; $object doesn't have directory information. # Version 6 uses the directory in both cases. dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` test "x$dir" = "x$object" && dir= base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` if test "$libtool" = yes; then tmpdepfile1=$dir$base.u tmpdepfile2=$base.u tmpdepfile3=$dir.libs/$base.u "$@" -Wc,-M else tmpdepfile1=$dir$base.u tmpdepfile2=$dir$base.u tmpdepfile3=$dir$base.u "$@" -M fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then # Each line is of the form `foo.o: dependent.h'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" # That's a tab and a space in the []. sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile # "include basename.Plo" scheme. echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; icc) # Intel's C compiler understands `-MD -MF file'. However on # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c # ICC 7.0 will fill foo.d with something like # foo.o: sub/foo.c # foo.o: sub/foo.h # which is wrong. We want: # sub/foo.o: sub/foo.c # sub/foo.o: sub/foo.h # sub/foo.c: # sub/foo.h: # ICC 7.1 will output # foo.o: sub/foo.c sub/foo.h # and will wrap long lines using \ : # foo.o: sub/foo.c ... \ # sub/foo.h ... \ # ... "$@" -MD -MF "$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each line is of the form `foo.o: dependent.h', # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this invocation # correctly. Breaking it into two sed invocations is a workaround. sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp2) # The "hp" stanza above does not work with aCC (C++) and HP's ia64 # compilers, which have integrated preprocessors. The correct option # to use with these is +Maked; it writes dependencies to a file named # 'foo.d', which lands next to the object file, wherever that # happens to be. # Much of this is similar to the tru64 case; see comments there. dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` test "x$dir" = "x$object" && dir= base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` if test "$libtool" = yes; then tmpdepfile1=$dir$base.d tmpdepfile2=$dir.libs/$base.d "$@" -Wc,+Maked else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d "$@" +Maked fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile1" "$tmpdepfile2" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile" # Add `dependent.h:' lines. sed -ne '2,${ s/^ *// s/ \\*$// s/$/:/ p }' "$tmpdepfile" >> "$depfile" else echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" "$tmpdepfile2" ;; tru64) # The Tru64 compiler uses -MD to generate dependencies as a side # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put # dependencies in `foo.d' instead, so we check for that too. # Subdirectories are respected. dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` test "x$dir" = "x$object" && dir= base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` if test "$libtool" = yes; then # With Tru64 cc, shared objects can also be used to make a # static library. This mechanism is used in libtool 1.4 series to # handle both shared and static libraries in a single compilation. # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. # # With libtool 1.5 this exception was removed, and libtool now # generates 2 separate objects for the 2 libraries. These two # compilations output dependencies in $dir.libs/$base.o.d and # in $dir$base.o.d. We have to check for both files, because # one of the two compilations can be disabled. We should prefer # $dir$base.o.d over $dir.libs/$base.o.d because the latter is # automatically cleaned when .libs/ is deleted, while ignoring # the former would cause a distcleancheck panic. tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 tmpdepfile2=$dir$base.o.d # libtool 1.5 tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 "$@" -Wc,-MD else tmpdepfile1=$dir$base.o.d tmpdepfile2=$dir$base.d tmpdepfile3=$dir$base.d tmpdepfile4=$dir$base.d "$@" -MD fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" # That's a tab and a space in the []. sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" else echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; #nosideeffect) # This comment above is used by automake to tell side-effect # dependency tracking mechanisms from slower ones. dashmstdout) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout, regardless of -o. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove `-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done test -z "$dashmflag" && dashmflag=-M # Require at least two characters before searching for `:' # in the target name. This is to cope with DOS-style filenames: # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. "$@" $dashmflag | sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" tr ' ' ' ' < "$tmpdepfile" | \ ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; dashXmstdout) # This case only exists to satisfy depend.m4. It is never actually # run, as this mode is specially recognized in the preamble. exit 1 ;; makedepend) "$@" || exit $? # Remove any Libtool call if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # X makedepend shift cleared=no eat=no for arg do case $cleared in no) set ""; shift cleared=yes ;; esac if test $eat = yes; then eat=no continue fi case "$arg" in -D*|-I*) set fnord "$@" "$arg"; shift ;; # Strip any option that makedepend may not understand. Remove # the object too, otherwise makedepend will parse it as a source file. -arch) eat=yes ;; -*|$object) ;; *) set fnord "$@" "$arg"; shift ;; esac done obj_suffix=`echo "$object" | sed 's/^.*\././'` touch "$tmpdepfile" ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" sed '1,2d' "$tmpdepfile" | tr ' ' ' ' | \ ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" "$tmpdepfile".bak ;; cpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove `-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done "$@" -E | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | sed '$ s: \\$::' > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" cat < "$tmpdepfile" >> "$depfile" sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; msvisualcpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi IFS=" " for arg do case "$arg" in -o) shift ;; $object) shift ;; "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") set fnord "$@" shift shift ;; *) set fnord "$@" "$arg" shift shift ;; esac done "$@" -E 2>/dev/null | sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" echo " " >> "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" rm -f "$tmpdepfile" ;; msvcmsys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; none) exec "$@" ;; *) echo "Unknown depmode $depmode" 1>&2 exit 1 ;; esac exit 0 # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: safecopy-1.7/autogen.sh0000755000175100001440000001065511233347645014245 0ustar ravenusers#!/bin/sh # Run this to generate all the initial makefiles, etc. srcdir=`dirname $0` PKG_NAME="the package." DIE=0 NOCONFIGURE=1 (autoconf --version) < /dev/null > /dev/null 2>&1 || { echo echo "**Error**: You must have \`autoconf' installed to." echo "Download the appropriate package for your distribution," echo "or get the source tarball at ftp://ftp.gnu.org/pub/gnu/" DIE=1 } (grep "^AM_PROG_LIBTOOL" $srcdir/configure.in >/dev/null) && { (libtool --version) < /dev/null > /dev/null 2>&1 || { echo echo "**Error**: You must have \`libtool' installed." echo "Get ftp://ftp.gnu.org/pub/gnu/libtool-1.2d.tar.gz" echo "(or a newer version if it is available)" DIE=1 } } grep "^AM_GNU_GETTEXT" $srcdir/configure.in >/dev/null && { grep "sed.*POTFILES" $srcdir/configure.in >/dev/null || \ (gettext --version) < /dev/null > /dev/null 2>&1 || { echo echo "**Error**: You must have \`gettext' installed." echo "Get ftp://alpha.gnu.org/gnu/gettext-0.10.35.tar.gz" echo "(or a newer version if it is available)" DIE=1 } } grep "^AM_GNOME_GETTEXT" $srcdir/configure.in >/dev/null && { grep "sed.*POTFILES" $srcdir/configure.in >/dev/null || \ (gettext --version) < /dev/null > /dev/null 2>&1 || { echo echo "**Error**: You must have \`gettext' installed." echo "Get ftp://alpha.gnu.org/gnu/gettext-0.10.35.tar.gz" echo "(or a newer version if it is available)" DIE=1 } } (automake --version) < /dev/null > /dev/null 2>&1 || { echo echo "**Error**: You must have \`automake' installed." echo "Get ftp://ftp.gnu.org/pub/gnu/automake-1.3.tar.gz" echo "(or a newer version if it is available)" DIE=1 NO_AUTOMAKE=yes } # if no automake, don't bother testing for aclocal test -n "$NO_AUTOMAKE" || (aclocal --version) < /dev/null > /dev/null 2>&1 || { echo echo "**Error**: Missing \`aclocal'. The version of \`automake'" echo "installed doesn't appear recent enough." echo "Get ftp://ftp.gnu.org/pub/gnu/automake-1.3.tar.gz" echo "(or a newer version if it is available)" DIE=1 } if test "$DIE" -eq 1; then exit 1 fi if test -z "$*"; then echo "**Warning**: I am going to run \`configure' with no arguments." echo "If you wish to pass any to it, please specify them on the" echo \`$0\'" command line." echo fi case $CC in xlc ) am_opt=--include-deps;; esac for coin in `find $srcdir -maxdepth 1 -name configure.in -print` do dr=`dirname $coin` if test -f $dr/NO-AUTO-GEN; then echo skipping $dr -- flagged as no auto-gen else echo processing $dr macrodirs=`sed -n -e 's,AM_ACLOCAL_INCLUDE(\(.*\)),\1,gp' < $coin` ( cd $dr aclocalinclude="$ACLOCAL_FLAGS" for k in $macrodirs; do if test -d $k; then aclocalinclude="$aclocalinclude -I $k" ##else ## echo "**Warning**: No such directory \`$k'. Ignored." fi done if grep "^AM_GNU_GETTEXT" configure.in >/dev/null; then if grep "sed.*POTFILES" configure.in >/dev/null; then : do nothing -- we still have an old unmodified configure.in else echo "Creating $dr/aclocal.m4 ..." test -r $dr/aclocal.m4 || touch $dr/aclocal.m4 echo "Running gettextize... Ignore non-fatal messages." echo "no" | gettextize --force --copy echo "Making $dr/aclocal.m4 writable ..." test -r $dr/aclocal.m4 && chmod u+w $dr/aclocal.m4 fi fi if grep "^AM_GNOME_GETTEXT" configure.in >/dev/null; then echo "Creating $dr/aclocal.m4 ..." test -r $dr/aclocal.m4 || touch $dr/aclocal.m4 echo "Running gettextize... Ignore non-fatal messages." echo "no" | gettextize --force --copy echo "Making $dr/aclocal.m4 writable ..." test -r $dr/aclocal.m4 && chmod u+w $dr/aclocal.m4 fi if grep "^AM_PROG_LIBTOOL" configure.in >/dev/null; then echo "Running libtoolize..." libtoolize --force --copy fi echo "Running aclocal $aclocalinclude ..." aclocal $aclocalinclude if grep "^AM_CONFIG_HEADER" configure.in >/dev/null; then echo "Running autoheader..." autoheader fi echo "Running automake --gnu $am_opt ..." automake --add-missing --gnu $am_opt echo "Running autoconf ..." autoconf ) fi done #conf_flags="--enable-maintainer-mode --enable-compile-warnings" #--enable-iso-c if test x$NOCONFIGURE = x; then echo Running $srcdir/configure $conf_flags "$@" ... $srcdir/configure $conf_flags "$@" \ && echo Now type \`make\' to compile $PKG_NAME else echo Skipping configure process. fi safecopy-1.7/specification.txt0000644000175100001440000002315511233347645015624 0ustar ravenusersSafecopy copies data from a source file to a destination file. To specify the intended behaviour, such is defined by the pseudo-code sequences below. Sequences are STARTUP: initializes program execution. COPY: copies data more or less sequentially. RECOVER: recover from an IO error - reopen source file. SEEK-START: find the true beginning of a bad area. SKIP: skip over bad data. MARK: mark or list bad data in output files. SEEK-END: find the exact end of a bad area. END: cleanup and program end. The following variables are referenced in this specification: READPOS: the to be read next data in the source file. SPOS: the actual file pointer on the source file. REMAIN: the size of to be read data in the next read operation. RETRY: a counter for retrying a certain read position. Safecopy starts by executing the STARTUP sequence. Sequences: STARTUP: Initializes and auto detects program parameters. - check command line options for validity, abort execution if invalid parameters are given. - check source file parameters via stat() system call and find out default block and file sizes in case they are not overridden by command line parameters. - initialize the default block size (-b) defaulting to hardware block size. - initialize the skip block size (-f) defaulting to -b * 16. - initialize the skip resolution (-r) defaulting to -b. - read in and initialize all other command line parameters. - open include file (-I) and include block size (-i) if given. - open exclude file (-X) and exclude block size (-x) if given. - open badblock output file (-o) if given. - open source file. - open destination file, open in truncate mode, deleting content if -I has not been specified. - on failure of any of the above abort safecopy execution and exit. - set file size pointer READPOS to -s if specified or zero otherwise. - set input file pointer SPOS to zero - set REMAIN to zero. - set RETRY to -R - execute the COPY sequence. RECOVER: The recover sequence will make a file handle that become unusable after an IO error usable again and can be called in COPY and SKIP mode - close source file. - for as many times as the -Z option specified repeat: - re-open source file. - seek to position 0 in source file. - attempt to read one byte of data, then discard, ignoring errors. - close source file. - re-open source file. - seek to the last block of the source file. - attempt to read one byte of data, then discard, ignoring errors. - close source file - open source file again - on failure abort safecopy execution and exit. - set file pointer SPOS to zero. - end of sequence, resume previous operation. MARK: The mark sequence will write marker data to the destination file and list bad blocks into the badblocks output file. It gets two parameters FROM and TO pointing to file positions. - if an include file is given with -I and the area from FROM to TO is not completely covered by include blocks of size -i, then - execute the MARK sequence recursively on all data areas covered by include blocks only. - End of sequence, resume previous operation. Any data beyond the size of the destination file prior to program execution and beyond the last include block in the include file is treated as if it was covered by such include blocks. - if an exclude file is given with -X and the area from FROM to TO is partially covered by exclude blocks of size -x, then - execute the MARK sequence recursively on all data areas NOT covered by exclude blocks only. - End of sequence, resume previous operation. - if a badblocks output file -o has been specified, then write all blocks of size -b covered by the area from FROM up to but not including the address TO, that have not yet been written to the badblocks output file -o to the badblocks output file -o. - if a marker data string has been specified with -M then write this string into the destination file from FROM up to but not including address TO. If a start offset has been given with -s the data is instead written to the area from FROM minus -s up to but not including TO minus -s. - end of sequence, resume previous operation. END: The end sequence finishes safecopys execution and closes all files. - if the calling sequence was SKIP and the source position READPOS is smaller then the determined file size of the source, then execute the MARK sequence FROM the last data copied in COPY mode, TO the file size of the input file. - close all files, free used memory. - exit program. COPY: The copy sequence handles regular data copying from source to destination. - if a maximum length has been specified with -l and READPOS is greater than -s plus -l, execute the END sequence. - if REMAIN is zero then - if in include file was specified with -I and READPOS is not within an include block and not both beyond the last such include block and beyond the size of the destination file prior to program execution then - set READPOS to the start of the next include block. - set REMAIN to be the difference between READPOS and the next block boundary in the source file according to -b - if an exclude file was specified with -X then - if READPOS is covered by an exclude block, set READPOS to the end of said exclude block, then restart the COPY sequence. - if READPOS is not covered but any data between READPOS and READPOS+REMAIN is covered by exclude blocks, set REMAIN to the exact size of data not covered by exclude blocks starting at READPOS. - if READPOS is not equal to SPOS, seek within the source file to READPOS. Set both SPOS and READPOS to the file pointer after the seek attempt. If the seek attempt failed, this means setting READPOS to SPOS. If the seek tried to seek beyond the end of the input file, execute the END sequence. - attempt to read REMAIN bytes from the source file. - if reading from source failed, then - reduce RETRY by one. - if RETRY is zero, then - execute the SEEK-START sequence. - else - execute the RECOVER sequence. - else if data was read. - set RETRY to the -R value. - set READPOS to READPOS plus the bytes successfully read. - set SPOS to the new source file position (=READPOS) - seek in destination file to position READPOS minus the start offset -s. - write the read data to the destination file at that position. - set REMAIN to the old value of REMAIN min us the bytes successfully read. - else if EOF in input is reached, execute the END sequence. - re-execute the COPY sequence. SEEK-START: The seek-start sequence tries to find the exact beginning of a bad area. - execute the RECOVER sequence. - if REMAIN is bigger than resolution -r then - set REMAIN to 50% of its old value. - attempt to seek to position READPOS in source. On failure execute the END sequence. - attempt to read REMAIN bytes at position READPOS in source. - if the read attempt failed, then - re-execute the SEEK_START sequence. - else - set RETRY to the -R value. - set READPOS to READPOS plus the bytes successfully read. - set SPOS to the new source file position (=READPOS) - seek in destination file to position READPOS minus the start offset -s. - write the read data to the destination file at that position. - set REMAIN to the old value of REMAIN min us the bytes successfully read. - execute the COPY sequence. - else - execute the SKIP sequence. SKIP: The skip sequence skips over a bad area in the input file. - execute the RECOVER sequence. - if the calling sequence was SKIP then - execute the MARK sequence FROM the attempted reading position of the last SKIP execution TO the current read position READPOS - else - execute the MARK sequence FROM the current reading position READPOS TO the current reading position READPOS. - increase READPOS by the skip size (-f) rounded to the last block boundary of size (-b) - if an exclude file was specified with -X then - if READPOS is covered by an exclude block, set READPOS to the end of said exclude block, then check again. - if READPOS is not covered but any data between READPOS and READPOS+REMAIN is covered by exclude blocks, set REMAIN to the exact size of data not covered by exclude blocks starting at READPOS. - attempt to seek to READPOS in source. On failure execute the END sequence. - attempt to read one block of data from READPOS in source. - if the read attempt succeeded, then - set REMAIN to -f - execute the SEEK-END sequence. - else - re-execute the SKIP sequence SEEK-END: The seek-end sequence tries to find the end of a bad area to then continue copying there. - if REMAIN is bigger than resolution -r then - decrease REMAIN by 50%. - decrease READPOS by REMAIN. - if an exclude file was specified with -X then - if READPOS is covered by an exclude block, set READPOS to the end of said exclude block, then check again. - if READPOS is not covered but any data between READPOS and READPOS+REMAIN is covered by exclude blocks, set REMAIN to the exact size of data not covered by exclude blocks starting at READPOS. - attempt to seek to READPOS in source. On failure execute the COPY sequence. - attempt to read one block of data from READPOS in source.. - if the read attempt succeeded then - re-execute the SEEK-END sequence. - else - increase READPOS by REMAIN. - re-execute the SEEK-END sequence. - else - execute the MARK sequence FROM the last failed read position from previous SKIP sequence TO READPOS. - execute the COPY sequence. safecopy-1.7/simulator/0000755000175100001440000000000011726756532014262 5ustar ravenuserssafecopy-1.7/simulator/Makefile.in0000644000175100001440000005171011726756531016332 0ustar ravenusers# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : subdir = . DIST_COMMON = README $(am__configure_deps) $(srcdir)/../install-sh \ $(srcdir)/../missing $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in $(srcdir)/config.h.in \ $(top_srcdir)/configure AUTHORS COPYING ChangeLog INSTALL NEWS ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno config.status.lineno mkinstalldirs = $(install_sh) -d CONFIG_HEADER = config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir dist dist-all distcheck ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) am__remove_distdir = \ { test ! -d "$(distdir)" \ || { find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ && rm -fr "$(distdir)"; }; } am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" DIST_ARCHIVES = $(distdir).tar.gz GZIP_ENV = --best distuninstallcheck_listfiles = find . -type f -print distcleancheck_listfiles = find . -type f -print ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ SUBDIRS = src all: config.h $(MAKE) $(AM_MAKEFLAGS) all-recursive .SUFFIXES: am--refresh: @: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ echo ' cd $(srcdir) && $(AUTOMAKE) --gnu'; \ $(am__cd) $(srcdir) && $(AUTOMAKE) --gnu \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ echo ' $(SHELL) ./config.status'; \ $(SHELL) ./config.status;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) $(SHELL) ./config.status --recheck $(top_srcdir)/configure: $(am__configure_deps) $(am__cd) $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): $(am__aclocal_m4_deps) $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) $(am__aclocal_m4_deps): config.h: stamp-h1 @if test ! -f $@; then \ rm -f stamp-h1; \ $(MAKE) $(AM_MAKEFLAGS) stamp-h1; \ else :; fi stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status @rm -f stamp-h1 cd $(top_builddir) && $(SHELL) ./config.status config.h $(srcdir)/config.h.in: $(am__configure_deps) ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) rm -f stamp-h1 touch $@ distclean-hdr: -rm -f config.h stamp-h1 # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) $(am__remove_distdir) test -d "$(distdir)" || mkdir "$(distdir)" @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done -test -n "$(am__skip_mode_fix)" \ || find "$(distdir)" -type d ! -perm -755 \ -exec chmod u+rwx,go+rx {} \; -o \ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ || chmod -R a+r "$(distdir)" dist-gzip: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__remove_distdir) dist-bzip2: distdir tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2 $(am__remove_distdir) dist-lzma: distdir tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma $(am__remove_distdir) dist-xz: distdir tardir=$(distdir) && $(am__tar) | xz -c >$(distdir).tar.xz $(am__remove_distdir) dist-tarZ: distdir tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z $(am__remove_distdir) dist-shar: distdir shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz $(am__remove_distdir) dist-zip: distdir -rm -f $(distdir).zip zip -rq $(distdir).zip $(distdir) $(am__remove_distdir) dist dist-all: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__remove_distdir) # This target untars the dist file and tries a VPATH configuration. Then # it guarantees that the distribution is self-contained by making another # tarfile. distcheck: dist case '$(DIST_ARCHIVES)' in \ *.tar.gz*) \ GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ *.tar.bz2*) \ bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ *.tar.lzma*) \ lzma -dc $(distdir).tar.lzma | $(am__untar) ;;\ *.tar.xz*) \ xz -dc $(distdir).tar.xz | $(am__untar) ;;\ *.tar.Z*) \ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ *.shar.gz*) \ GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ esac chmod -R a-w $(distdir); chmod a+w $(distdir) mkdir $(distdir)/_build mkdir $(distdir)/_inst chmod a-w $(distdir) test -d $(distdir)/_build || exit 0; \ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ && am__cwd=`pwd` \ && $(am__cd) $(distdir)/_build \ && ../configure --srcdir=.. --prefix="$$dc_install_base" \ $(DISTCHECK_CONFIGURE_FLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) dvi \ && $(MAKE) $(AM_MAKEFLAGS) check \ && $(MAKE) $(AM_MAKEFLAGS) install \ && $(MAKE) $(AM_MAKEFLAGS) installcheck \ && $(MAKE) $(AM_MAKEFLAGS) uninstall \ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ distuninstallcheck \ && chmod -R a-w "$$dc_install_base" \ && ({ \ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ } || { rm -rf "$$dc_destdir"; exit 1; }) \ && rm -rf "$$dc_destdir" \ && $(MAKE) $(AM_MAKEFLAGS) dist \ && rm -rf $(DIST_ARCHIVES) \ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ && cd "$$am__cwd" \ || exit 1 $(am__remove_distdir) @(echo "$(distdir) archives ready for distribution: "; \ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' distuninstallcheck: @$(am__cd) '$(distuninstallcheck_dir)' \ && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \ || { echo "ERROR: files left after uninstall:" ; \ if test -n "$(DESTDIR)"; then \ echo " (check DESTDIR support)"; \ fi ; \ $(distuninstallcheck_listfiles) ; \ exit 1; } >&2 distcleancheck: distclean @if test '$(srcdir)' = . ; then \ echo "ERROR: distcleancheck can only run from a VPATH build" ; \ exit 1 ; \ fi @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left in build directory after distclean:" ; \ $(distcleancheck_listfiles) ; \ exit 1; } >&2 check-am: all-am check: check-recursive all-am: Makefile config.h installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic mostlyclean-am distclean: distclean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -f Makefile distclean-am: clean-am distclean-generic distclean-hdr distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf $(top_srcdir)/autom4te.cache -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all \ ctags-recursive install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am am--refresh check check-am clean clean-generic \ ctags ctags-recursive dist dist-all dist-bzip2 dist-gzip \ dist-lzma dist-shar dist-tarZ dist-xz dist-zip distcheck \ distclean distclean-generic distclean-hdr distclean-tags \ distcleancheck distdir distuninstallcheck dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am tags tags-recursive uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: safecopy-1.7/simulator/src/0000755000175100001440000000000011726756531015050 5ustar ravenuserssafecopy-1.7/simulator/src/Makefile.in0000644000175100001440000003375711726756531017134 0ustar ravenusers# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : bin_PROGRAMS = libsimulatorlb.so.1.0$(EXEEXT) subdir = src DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" PROGRAMS = $(bin_PROGRAMS) am_libsimulatorlb_so_1_0_OBJECTS = simulatorlb.$(OBJEXT) libsimulatorlb_so_1_0_OBJECTS = $(am_libsimulatorlb_so_1_0_OBJECTS) libsimulatorlb_so_1_0_LDADD = $(LDADD) libsimulatorlb_so_1_0_LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(libsimulatorlb_so_1_0_LDFLAGS) $(LDFLAGS) -o $@ DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/../depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ SOURCES = $(libsimulatorlb_so_1_0_SOURCES) DIST_SOURCES = $(libsimulatorlb_so_1_0_SOURCES) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ libsimulatorlb_so_1_0_SOURCES = \ simulatorlb.c libsimulatorlb_so_1_0_LDFLAGS = -shared -nostdlib all: all-am .SUFFIXES: .SUFFIXES: .c .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)" @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p; \ then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS) libsimulatorlb.so.1.0$(EXEEXT): $(libsimulatorlb_so_1_0_OBJECTS) $(libsimulatorlb_so_1_0_DEPENDENCIES) @rm -f libsimulatorlb.so.1.0$(EXEEXT) $(libsimulatorlb_so_1_0_LINK) $(libsimulatorlb_so_1_0_OBJECTS) $(libsimulatorlb_so_1_0_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/simulatorlb.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c $< .c.obj: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) installdirs: for dir in "$(DESTDIR)$(bindir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-binPROGRAMS clean-generic mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-binPROGRAMS install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-binPROGRAMS .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \ clean-generic ctags distclean distclean-compile \ distclean-generic distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-binPROGRAMS \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \ uninstall-am uninstall-binPROGRAMS # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: safecopy-1.7/simulator/src/Makefile.am0000644000175100001440000000031211232136164017062 0ustar ravenusers## Process this file with automake to produce Makefile.in bin_PROGRAMS = \ libsimulatorlb.so.1.0 libsimulatorlb_so_1_0_SOURCES = \ simulatorlb.c libsimulatorlb_so_1_0_LDFLAGS = -shared -nostdlib safecopy-1.7/simulator/src/simulatorlb.c0000644000175100001440000003332511233605664017550 0ustar ravenusers/** * This file is copyright ©2009 Corvus Corax * Distributed under the terms of the GPL version 2 or higher */ #define _FILE_OFFSET_BITS 64 #include #ifdef USE_GNU_SOURCE #define _GNU_SOURCE #endif #define CONFIGFILE "simulator.cfg" #define MAXLIST 1000000 #include #include #include #include #include #include #include //#include #include //#include #ifndef _FCNTL_H #define _FCNTL_H 1 #include #endif #include static int (*realopen)(const char*,int, ...); static int (*realclose)(int); static off_t (*reallseek)(int,off_t,int); static ssize_t (*realread)(int,void*,size_t); void _init(void); int open(const char*,int,...); int open64(const char*,int,...); off_t lseek(int,off_t,int); off64_t lseek64(int,off64_t,int); ssize_t read(int,void*,size_t); int close(int); // these are needed on some newer glibc: int __open_2(const char*,int); int __open64_2(const char*,int); ssize_t write(int, const void *, size_t); struct timedata { off64_t sector; int failtime; int goodtime; }; static int mydesc=-1; static off_t current=0; static off_t oldcurrent=0; static struct timeval starttime,endtime; static unsigned long granularity, sleeptime, seeksleeptime; static struct timedata slowsector[MAXLIST]; static struct timedata slowsector[MAXLIST]; static struct timedata softerror[MAXLIST]; static int softerrorcount[MAXLIST]; static struct timedata harderror[MAXLIST]; static unsigned long slowsectordelay=0; static unsigned long sectorsleeptime=0; static int slowsectors=0; static int slowsectorptr=0; static int softerrors=0; static int softerrorptr=0; static int harderrors=0; static int harderrorptr=0; static int blocksize=1024; static int softfailcount=0; static int filesize=10240; static char filename[256]="/dev/urandom"; static int verbosity=1; // calculate difference in usecs between two struct timevals static inline long int timediff() { static long int usecs; usecs=endtime.tv_usec-starttime.tv_usec; usecs=usecs+((endtime.tv_sec-starttime.tv_sec)*1000000); return usecs; } static inline void dodelay(int factor) { static unsigned long x; x=1; x=x<granularity) { x.tv_sec=0; x.tv_nsec=1; nanosleep(&x,NULL); } gettimeofday(&endtime,NULL); timed=timediff(); } } static inline void sectorsleep() { // add to sleep time the time needed to seek to the current position static long difference; difference=(oldcurrent-current)/blocksize; oldcurrent=current; if (difference<0) difference=-difference; seeksleeptime=((difference*sectorsleeptime)/1000); } static void addtolist(struct timedata *array,int *count,struct timedata *value) { // insert value into sorted array of length *count if (*count==MAXLIST) { fprintf(stderr,"simulator error: cannot store any more sectors in list - out of hardcoded memory limit!\n"); return; } if (!*count) { // first element in list array[*count].sector=value->sector; array[*count].failtime=value->failtime; array[*count].goodtime=value->goodtime; *count=1; } else { if (value->sector>array[*count-1].sector) { // default case, add to end of list array[*count].sector=value->sector; array[*count].failtime=value->failtime; array[*count].goodtime=value->goodtime; *count=*count+1; } else { // stupid case, add somewhere else int t; for (t=*count-1; t>=0;t--) { // go back in the list to see where it has to be stuck in if (array[t].sector==value->sector) { // unless its already there return; } else if (array[t].sectorsector) { // no it wasnt, here we stick it in. memmove(&array[t+2],&array[t+1],((MAXLIST-t)-2)*sizeof(struct timedata)); array[t+1].sector=value->sector; array[t+1].failtime=value->failtime; array[t+1].goodtime=value->goodtime; *count=*count+1; return; } } // hmm we went through the entire list and only bigger elements // guess we have to stick it at the very start memmove(&array[1],&array[0],(MAXLIST-1)*sizeof(struct timedata)); array[0].sector=value->sector; array[0].failtime=value->failtime; array[0].goodtime=value->goodtime; *count=*count+1; return; } } } static inline int isinlist(struct timedata *array, int *pos, int *count,off64_t sector) { // tell if a value is ina sorted list, speed up assuming the list is asked sequentially if (!*count) return 0; if (sectorarray[*count-1].sector) return 0; if (sector==array[*count-1].sector) { *pos=*count-1; return 1; } // move current pointer forward if necessary while (*pos<*count-1 && sector>array[*pos].sector) { *pos=*pos+1; } // move current pointer backward if necessary while (*pos>0 && sector0) { current=(num2 & 15); num2=num2/16; if (current<10) { current+=48; } else { current+=87; } buffer[--pos]=current; } myprint(&buffer[pos]); } } static inline void myprintint(unsigned int num) { char buffer[33]; buffer[32]=0x0; unsigned int num2=num; char current='0'; int pos=32; if (num2==0) { myprint("0"); } else { while (num2>0) { current=(num2 % 10); num2=num2/10; current+=48; buffer[--pos]=current; } myprint(&buffer[pos]); } } void _init(void) { realopen=dlsym(RTLD_NEXT,"open"); realclose=dlsym(RTLD_NEXT,"close"); reallseek=dlsym(RTLD_NEXT,"lseek"); realread=dlsym(RTLD_NEXT,"read"); myprint("simulator initialising - reading config "CONFIGFILE"\n"); readoptions(); } int open(const char *pathname, int flags, ...) { int mode=0; if (flags & O_CREAT) { va_list ap; va_start (ap,flags); mode=va_arg(ap,int); va_end(ap); } return open64(pathname,flags,mode); } int __open_2(const char *pathname, int flags) { return open64(pathname,flags); } int open64(const char *pathname,int flags,...) { //va_list ap; int fd; int mode=0; if (flags & O_CREAT) { va_list ap; va_start (ap,flags); mode=va_arg(ap,int); va_end(ap); } if (strcmp(pathname,"debug")==0) { if (mydesc!=-1) { myprint("simulator open - file already openend, can't open twice!\n"); errno=ETXTBSY; return -1; } mydesc=realopen(filename,O_RDONLY); if (mydesc==-1) { perror("simulator couldnt open source"); } else { myprint("opening debug\n"); } return mydesc; } fd=realopen(pathname,flags,mode); return fd; } int __open64_2(const char *pathname, int flags) { return open64(pathname,flags); } int close(int fd) { if (fd==mydesc && mydesc!=-1) { myprint("closing debug\n"); mydesc=-1; } return realclose(fd); } off_t lseek(int filedes, off_t offset, int whence) { return lseek64(filedes,offset,whence); } off64_t lseek64(int filedes, off64_t offset, int whence) { off64_t newcurrent=0; if ( filedes==mydesc && mydesc!=-1) { if (whence==SEEK_SET) { myprint("seeking in debug: SEEK_SET to "); newcurrent=offset; } else if (whence==SEEK_CUR) { myprint("seeking in debug: SEEK_CUR to "); newcurrent=current+offset; } else if (whence==SEEK_END) { myprint("seeking in debug: SEEK_END to "); newcurrent=filesize+offset; } else { errno=EINVAL; return -1; } if (newcurrent>filesize) { errno=EINVAL; return -1; } current=newcurrent; myprintint(current); myprint("\n"); reallseek(filedes,current,SEEK_SET); return current; } return reallseek(filedes,offset,whence); } ssize_t read(int fd,void *buf,size_t count) { ssize_t result; int count1; int block1,block2; int max=filesize; //myprint("read called\n"); if ( fd==mydesc && mydesc!=-1) { gettimeofday(&starttime,NULL); result=count; myprint("reading from debug file: "); myprintint(count); myprint(" at position "); myprintint(current); if (current+count>filesize) { result=filesize-current; if (result<1) { myprint(" reads zero!\n"); return 0; } } sectorsleep(); block1=current/blocksize; block2=(current+result)/blocksize; if (isinlist(harderror,&harderrorptr,&harderrors,block1)) { myprint(" simulated hard failure!\n"); dodelay(harderror[harderrorptr].failtime); dosleep(); errno=EIO; return -1; } else if (isinlist(softerror,&softerrorptr,&softerrors,block1)) { if (softerrorcount[softerrorptr]++softfailcount+1) { // this code currently gets never reached, its just an example // of how inflicting permanent damage could be simulated myprint(" simulated soft failure turned hard!\n"); dodelay(softerror[softerrorptr].failtime); dosleep(); errno=EIO; return -1; } dodelay(softerror[softerrorptr].goodtime); myprint(" simulated soft recovery:"); softerrorcount[softerrorptr]-=2; } } else if (isinlist(slowsector,&slowsectorptr,&slowsectors,block1)) { dodelay(slowsector[slowsectorptr].goodtime); } else { dodelay(0); } for (count1=block1+1;count1<=block2;count1++) { if (max>count1*blocksize) { if (isinlist(softerror,&softerrorptr,&softerrors,count1)) { max=count1*blocksize; break; } else if (isinlist(harderror,&harderrorptr,&harderrors,count1)) { max=count1*blocksize; break; } else if(count1*blocksizemax) { myprint(" shrinks due to upcoming failure and "); result=max-current; } result= realread(fd,buf,result); current+=result; // no sectorsleep in continuous read - thats already calculated in through statistics gathering oldcurrent=current; myprint(" reads "); myprintint(result); myprint(" bytes\n"); dosleep(); return result; } return realread(fd,buf,count); } safecopy-1.7/simulator/COPYING0000644000175100001440000010451311202051045015271 0ustar ravenusers GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: Copyright (C) This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read . safecopy-1.7/simulator/AUTHORS0000644000175100001440000000000011202051012015262 0ustar ravenuserssafecopy-1.7/simulator/configure0000755000175100001440000060257411726756532016207 0ustar ravenusers#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.68. # # # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, # 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software # Foundation, Inc. # # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : else exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 test \$(( 1 + 1 )) = 2 || exit 1" if (eval "$as_required") 2>/dev/null; then : as_have_required=yes else as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir/$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : CONFIG_SHELL=$as_shell as_have_required=yes if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : break 2 fi fi done;; esac as_found=false done $as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : CONFIG_SHELL=$SHELL as_have_required=yes fi; } IFS=$as_save_IFS if test "x$CONFIG_SHELL" != x; then : # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV export CONFIG_SHELL case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec "$CONFIG_SHELL" $as_opts "$as_myself" ${1+"$@"} fi if test x$as_have_required = xno; then : $as_echo "$0: This script requires a shell more modern than all" $as_echo "$0: the shells that I found on your system." if test x${ZSH_VERSION+set} = xset ; then $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" $as_echo "$0: be upgraded to zsh 4.3.4 or later." else $as_echo "$0: Please tell bug-autoconf@gnu.org about your system, $0: including any error possibly output before this $0: message. Then install a modern shell, or manually run $0: the script under such a shell if you do have one." fi exit 1 fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -p'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -p' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi if test -x / >/dev/null 2>&1; then as_test_x='test -x' else if ls -dL / >/dev/null 2>&1; then as_ls_L_option=L else as_ls_L_option= fi as_test_x=' eval sh -c '\'' if test -d "$1"; then test -d "$1/."; else case $1 in #( -*)set "./$1";; esac; case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( ???[sx]*):;;*)false;;esac;fi '\'' sh ' fi as_executable_p=$as_test_x # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME= PACKAGE_TARNAME= PACKAGE_VERSION= PACKAGE_STRING= PACKAGE_BUGREPORT= PACKAGE_URL= ac_unique_file="configure.in" ac_subst_vars='am__EXEEXT_FALSE am__EXEEXT_TRUE LTLIBOBJS LIBOBJS EGREP GREP CPP am__fastdepCC_FALSE am__fastdepCC_TRUE CCDEPMODE AMDEPBACKSLASH AMDEP_FALSE AMDEP_TRUE am__quote am__include DEPDIR OBJEXT EXEEXT ac_ct_CC CPPFLAGS LDFLAGS CFLAGS CC am__untar am__tar AMTAR am__leading_dot SET_MAKE AWK mkdir_p MKDIR_P INSTALL_STRIP_PROGRAM STRIP install_sh MAKEINFO AUTOHEADER AUTOMAKE AUTOCONF ACLOCAL VERSION PACKAGE CYGPATH_W am__isrc INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL' ac_subst_files='' ac_user_opts=' enable_option_checking enable_dependency_tracking enable_debug ' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS CPP' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) as_fn_error $? "unrecognized option: \`$ac_option' Try \`$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe $as_echo "$as_me: WARNING: if you wanted to set the --build type, don't use --host. If a cross compiler is detected then cross compile mode will be used" >&2 elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || as_fn_error $? "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error $? "pwd does not report name of working directory" # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures this package to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/PACKAGE] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF Program names: --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program names _ACEOF fi if test -n "$ac_init_help"; then cat <<\_ACEOF Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --disable-dependency-tracking speeds up one-time build --enable-dependency-tracking do not reject slow dependency extractors --enable-debug enable debug symbols and disable optimization, (only for GCC, set per-compiler options via $CFLAGS environment variable, when using a different C compiler) and activate additional debug output Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory CPP C preprocessor Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to the package provider. _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for guested configure. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF configure generated by GNU Autoconf 2.68 Copyright (C) 2010 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## # ac_fn_c_try_compile LINENO # -------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_compile # ac_fn_c_try_link LINENO # ----------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_link # ac_fn_c_try_cpp LINENO # ---------------------- # Try to preprocess conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_cpp # ac_fn_c_try_run LINENO # ---------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. Assumes # that executables *can* be run. ac_fn_c_try_run () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then : ac_retval=0 else $as_echo "$as_me: program exited with status $ac_status" >&5 $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=$ac_status fi rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_run cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by $as_me, which was generated by GNU Autoconf 2.68. Invocation command line was $ $0 $@ _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. $as_echo "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo $as_echo "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo $as_echo "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then $as_echo "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then $as_echo "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && $as_echo "$as_me: caught signal $ac_signal" $as_echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h $as_echo "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_URL "$PACKAGE_URL" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. ac_site_file1=NONE ac_site_file2=NONE if test -n "$CONFIG_SITE"; then # We do not want a PATH search for config.site. case $CONFIG_SITE in #(( -*) ac_site_file1=./$CONFIG_SITE;; */*) ac_site_file1=$CONFIG_SITE;; *) ac_site_file1=./$CONFIG_SITE;; esac elif test "x$prefix" != xNONE; then ac_site_file1=$prefix/share/config.site ac_site_file2=$prefix/etc/config.site else ac_site_file1=$ac_default_prefix/share/config.site ac_site_file2=$ac_default_prefix/etc/config.site fi for ac_site_file in "$ac_site_file1" "$ac_site_file2" do test "x$ac_site_file" = xNONE && continue if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 $as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5; } fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 $as_echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 $as_echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 $as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 $as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 $as_echo "$as_me: former value: \`$ac_old_val'" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 $as_echo "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu am__api_version='1.11' ac_aux_dir= for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do if test -f "$ac_dir/install-sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f "$ac_dir/install.sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f "$ac_dir/shtool"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then as_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5 fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. # Reject install programs that cannot install multiple files. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 $as_echo_n "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then if ${ac_cv_path_install+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. # Account for people who put trailing slashes in PATH elements. case $as_dir/ in #(( ./ | .// | /[cC]/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else rm -rf conftest.one conftest.two conftest.dir echo one > conftest.one echo two > conftest.two mkdir conftest.dir if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && test -s conftest.one && test -s conftest.two && test -s conftest.dir/conftest.one && test -s conftest.dir/conftest.two then ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi fi done done ;; esac done IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 $as_echo "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 $as_echo_n "checking whether build environment is sane... " >&6; } # Just in case sleep 1 echo timestamp > conftest.file # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[\\\"\#\$\&\'\`$am_lf]*) as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; esac case $srcdir in *[\\\"\#\$\&\'\`$am_lf\ \ ]*) as_fn_error $? "unsafe srcdir value: \`$srcdir'" "$LINENO" 5;; esac # Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$*" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi rm -f conftest.file if test "$*" != "X $srcdir/configure conftest.file" \ && test "$*" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". as_fn_error $? "ls -t appears to fail. Make sure there is not a broken alias in your environment" "$LINENO" 5 fi test "$2" = conftest.file ) then # Ok. : else as_fn_error $? "newly created file is older than distributed files! Check your system clock" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } test "$program_prefix" != NONE && program_transform_name="s&^&$program_prefix&;$program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && program_transform_name="s&\$&$program_suffix&;$program_transform_name" # Double any \ or $. # By default was `s,x,x', remove it if useless. ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`missing' script is too old or missing" >&5 $as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} fi if test x"${install_sh}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi # Installed binaries are usually stripped using `strip' when the user # run `make install-strip'. However `strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the `STRIP' environment variable to overrule this program. if test "$cross_compiling" != no; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 $as_echo "$STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_STRIP="strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 $as_echo "$ac_ct_STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 $as_echo_n "checking for a thread-safe mkdir -p... " >&6; } if test -z "$MKDIR_P"; then if ${ac_cv_path_mkdir+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in mkdir gmkdir; do for ac_exec_ext in '' $ac_executable_extensions; do { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( 'mkdir (GNU coreutils) '* | \ 'mkdir (coreutils) '* | \ 'mkdir (fileutils) '4.1*) ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext break 3;; esac done done done IFS=$as_save_IFS fi test -d ./--version && rmdir ./--version if test "${ac_cv_path_mkdir+set}" = set; then MKDIR_P="$ac_cv_path_mkdir -p" else # As a last resort, use the slow shell script. Don't cache a # value for MKDIR_P within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. MKDIR_P="$ac_install_sh -d" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 $as_echo "$MKDIR_P" >&6; } mkdir_p="$MKDIR_P" case $mkdir_p in [\\/$]* | ?:[\\/]*) ;; */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; esac for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AWK+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_AWK="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 $as_echo "$AWK" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AWK" && break done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : $as_echo_n "(cached) " >&6 else cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } SET_MAKE= else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." am__isrc=' -I$(srcdir)' # test to see if srcdir already configured if test -f $srcdir/config.status; then as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi # Define the identity of the package. PACKAGE=libsimulator VERSION=1.0.0 cat >>confdefs.h <<_ACEOF #define PACKAGE "$PACKAGE" _ACEOF cat >>confdefs.h <<_ACEOF #define VERSION "$VERSION" _ACEOF # Some tools Automake needs. ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} # We need awk for the "check" target. The system "awk" is bad on # some platforms. # Always define AMTAR for backward compatibility. AMTAR=${AMTAR-"${am_missing_run}tar"} am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -' ac_config_headers="$ac_config_headers config.h" #AM_PROG_LIBTOOL #AC_PREREQ(2.5) #AC_ISC_POSIX CFLAGS="$CFLAGS -fPIC" #add a space to make these macros not add stupid stuff if it was unset DEPDIR="${am__leading_dot}deps" ac_config_commands="$ac_config_commands depfiles" am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 $as_echo_n "checking for style of include used by $am_make... " >&6; } am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # Ignore all kinds of additional output from `make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include am__quote= _am_result=GNU ;; esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=.include am__quote="\"" _am_result=BSD ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 $as_echo "$_am_result" >&6; } rm -f confinc confmf # Check whether --enable-dependency-tracking was given. if test "${enable_dependency_tracking+set}" = set; then : enableval=$enable_dependency_tracking; fi if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' fi if test "x$enable_dependency_tracking" != xno; then AMDEP_TRUE= AMDEP_FALSE='#' else AMDEP_TRUE='#' AMDEP_FALSE= fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 $as_echo_n "checking whether the C compiler works... " >&6; } ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else ac_file='' fi if test -z "$ac_file"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables See \`config.log' for more details" "$LINENO" 5; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 $as_echo_n "checking for C compiler default output file name... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 $as_echo "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 $as_echo_n "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest conftest$ac_cv_exeext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 $as_echo "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { FILE *f = fopen ("conftest.out", "w"); return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 $as_echo_n "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details" "$LINENO" 5; } fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 $as_echo "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 $as_echo_n "checking for suffix of object files... " >&6; } if ${ac_cv_objext+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 $as_echo "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if ${ac_cv_c_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if ${ac_cv_prog_cc_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu depcc="$CC" am_compiler_list= { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if ${am_cv_CC_dependencies_compiler_type+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with # Solaris 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvisualcpp | msvcmsys) # This compiler won't grok `-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 $as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing strerror" >&5 $as_echo_n "checking for library containing strerror... " >&6; } if ${ac_cv_search_strerror+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char strerror (); int main () { return strerror (); ; return 0; } _ACEOF for ac_lib in '' cposix; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_strerror=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_strerror+:} false; then : break fi done if ${ac_cv_search_strerror+:} false; then : else ac_cv_search_strerror=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_strerror" >&5 $as_echo "$ac_cv_search_strerror" >&6; } ac_res=$ac_cv_search_strerror if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if ${ac_cv_c_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if ${ac_cv_prog_cc_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu depcc="$CC" am_compiler_list= { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if ${am_cv_CC_dependencies_compiler_type+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with # Solaris 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvisualcpp | msvcmsys) # This compiler won't grok `-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 $as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if ${ac_cv_c_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if ${ac_cv_prog_cc_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu depcc="$CC" am_compiler_list= { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if ${am_cv_CC_dependencies_compiler_type+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with # Solaris 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvisualcpp | msvcmsys) # This compiler won't grok `-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 $as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi am_cv_prog_cc_stdc=$ac_cv_prog_cc_stdc ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 $as_echo_n "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if ${ac_cv_prog_CPP+:} false; then : $as_echo_n "(cached) " >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 $as_echo "$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 $as_echo_n "checking for grep that handles long lines and -e... " >&6; } if ${ac_cv_path_GREP+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$GREP"; then ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in grep ggrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_GREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_GREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_GREP"; then as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_GREP=$GREP fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 $as_echo "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 $as_echo_n "checking for egrep... " >&6; } if ${ac_cv_path_EGREP+:} false; then : $as_echo_n "(cached) " >&6 else if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else if test -z "$EGREP"; then ac_path_EGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in egrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_EGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_EGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_EGREP"; then as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_EGREP=$EGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 $as_echo "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if ${ac_cv_header_stdc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdc=yes else ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) return 2; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else ac_cv_header_stdc=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 $as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then $as_echo "#define STDC_HEADERS 1" >>confdefs.h fi # Check whether --enable-debug was given. if test "${enable_debug+set}" = set; then : enableval=$enable_debug; if test "x$enableval" = "xno"; then USE_DEBUG="no" else USE_DEBUG="yes" fi else USE_DEBUG="undef" fi #Set PACKAGE_DATA_DIR in config.h. if test "x${datadir}" = 'x${prefix}/share'; then if test "x${prefix}" = "xNONE"; then cat >>confdefs.h <<_ACEOF #define PACKAGE_DATA_DIR "${ac_default_prefix}/share/${PACKAGE}" _ACEOF else cat >>confdefs.h <<_ACEOF #define PACKAGE_DATA_DIR "${prefix}/share/${PACKAGE}" _ACEOF fi else cat >>confdefs.h <<_ACEOF #define PACKAGE_DATA_DIR "${datadir}/${PACKAGE}" _ACEOF fi #Set PACKAGE_SOURCE_DIR in config.h. packagesrcdir=`cd $srcdir && pwd` cat >>confdefs.h <<_ACEOF #define PACKAGE_SOURCE_DIR "${packagesrcdir}" _ACEOF #Use -Wall if we have gcc. if test "x$GCC" = "xyes"; then if test "x$USE_DEBUG" = "xyes"; then CFLAGS="$CFLAGS -O0 -g -Wall" else CFLAGS="$CFLAGS -O2 -finline-functions -fno-strict-aliasing -Wall"; fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlsym in -ldl" >&5 $as_echo_n "checking for dlsym in -ldl... " >&6; } if ${ac_cv_lib_dl_dlsym+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlsym (); int main () { return dlsym (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dl_dlsym=yes else ac_cv_lib_dl_dlsym=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlsym" >&5 $as_echo "$ac_cv_lib_dl_dlsym" >&6; } if test "x$ac_cv_lib_dl_dlsym" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBDL 1 _ACEOF LIBS="-ldl $LIBS" else as_fn_error $? "\"libdl is required\"" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking \"for RTLD_NEXT from dlfcn.h\"" >&5 $as_echo_n "checking \"for RTLD_NEXT from dlfcn.h\"... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #ifdef RTLD_NEXT yes #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "yes" >/dev/null 2>&1; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking \"for RTLD_NEXT from dlfcn.h with _GNU_SOURCE\"" >&5 $as_echo_n "checking \"for RTLD_NEXT from dlfcn.h with _GNU_SOURCE\"... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _GNU_SOURCE #include #ifdef RTLD_NEXT yes #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "yes" >/dev/null 2>&1; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } $as_echo "#define USE_GNU_SOURCE /**/" >>confdefs.h else as_fn_error $? "no" "$LINENO" 5 fi rm -f conftest* fi rm -f conftest* ac_config_files="$ac_config_files Makefile src/Makefile" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi else { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`$as_echo "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs if test -n "$EXEEXT"; then am__EXEEXT_TRUE= am__EXEEXT_FALSE='#' else am__EXEEXT_TRUE='#' am__EXEEXT_FALSE= fi if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then as_fn_error $? "conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 $as_echo "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -p'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -p' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi if test -x / >/dev/null 2>&1; then as_test_x='test -x' else if ls -dL / >/dev/null 2>&1; then as_ls_L_option=L else as_ls_L_option= fi as_test_x=' eval sh -c '\'' if test -d "$1"; then test -d "$1/."; else case $1 in #( -*)set "./$1";; esac; case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( ???[sx]*):;;*)false;;esac;fi '\'' sh ' fi as_executable_p=$as_test_x # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by $as_me, which was generated by GNU Autoconf 2.68. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac case $ac_config_headers in *" "*) set x $ac_config_headers; shift; ac_config_headers=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_headers="$ac_config_headers" config_commands="$ac_config_commands" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Configuration commands: $config_commands Report bugs to the package provider." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ config.status configured by $0, generated by GNU Autoconf 2.68, with options \\"\$ac_cs_config\\" Copyright (C) 2010 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' INSTALL='$INSTALL' MKDIR_P='$MKDIR_P' AWK='$AWK' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) $as_echo "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) $as_echo "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header as_fn_error $? "ambiguous option: \`$1' Try \`$0 --help' for more information.";; --help | --hel | -h ) $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX $as_echo "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # # INIT-COMMANDS # AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= ac_tmp= trap 'exit_status=$? : "${ac_tmp:=$tmp}" { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$ac_tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove sole $(srcdir), # ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" # Set up the scripts for CONFIG_HEADERS section. # No need to generate them if there are no CONFIG_HEADERS. # This happens for instance with `./config.status Makefile'. if test -n "$CONFIG_HEADERS"; then cat >"$ac_tmp/defines.awk" <<\_ACAWK || BEGIN { _ACEOF # Transform confdefs.h into an awk script `defines.awk', embedded as # here-document in config.status, that substitutes the proper values into # config.h.in to produce config.h. # Create a delimiter string that does not exist in confdefs.h, to ease # handling of long lines. ac_delim='%!_!# ' for ac_last_try in false false :; do ac_tt=`sed -n "/$ac_delim/p" confdefs.h` if test -z "$ac_tt"; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done # For the awk script, D is an array of macro values keyed by name, # likewise P contains macro parameters if any. Preserve backslash # newline sequences. ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* sed -n ' s/.\{148\}/&'"$ac_delim"'/g t rset :rset s/^[ ]*#[ ]*define[ ][ ]*/ / t def d :def s/\\$// t bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3"/p s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p d :bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3\\\\\\n"\\/p t cont s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p t cont d :cont n s/.\{148\}/&'"$ac_delim"'/g t clear :clear s/\\$// t bsnlc s/["\\]/\\&/g; s/^/"/; s/$/"/p d :bsnlc s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p b cont ' >$CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 for (key in D) D_is_set[key] = 1 FS = "" } /^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { line = \$ 0 split(line, arg, " ") if (arg[1] == "#") { defundef = arg[2] mac1 = arg[3] } else { defundef = substr(arg[1], 2) mac1 = arg[2] } split(mac1, mac2, "(") #) macro = mac2[1] prefix = substr(line, 1, index(line, defundef) - 1) if (D_is_set[macro]) { # Preserve the white space surrounding the "#". print prefix "define", macro P[macro] D[macro] next } else { # Replace #undef with comments. This is necessary, for example, # in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. if (defundef == "undef") { print "/*", prefix defundef, macro, "*/" next } } } { print } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 fi # test -n "$CONFIG_HEADERS" eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 $as_echo "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`$as_echo "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$ac_tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac ac_MKDIR_P=$MKDIR_P case $MKDIR_P in [\\/$]* | ?:[\\/]* ) ;; */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; esac _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 $as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t s&@INSTALL@&$ac_INSTALL&;t t s&@MKDIR_P@&$ac_MKDIR_P&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" case $ac_file in -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; :H) # # CONFIG_HEADER # if test x"$ac_file" != x-; then { $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" } >"$ac_tmp/config.h" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 $as_echo "$as_me: $ac_file is unchanged" >&6;} else rm -f "$ac_file" mv "$ac_tmp/config.h" "$ac_file" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 fi else $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ || as_fn_error $? "could not create -" "$LINENO" 5 fi # Compute "$ac_file"'s index in $config_headers. _am_arg="$ac_file" _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || $as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$_am_arg" : 'X\(//\)[^/]' \| \ X"$_am_arg" : 'X\(//\)$' \| \ X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$_am_arg" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'`/stamp-h$_am_stamp_count ;; :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 $as_echo "$as_me: executing $ac_file commands" >&6;} ;; esac case $ac_file$ac_mode in "depfiles":C) test x"$AMDEP_TRUE" != x"" || { # Autoconf 2.62 quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in *\'*) eval set x "$CONFIG_FILES" ;; *) set x $CONFIG_FILES ;; esac shift for mf do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named `Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then dirpart=`$as_dirname -- "$mf" || $as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$mf" : 'X\(//\)[^/]' \| \ X"$mf" : 'X\(//\)$' \| \ X"$mf" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$mf" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running `make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # When using ansi2knr, U may be empty or an underscore; expand it U=`sed -n 's/^U = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`$as_dirname -- "$file" || $as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$file" : 'X\(//\)[^/]' \| \ X"$file" : 'X\(//\)$' \| \ X"$file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir=$dirpart/$fdir; as_fn_mkdir_p # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done } ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: ----------------------------------------------------------------------- compile configuration completed successfully " >&5 $as_echo " ----------------------------------------------------------------------- compile configuration completed successfully " >&6; } safecopy-1.7/simulator/README0000644000175100001440000000000011202051065015102 0ustar ravenuserssafecopy-1.7/simulator/Makefile.am0000644000175100001440000000011311202051055016262 0ustar ravenusers## Process this file with automake to produce Makefile.in SUBDIRS = src safecopy-1.7/simulator/aclocal.m40000644000175100001440000010566711726756530016137 0ustar ravenusers# generated automatically by aclocal 1.11.1 -*- Autoconf -*- # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.68],, [m4_warning([this file was generated for autoconf 2.68. You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically `autoreconf'.])]) # Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_AUTOMAKE_VERSION(VERSION) # ---------------------------- # Automake X.Y traces this macro to ensure aclocal.m4 has been # generated from the m4 files accompanying Automake X.Y. # (This private macro should not be called outside this file.) AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.11' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. m4_if([$1], [1.11.1], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) # _AM_AUTOCONF_VERSION(VERSION) # ----------------------------- # aclocal traces this macro to find the Autoconf version. # This is a private macro too. Using m4_define simplifies # the logic in aclocal, which can simply ignore this definition. m4_define([_AM_AUTOCONF_VERSION], []) # AM_SET_CURRENT_AUTOMAKE_VERSION # ------------------------------- # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], [AM_AUTOMAKE_VERSION([1.11.1])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- # Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets # $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to # `$srcdir', `$srcdir/..', or `$srcdir/../..'. # # Of course, Automake must honor this variable whenever it calls a # tool from the auxiliary directory. The problem is that $srcdir (and # therefore $ac_aux_dir as well) can be either absolute or relative, # depending on how configure is run. This is pretty annoying, since # it makes $ac_aux_dir quite unusable in subdirectories: in the top # source directory, any form will work fine, but in subdirectories a # relative path needs to be adjusted first. # # $ac_aux_dir/missing # fails when called from a subdirectory if $ac_aux_dir is relative # $top_srcdir/$ac_aux_dir/missing # fails if $ac_aux_dir is absolute, # fails when called from a subdirectory in a VPATH build with # a relative $ac_aux_dir # # The reason of the latter failure is that $top_srcdir and $ac_aux_dir # are both prefixed by $srcdir. In an in-source build this is usually # harmless because $srcdir is `.', but things will broke when you # start a VPATH build or use an absolute $srcdir. # # So we could use something similar to $top_srcdir/$ac_aux_dir/missing, # iff we strip the leading $srcdir from $ac_aux_dir. That would be: # am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` # and then we would define $MISSING as # MISSING="\${SHELL} $am_aux_dir/missing" # This will work as long as MISSING is not called from configure, because # unfortunately $(top_srcdir) has no meaning in configure. # However there are other variables, like CC, which are often used in # configure, and could therefore not use this "fixed" $ac_aux_dir. # # Another solution, used here, is to always expand $ac_aux_dir to an # absolute PATH. The drawback is that using absolute paths prevent a # configured tree to be moved without reconfiguration. AC_DEFUN([AM_AUX_DIR_EXPAND], [dnl Rely on autoconf to set up CDPATH properly. AC_PREREQ([2.50])dnl # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` ]) # Copyright (C) 1996, 1997, 1999, 2000, 2001, 2002, 2003, 2005 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 4 # This was merged into AC_PROG_CC in Autoconf. AU_DEFUN([AM_PROG_CC_STDC], [AC_PROG_CC AC_DIAGNOSE([obsolete], [$0: your code should no longer depend upon `am_cv_prog_cc_stdc', but upon `ac_cv_prog_cc_stdc'. Remove this warning and the assignment when you adjust the code. You can also remove the above call to AC_PROG_CC if you already called it elsewhere.]) am_cv_prog_cc_stdc=$ac_cv_prog_cc_stdc ]) AU_DEFUN([fp_PROG_CC_STDC]) # AM_CONDITIONAL -*- Autoconf -*- # Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 9 # AM_CONDITIONAL(NAME, SHELL-CONDITION) # ------------------------------------- # Define a conditional. AC_DEFUN([AM_CONDITIONAL], [AC_PREREQ(2.52)dnl ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl AC_SUBST([$1_TRUE])dnl AC_SUBST([$1_FALSE])dnl _AM_SUBST_NOTMAKE([$1_TRUE])dnl _AM_SUBST_NOTMAKE([$1_FALSE])dnl m4_define([_AM_COND_VALUE_$1], [$2])dnl if $2; then $1_TRUE= $1_FALSE='#' else $1_TRUE='#' $1_FALSE= fi AC_CONFIG_COMMANDS_PRE( [if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then AC_MSG_ERROR([[conditional "$1" was never defined. Usually this means the macro was only invoked conditionally.]]) fi])]) # Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 10 # There are a few dirty hacks below to avoid letting `AC_PROG_CC' be # written in clear, in which case automake, when reading aclocal.m4, # will think it sees a *use*, and therefore will trigger all it's # C support machinery. Also note that it means that autoscan, seeing # CC etc. in the Makefile, will ask for an AC_PROG_CC use... # _AM_DEPENDENCIES(NAME) # ---------------------- # See how the compiler implements dependency checking. # NAME is "CC", "CXX", "GCJ", or "OBJC". # We try a few techniques and use that to set a single cache variable. # # We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was # modified to invoke _AM_DEPENDENCIES(CC); we would have a circular # dependency, and given that the user is not expected to run this macro, # just rely on AC_PROG_CC. AC_DEFUN([_AM_DEPENDENCIES], [AC_REQUIRE([AM_SET_DEPDIR])dnl AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl AC_REQUIRE([AM_MAKE_INCLUDE])dnl AC_REQUIRE([AM_DEP_TRACK])dnl ifelse([$1], CC, [depcc="$CC" am_compiler_list=], [$1], CXX, [depcc="$CXX" am_compiler_list=], [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'], [$1], UPC, [depcc="$UPC" am_compiler_list=], [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'], [depcc="$$1" am_compiler_list=]) AC_CACHE_CHECK([dependency style of $depcc], [am_cv_$1_dependencies_compiler_type], [if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_$1_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` fi am__universal=false m4_case([$1], [CC], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac], [CXX], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac]) for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with # Solaris 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvisualcpp | msvcmsys) # This compiler won't grok `-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_$1_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_$1_dependencies_compiler_type=none fi ]) AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) AM_CONDITIONAL([am__fastdep$1], [ test "x$enable_dependency_tracking" != xno \ && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) ]) # AM_SET_DEPDIR # ------------- # Choose a directory name for dependency files. # This macro is AC_REQUIREd in _AM_DEPENDENCIES AC_DEFUN([AM_SET_DEPDIR], [AC_REQUIRE([AM_SET_LEADING_DOT])dnl AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl ]) # AM_DEP_TRACK # ------------ AC_DEFUN([AM_DEP_TRACK], [AC_ARG_ENABLE(dependency-tracking, [ --disable-dependency-tracking speeds up one-time build --enable-dependency-tracking do not reject slow dependency extractors]) if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' fi AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) AC_SUBST([AMDEPBACKSLASH])dnl _AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl ]) # Generate code to set up dependency tracking. -*- Autoconf -*- # Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. #serial 5 # _AM_OUTPUT_DEPENDENCY_COMMANDS # ------------------------------ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], [{ # Autoconf 2.62 quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in *\'*) eval set x "$CONFIG_FILES" ;; *) set x $CONFIG_FILES ;; esac shift for mf do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named `Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then dirpart=`AS_DIRNAME("$mf")` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running `make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # When using ansi2knr, U may be empty or an underscore; expand it U=`sed -n 's/^U = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`AS_DIRNAME(["$file"])` AS_MKDIR_P([$dirpart/$fdir]) # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done } ])# _AM_OUTPUT_DEPENDENCY_COMMANDS # AM_OUTPUT_DEPENDENCY_COMMANDS # ----------------------------- # This macro should only be invoked once -- use via AC_REQUIRE. # # This code is only required when automatic dependency tracking # is enabled. FIXME. This creates each `.P' file that we will # need in order to bootstrap the dependency handling code. AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], [AC_CONFIG_COMMANDS([depfiles], [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) ]) # Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 8 # AM_CONFIG_HEADER is obsolete. It has been replaced by AC_CONFIG_HEADERS. AU_DEFUN([AM_CONFIG_HEADER], [AC_CONFIG_HEADERS($@)]) # Do all the work for Automake. -*- Autoconf -*- # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2008, 2009 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 16 # This macro actually does too much. Some checks are only needed if # your package does certain things. But this isn't really a big deal. # AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) # AM_INIT_AUTOMAKE([OPTIONS]) # ----------------------------------------------- # The call with PACKAGE and VERSION arguments is the old style # call (pre autoconf-2.50), which is being phased out. PACKAGE # and VERSION should now be passed to AC_INIT and removed from # the call to AM_INIT_AUTOMAKE. # We support both call styles for the transition. After # the next Automake release, Autoconf can make the AC_INIT # arguments mandatory, and then we can depend on a new Autoconf # release and drop the old call support. AC_DEFUN([AM_INIT_AUTOMAKE], [AC_PREREQ([2.62])dnl dnl Autoconf wants to disallow AM_ names. We explicitly allow dnl the ones we care about. m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl AC_REQUIRE([AC_PROG_INSTALL])dnl if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl # test to see if srcdir already configured if test -f $srcdir/config.status; then AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi AC_SUBST([CYGPATH_W]) # Define the identity of the package. dnl Distinguish between old-style and new-style calls. m4_ifval([$2], [m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl AC_SUBST([PACKAGE], [$1])dnl AC_SUBST([VERSION], [$2])], [_AM_SET_OPTIONS([$1])dnl dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,, [m4_fatal([AC_INIT should be called with package and version arguments])])dnl AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl _AM_IF_OPTION([no-define],, [AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl # Some tools Automake needs. AC_REQUIRE([AM_SANITY_CHECK])dnl AC_REQUIRE([AC_ARG_PROGRAM])dnl AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version}) AM_MISSING_PROG(AUTOCONF, autoconf) AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version}) AM_MISSING_PROG(AUTOHEADER, autoheader) AM_MISSING_PROG(MAKEINFO, makeinfo) AC_REQUIRE([AM_PROG_INSTALL_SH])dnl AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl AC_REQUIRE([AM_PROG_MKDIR_P])dnl # We need awk for the "check" target. The system "awk" is bad on # some platforms. AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AM_SET_LEADING_DOT])dnl _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], [_AM_PROG_TAR([v7])])]) _AM_IF_OPTION([no-dependencies],, [AC_PROVIDE_IFELSE([AC_PROG_CC], [_AM_DEPENDENCIES(CC)], [define([AC_PROG_CC], defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl AC_PROVIDE_IFELSE([AC_PROG_CXX], [_AM_DEPENDENCIES(CXX)], [define([AC_PROG_CXX], defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJC], [_AM_DEPENDENCIES(OBJC)], [define([AC_PROG_OBJC], defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl ]) _AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl dnl The `parallel-tests' driver may need to know about EXEEXT, so add the dnl `am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This macro dnl is hooked onto _AC_COMPILER_EXEEXT early, see below. AC_CONFIG_COMMANDS_PRE(dnl [m4_provide_if([_AM_COMPILER_EXEEXT], [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl ]) dnl Hook into `_AC_COMPILER_EXEEXT' early to learn its expansion. Do not dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further dnl mangled by Autoconf and run in a shell conditional statement. m4_define([_AC_COMPILER_EXEEXT], m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) # When config.status generates a header, we must update the stamp-h file. # This file resides in the same directory as the config header # that is generated. The stamp files are numbered to have different names. # Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the # loop where config.status creates the headers, so we can generate # our stamp files there. AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], [# Compute $1's index in $config_headers. _am_arg=$1 _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) # Copyright (C) 2001, 2003, 2005, 2008 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_INSTALL_SH # ------------------ # Define $install_sh. AC_DEFUN([AM_PROG_INSTALL_SH], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl if test x"${install_sh}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi AC_SUBST(install_sh)]) # Copyright (C) 2003, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 2 # Check whether the underlying file-system supports filenames # with a leading dot. For instance MS-DOS doesn't. AC_DEFUN([AM_SET_LEADING_DOT], [rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null AC_SUBST([am__leading_dot])]) # Check to see how 'make' treats includes. -*- Autoconf -*- # Copyright (C) 2001, 2002, 2003, 2005, 2009 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 4 # AM_MAKE_INCLUDE() # ----------------- # Check to see how make treats includes. AC_DEFUN([AM_MAKE_INCLUDE], [am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. AC_MSG_CHECKING([for style of include used by $am_make]) am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # Ignore all kinds of additional output from `make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include am__quote= _am_result=GNU ;; esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=.include am__quote="\"" _am_result=BSD ;; esac fi AC_SUBST([am__include]) AC_SUBST([am__quote]) AC_MSG_RESULT([$_am_result]) rm -f confinc confmf ]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- # Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 6 # AM_MISSING_PROG(NAME, PROGRAM) # ------------------------------ AC_DEFUN([AM_MISSING_PROG], [AC_REQUIRE([AM_MISSING_HAS_RUN]) $1=${$1-"${am_missing_run}$2"} AC_SUBST($1)]) # AM_MISSING_HAS_RUN # ------------------ # Define MISSING if not defined so far and test if it supports --run. # If it does, set am_missing_run to use it, otherwise, to nothing. AC_DEFUN([AM_MISSING_HAS_RUN], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([missing])dnl if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= AC_MSG_WARN([`missing' script is too old or missing]) fi ]) # Copyright (C) 2003, 2004, 2005, 2006 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_MKDIR_P # --------------- # Check for `mkdir -p'. AC_DEFUN([AM_PROG_MKDIR_P], [AC_PREREQ([2.60])dnl AC_REQUIRE([AC_PROG_MKDIR_P])dnl dnl Automake 1.8 to 1.9.6 used to define mkdir_p. We now use MKDIR_P, dnl while keeping a definition of mkdir_p for backward compatibility. dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile. dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of dnl Makefile.ins that do not define MKDIR_P, so we do our own dnl adjustment using top_builddir (which is defined more often than dnl MKDIR_P). AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl case $mkdir_p in [[\\/$]]* | ?:[[\\/]]*) ;; */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; esac ]) # Helper functions for option handling. -*- Autoconf -*- # Copyright (C) 2001, 2002, 2003, 2005, 2008 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 4 # _AM_MANGLE_OPTION(NAME) # ----------------------- AC_DEFUN([_AM_MANGLE_OPTION], [[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) # _AM_SET_OPTION(NAME) # ------------------------------ # Set option NAME. Presently that only means defining a flag for this option. AC_DEFUN([_AM_SET_OPTION], [m4_define(_AM_MANGLE_OPTION([$1]), 1)]) # _AM_SET_OPTIONS(OPTIONS) # ---------------------------------- # OPTIONS is a space-separated list of Automake options. AC_DEFUN([_AM_SET_OPTIONS], [m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) # _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) # ------------------------------------------- # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) # Check to make sure that the build environment is sane. -*- Autoconf -*- # Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 5 # AM_SANITY_CHECK # --------------- AC_DEFUN([AM_SANITY_CHECK], [AC_MSG_CHECKING([whether build environment is sane]) # Just in case sleep 1 echo timestamp > conftest.file # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[[\\\"\#\$\&\'\`$am_lf]]*) AC_MSG_ERROR([unsafe absolute working directory name]);; esac case $srcdir in *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) AC_MSG_ERROR([unsafe srcdir value: `$srcdir']);; esac # Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$[*]" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi rm -f conftest.file if test "$[*]" != "X $srcdir/configure conftest.file" \ && test "$[*]" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken alias in your environment]) fi test "$[2]" = conftest.file ) then # Ok. : else AC_MSG_ERROR([newly created file is older than distributed files! Check your system clock]) fi AC_MSG_RESULT(yes)]) # Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_INSTALL_STRIP # --------------------- # One issue with vendor `install' (even GNU) is that you can't # specify the program used to strip binaries. This is especially # annoying in cross-compiling environments, where the build's strip # is unlikely to handle the host's binaries. # Fortunately install-sh will honor a STRIPPROG variable, so we # always use install-sh in `make install-strip', and initialize # STRIPPROG with the value of the STRIP variable (set by the user). AC_DEFUN([AM_PROG_INSTALL_STRIP], [AC_REQUIRE([AM_PROG_INSTALL_SH])dnl # Installed binaries are usually stripped using `strip' when the user # run `make install-strip'. However `strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the `STRIP' environment variable to overrule this program. dnl Don't test for $cross_compiling = yes, because it might be `maybe'. if test "$cross_compiling" != no; then AC_CHECK_TOOL([STRIP], [strip], :) fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) # Copyright (C) 2006, 2008 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 2 # _AM_SUBST_NOTMAKE(VARIABLE) # --------------------------- # Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. # This macro is traced by Automake. AC_DEFUN([_AM_SUBST_NOTMAKE]) # AM_SUBST_NOTMAKE(VARIABLE) # --------------------------- # Public sister of _AM_SUBST_NOTMAKE. AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) # Check how to create a tarball. -*- Autoconf -*- # Copyright (C) 2004, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 2 # _AM_PROG_TAR(FORMAT) # -------------------- # Check how to create a tarball in format FORMAT. # FORMAT should be one of `v7', `ustar', or `pax'. # # Substitute a variable $(am__tar) that is a command # writing to stdout a FORMAT-tarball containing the directory # $tardir. # tardir=directory && $(am__tar) > result.tar # # Substitute a variable $(am__untar) that extract such # a tarball read from stdin. # $(am__untar) < result.tar AC_DEFUN([_AM_PROG_TAR], [# Always define AMTAR for backward compatibility. AM_MISSING_PROG([AMTAR], [tar]) m4_if([$1], [v7], [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'], [m4_case([$1], [ustar],, [pax],, [m4_fatal([Unknown tar format])]) AC_MSG_CHECKING([how to create a $1 tar archive]) # Loop over all known methods to create a tar archive until one works. _am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' _am_tools=${am_cv_prog_tar_$1-$_am_tools} # Do not fold the above two line into one, because Tru64 sh and # Solaris sh will not grok spaces in the rhs of `-'. for _am_tool in $_am_tools do case $_am_tool in gnutar) for _am_tar in tar gnutar gtar; do AM_RUN_LOG([$_am_tar --version]) && break done am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' am__untar="$_am_tar -xf -" ;; plaintar) # Must skip GNU tar: if it does not support --format= it doesn't create # ustar tarball either. (tar --version) >/dev/null 2>&1 && continue am__tar='tar chf - "$$tardir"' am__tar_='tar chf - "$tardir"' am__untar='tar xf -' ;; pax) am__tar='pax -L -x $1 -w "$$tardir"' am__tar_='pax -L -x $1 -w "$tardir"' am__untar='pax -r' ;; cpio) am__tar='find "$$tardir" -print | cpio -o -H $1 -L' am__tar_='find "$tardir" -print | cpio -o -H $1 -L' am__untar='cpio -i -H $1 -d' ;; none) am__tar=false am__tar_=false am__untar=false ;; esac # If the value was cached, stop now. We just wanted to have am__tar # and am__untar set. test -n "${am_cv_prog_tar_$1}" && break # tar/untar a dummy directory, and stop if the command works rm -rf conftest.dir mkdir conftest.dir echo GrepMe > conftest.dir/file AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) rm -rf conftest.dir if test -s conftest.tar; then AM_RUN_LOG([$am__untar /dev/null 2>&1 && break fi done rm -rf conftest.dir AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) AC_MSG_RESULT([$am_cv_prog_tar_$1])]) AC_SUBST([am__tar]) AC_SUBST([am__untar]) ]) # _AM_PROG_TAR safecopy-1.7/simulator/NEWS0000644000175100001440000000000011202051061014715 0ustar ravenuserssafecopy-1.7/simulator/configure.in0000644000175100001440000000447511232136000016553 0ustar ravenusers#Process this file with autoconf to produce a configure script. AC_INIT(configure.in) AM_INIT_AUTOMAKE(libsimulator, 1.0.0) AM_CONFIG_HEADER(config.h) #AM_PROG_LIBTOOL #AC_PREREQ(2.5) #AC_ISC_POSIX CFLAGS="$CFLAGS -fPIC" #add a space to make these macros not add stupid stuff if it was unset AC_ISC_POSIX AC_PROG_CC AM_PROG_CC_STDC AC_HEADER_STDC AC_ARG_ENABLE([debug],[ AC_HELP_STRING([--enable-debug], [enable debug symbols and disable optimization, (only for GCC, set per-compiler options via $CFLAGS environment variable, when using a different C compiler) and activate additional debug output] )],[ if test "x$enableval" = "xno"; then USE_DEBUG="no" else USE_DEBUG="yes" fi ],[ USE_DEBUG="undef" ]) #Set PACKAGE_DATA_DIR in config.h. if test "x${datadir}" = 'x${prefix}/share'; then if test "x${prefix}" = "xNONE"; then AC_DEFINE_UNQUOTED(PACKAGE_DATA_DIR, "${ac_default_prefix}/share/${PACKAGE}",[data directory]) else AC_DEFINE_UNQUOTED(PACKAGE_DATA_DIR, "${prefix}/share/${PACKAGE}", [data directory]) fi else AC_DEFINE_UNQUOTED(PACKAGE_DATA_DIR, "${datadir}/${PACKAGE}", [data directory]) fi #Set PACKAGE_SOURCE_DIR in config.h. packagesrcdir=`cd $srcdir && pwd` AC_DEFINE_UNQUOTED(PACKAGE_SOURCE_DIR, "${packagesrcdir}", [source directory]) #Use -Wall if we have gcc. if test "x$GCC" = "xyes"; then if test "x$USE_DEBUG" = "xyes"; then CFLAGS="$CFLAGS -O0 -g -Wall" else CFLAGS="$CFLAGS -O2 -finline-functions -fno-strict-aliasing -Wall"; fi fi AC_CHECK_LIB(dl, dlsym,,AC_MSG_ERROR("libdl is required")) dnl If we're using gcc here define _GNU_SOURCE AC_MSG_CHECKING("for RTLD_NEXT from dlfcn.h") AC_EGREP_CPP(yes, [ #include #ifdef RTLD_NEXT yes #endif ], [ AC_MSG_RESULT(yes) ], [ AC_MSG_RESULT(no) AC_MSG_CHECKING("for RTLD_NEXT from dlfcn.h with _GNU_SOURCE") AC_EGREP_CPP(yes, [ #define _GNU_SOURCE #include #ifdef RTLD_NEXT yes #endif ], [ AC_MSG_RESULT(yes) AC_DEFINE([USE_GNU_SOURCE],[],[gnusource]) ], [ AC_MSG_ERROR(no) ]) ]) AC_OUTPUT([ Makefile src/Makefile ]) AC_MSG_RESULT([[ ----------------------------------------------------------------------- compile configuration completed successfully ]]) safecopy-1.7/simulator/ChangeLog0000644000175100001440000000000011202051026015771 0ustar ravenuserssafecopy-1.7/simulator/config.h.in0000644000175100001440000000161611726756531016310 0ustar ravenusers/* config.h.in. Generated from configure.in by autoheader. */ /* Define to 1 if you have the `dl' library (-ldl). */ #undef HAVE_LIBDL /* Name of package */ #undef PACKAGE /* Define to the address where bug reports for this package should be sent. */ #undef PACKAGE_BUGREPORT /* data directory */ #undef PACKAGE_DATA_DIR /* Define to the full name of this package. */ #undef PACKAGE_NAME /* source directory */ #undef PACKAGE_SOURCE_DIR /* Define to the full name and version of this package. */ #undef PACKAGE_STRING /* Define to the one symbol short name of this package. */ #undef PACKAGE_TARNAME /* Define to the home page for this package. */ #undef PACKAGE_URL /* Define to the version of this package. */ #undef PACKAGE_VERSION /* Define to 1 if you have the ANSI C header files. */ #undef STDC_HEADERS /* gnusource */ #undef USE_GNU_SOURCE /* Version number of package */ #undef VERSION safecopy-1.7/simulator/autogen.sh0000755000175100001440000001065511230344634016254 0ustar ravenusers#!/bin/sh # Run this to generate all the initial makefiles, etc. srcdir=`dirname $0` PKG_NAME="the package." DIE=0 NOCONFIGURE=1 (autoconf --version) < /dev/null > /dev/null 2>&1 || { echo echo "**Error**: You must have \`autoconf' installed to." echo "Download the appropriate package for your distribution," echo "or get the source tarball at ftp://ftp.gnu.org/pub/gnu/" DIE=1 } (grep "^AM_PROG_LIBTOOL" $srcdir/configure.in >/dev/null) && { (libtool --version) < /dev/null > /dev/null 2>&1 || { echo echo "**Error**: You must have \`libtool' installed." echo "Get ftp://ftp.gnu.org/pub/gnu/libtool-1.2d.tar.gz" echo "(or a newer version if it is available)" DIE=1 } } grep "^AM_GNU_GETTEXT" $srcdir/configure.in >/dev/null && { grep "sed.*POTFILES" $srcdir/configure.in >/dev/null || \ (gettext --version) < /dev/null > /dev/null 2>&1 || { echo echo "**Error**: You must have \`gettext' installed." echo "Get ftp://alpha.gnu.org/gnu/gettext-0.10.35.tar.gz" echo "(or a newer version if it is available)" DIE=1 } } grep "^AM_GNOME_GETTEXT" $srcdir/configure.in >/dev/null && { grep "sed.*POTFILES" $srcdir/configure.in >/dev/null || \ (gettext --version) < /dev/null > /dev/null 2>&1 || { echo echo "**Error**: You must have \`gettext' installed." echo "Get ftp://alpha.gnu.org/gnu/gettext-0.10.35.tar.gz" echo "(or a newer version if it is available)" DIE=1 } } (automake --version) < /dev/null > /dev/null 2>&1 || { echo echo "**Error**: You must have \`automake' installed." echo "Get ftp://ftp.gnu.org/pub/gnu/automake-1.3.tar.gz" echo "(or a newer version if it is available)" DIE=1 NO_AUTOMAKE=yes } # if no automake, don't bother testing for aclocal test -n "$NO_AUTOMAKE" || (aclocal --version) < /dev/null > /dev/null 2>&1 || { echo echo "**Error**: Missing \`aclocal'. The version of \`automake'" echo "installed doesn't appear recent enough." echo "Get ftp://ftp.gnu.org/pub/gnu/automake-1.3.tar.gz" echo "(or a newer version if it is available)" DIE=1 } if test "$DIE" -eq 1; then exit 1 fi if test -z "$*"; then echo "**Warning**: I am going to run \`configure' with no arguments." echo "If you wish to pass any to it, please specify them on the" echo \`$0\'" command line." echo fi case $CC in xlc ) am_opt=--include-deps;; esac for coin in `find $srcdir -maxdepth 1 -name configure.in -print` do dr=`dirname $coin` if test -f $dr/NO-AUTO-GEN; then echo skipping $dr -- flagged as no auto-gen else echo processing $dr macrodirs=`sed -n -e 's,AM_ACLOCAL_INCLUDE(\(.*\)),\1,gp' < $coin` ( cd $dr aclocalinclude="$ACLOCAL_FLAGS" for k in $macrodirs; do if test -d $k; then aclocalinclude="$aclocalinclude -I $k" ##else ## echo "**Warning**: No such directory \`$k'. Ignored." fi done if grep "^AM_GNU_GETTEXT" configure.in >/dev/null; then if grep "sed.*POTFILES" configure.in >/dev/null; then : do nothing -- we still have an old unmodified configure.in else echo "Creating $dr/aclocal.m4 ..." test -r $dr/aclocal.m4 || touch $dr/aclocal.m4 echo "Running gettextize... Ignore non-fatal messages." echo "no" | gettextize --force --copy echo "Making $dr/aclocal.m4 writable ..." test -r $dr/aclocal.m4 && chmod u+w $dr/aclocal.m4 fi fi if grep "^AM_GNOME_GETTEXT" configure.in >/dev/null; then echo "Creating $dr/aclocal.m4 ..." test -r $dr/aclocal.m4 || touch $dr/aclocal.m4 echo "Running gettextize... Ignore non-fatal messages." echo "no" | gettextize --force --copy echo "Making $dr/aclocal.m4 writable ..." test -r $dr/aclocal.m4 && chmod u+w $dr/aclocal.m4 fi if grep "^AM_PROG_LIBTOOL" configure.in >/dev/null; then echo "Running libtoolize..." libtoolize --force --copy fi echo "Running aclocal $aclocalinclude ..." aclocal $aclocalinclude if grep "^AM_CONFIG_HEADER" configure.in >/dev/null; then echo "Running autoheader..." autoheader fi echo "Running automake --gnu $am_opt ..." automake --add-missing --gnu $am_opt echo "Running autoconf ..." autoconf ) fi done #conf_flags="--enable-maintainer-mode --enable-compile-warnings" #--enable-iso-c if test x$NOCONFIGURE = x; then echo Running $srcdir/configure $conf_flags "$@" ... $srcdir/configure $conf_flags "$@" \ && echo Now type \`make\' to compile $PKG_NAME else echo Skipping configure process. fi safecopy-1.7/simulator/INSTALL0000644000175100001440000002245011202051050015262 0ustar ravenusersInstallation Instructions ************************* Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. This file is free documentation; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. Basic Installation ================== Briefly, the shell commands `./configure; make; make install' should configure, build, and install this package. The following more-detailed instructions are generic; see the `README' file for instructions specific to this package. The `configure' shell script attempts to guess correct values for various system-dependent variables used during compilation. It uses those values to create a `Makefile' in each directory of the package. It may also create one or more `.h' files containing system-dependent definitions. Finally, it creates a shell script `config.status' that you can run in the future to recreate the current configuration, and a file `config.log' containing compiler output (useful mainly for debugging `configure'). It can also use an optional file (typically called `config.cache' and enabled with `--cache-file=config.cache' or simply `-C') that saves the results of its tests to speed up reconfiguring. Caching is disabled by default to prevent problems with accidental use of stale cache files. If you need to do unusual things to compile the package, please try to figure out how `configure' could check whether to do them, and mail diffs or instructions to the address given in the `README' so they can be considered for the next release. If you are using the cache, and at some point `config.cache' contains results you don't want to keep, you may remove or edit it. The file `configure.ac' (or `configure.in') is used to create `configure' by a program called `autoconf'. You need `configure.ac' if you want to change it or regenerate `configure' using a newer version of `autoconf'. The simplest way to compile this package is: 1. `cd' to the directory containing the package's source code and type `./configure' to configure the package for your system. Running `configure' might take a while. While running, it prints some messages telling which features it is checking for. 2. Type `make' to compile the package. 3. Optionally, type `make check' to run any self-tests that come with the package. 4. Type `make install' to install the programs and any data files and documentation. 5. You can remove the program binaries and object files from the source code directory by typing `make clean'. To also remove the files that `configure' created (so you can compile the package for a different kind of computer), type `make distclean'. There is also a `make maintainer-clean' target, but that is intended mainly for the package's developers. If you use it, you may have to get all sorts of other programs in order to regenerate files that came with the distribution. 6. Often, you can also type `make uninstall' to remove the installed files again. Compilers and Options ===================== Some systems require unusual options for compilation or linking that the `configure' script does not know about. Run `./configure --help' for details on some of the pertinent environment variables. You can give `configure' initial values for configuration parameters by setting variables in the command line or in the environment. Here is an example: ./configure CC=c99 CFLAGS=-g LIBS=-lposix *Note Defining Variables::, for more details. Compiling For Multiple Architectures ==================================== You can compile the package for more than one kind of computer at the same time, by placing the object files for each architecture in their own directory. To do this, you can use GNU `make'. `cd' to the directory where you want the object files and executables to go and run the `configure' script. `configure' automatically checks for the source code in the directory that `configure' is in and in `..'. With a non-GNU `make', it is safer to compile the package for one architecture at a time in the source code directory. After you have installed the package for one architecture, use `make distclean' before reconfiguring for another architecture. Installation Names ================== By default, `make install' installs the package's commands under `/usr/local/bin', include files under `/usr/local/include', etc. You can specify an installation prefix other than `/usr/local' by giving `configure' the option `--prefix=PREFIX'. You can specify separate installation prefixes for architecture-specific files and architecture-independent files. If you pass the option `--exec-prefix=PREFIX' to `configure', the package uses PREFIX as the prefix for installing programs and libraries. Documentation and other data files still use the regular prefix. In addition, if you use an unusual directory layout you can give options like `--bindir=DIR' to specify different values for particular kinds of files. Run `configure --help' for a list of the directories you can set and what kinds of files go in them. If the package supports it, you can cause programs to be installed with an extra prefix or suffix on their names by giving `configure' the option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. Optional Features ================= Some packages pay attention to `--enable-FEATURE' options to `configure', where FEATURE indicates an optional part of the package. They may also pay attention to `--with-PACKAGE' options, where PACKAGE is something like `gnu-as' or `x' (for the X Window System). The `README' should mention any `--enable-' and `--with-' options that the package recognizes. For packages that use the X Window System, `configure' can usually find the X include and library files automatically, but if it doesn't, you can use the `configure' options `--x-includes=DIR' and `--x-libraries=DIR' to specify their locations. Specifying the System Type ========================== There may be some features `configure' cannot figure out automatically, but needs to determine by the type of machine the package will run on. Usually, assuming the package is built to be run on the _same_ architectures, `configure' can figure that out, but if it prints a message saying it cannot guess the machine type, give it the `--build=TYPE' option. TYPE can either be a short name for the system type, such as `sun4', or a canonical name which has the form: CPU-COMPANY-SYSTEM where SYSTEM can have one of these forms: OS KERNEL-OS See the file `config.sub' for the possible values of each field. If `config.sub' isn't included in this package, then this package doesn't need to know the machine type. If you are _building_ compiler tools for cross-compiling, you should use the option `--target=TYPE' to select the type of system they will produce code for. If you want to _use_ a cross compiler, that generates code for a platform different from the build platform, you should specify the "host" platform (i.e., that on which the generated programs will eventually be run) with `--host=TYPE'. Sharing Defaults ================ If you want to set default values for `configure' scripts to share, you can create a site shell script called `config.site' that gives default values for variables like `CC', `cache_file', and `prefix'. `configure' looks for `PREFIX/share/config.site' if it exists, then `PREFIX/etc/config.site' if it exists. Or, you can set the `CONFIG_SITE' environment variable to the location of the site script. A warning: not all `configure' scripts look for a site script. Defining Variables ================== Variables not defined in a site shell script can be set in the environment passed to `configure'. However, some packages may run configure again during the build, and the customized values of these variables may be lost. In order to avoid this problem, you should set them in the `configure' command line, using `VAR=value'. For example: ./configure CC=/usr/local2/bin/gcc causes the specified `gcc' to be used as the C compiler (unless it is overridden in the site shell script). Unfortunately, this technique does not work for `CONFIG_SHELL' due to an Autoconf bug. Until the bug is fixed you can use this workaround: CONFIG_SHELL=/bin/bash /bin/bash ./configure CONFIG_SHELL=/bin/bash `configure' Invocation ====================== `configure' recognizes the following options to control how it operates. `--help' `-h' Print a summary of the options to `configure', and exit. `--version' `-V' Print the version of Autoconf used to generate the `configure' script, and exit. `--cache-file=FILE' Enable the cache: use and save the results of the tests in FILE, traditionally `config.cache'. FILE defaults to `/dev/null' to disable caching. `--config-cache' `-C' Alias for `--cache-file=config.cache'. `--quiet' `--silent' `-q' Do not print messages saying which checks are being made. To suppress all normal output, redirect it to `/dev/null' (any error messages will still be shown). `--srcdir=DIR' Look for the package's source code in directory DIR. Usually `configure' can determine that directory automatically. `configure' also accepts some other, not widely useful, options. Run `configure --help' for more details. safecopy-1.7/INSTALL0000644000175100001440000002240611233347645013272 0ustar ravenusersInstallation Instructions ************************* Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005 Free Software Foundation, Inc. This file is free documentation; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. Basic Installation ================== These are generic installation instructions. The `configure' shell script attempts to guess correct values for various system-dependent variables used during compilation. It uses those values to create a `Makefile' in each directory of the package. It may also create one or more `.h' files containing system-dependent definitions. Finally, it creates a shell script `config.status' that you can run in the future to recreate the current configuration, and a file `config.log' containing compiler output (useful mainly for debugging `configure'). It can also use an optional file (typically called `config.cache' and enabled with `--cache-file=config.cache' or simply `-C') that saves the results of its tests to speed up reconfiguring. (Caching is disabled by default to prevent problems with accidental use of stale cache files.) If you need to do unusual things to compile the package, please try to figure out how `configure' could check whether to do them, and mail diffs or instructions to the address given in the `README' so they can be considered for the next release. If you are using the cache, and at some point `config.cache' contains results you don't want to keep, you may remove or edit it. The file `configure.ac' (or `configure.in') is used to create `configure' by a program called `autoconf'. You only need `configure.ac' if you want to change it or regenerate `configure' using a newer version of `autoconf'. The simplest way to compile this package is: 1. `cd' to the directory containing the package's source code and type `./configure' to configure the package for your system. If you're using `csh' on an old version of System V, you might need to type `sh ./configure' instead to prevent `csh' from trying to execute `configure' itself. Running `configure' takes awhile. While running, it prints some messages telling which features it is checking for. 2. Type `make' to compile the package. 3. Optionally, type `make check' to run any self-tests that come with the package. 4. Type `make install' to install the programs and any data files and documentation. 5. You can remove the program binaries and object files from the source code directory by typing `make clean'. To also remove the files that `configure' created (so you can compile the package for a different kind of computer), type `make distclean'. There is also a `make maintainer-clean' target, but that is intended mainly for the package's developers. If you use it, you may have to get all sorts of other programs in order to regenerate files that came with the distribution. Compilers and Options ===================== Some systems require unusual options for compilation or linking that the `configure' script does not know about. Run `./configure --help' for details on some of the pertinent environment variables. You can give `configure' initial values for configuration parameters by setting variables in the command line or in the environment. Here is an example: ./configure CC=c89 CFLAGS=-O2 LIBS=-lposix *Note Defining Variables::, for more details. Compiling For Multiple Architectures ==================================== You can compile the package for more than one kind of computer at the same time, by placing the object files for each architecture in their own directory. To do this, you must use a version of `make' that supports the `VPATH' variable, such as GNU `make'. `cd' to the directory where you want the object files and executables to go and run the `configure' script. `configure' automatically checks for the source code in the directory that `configure' is in and in `..'. If you have to use a `make' that does not support the `VPATH' variable, you have to compile the package for one architecture at a time in the source code directory. After you have installed the package for one architecture, use `make distclean' before reconfiguring for another architecture. Installation Names ================== By default, `make install' will install the package's files in `/usr/local/bin', `/usr/local/man', etc. You can specify an installation prefix other than `/usr/local' by giving `configure' the option `--prefix=PREFIX'. You can specify separate installation prefixes for architecture-specific files and architecture-independent files. If you give `configure' the option `--exec-prefix=PREFIX', the package will use PREFIX as the prefix for installing programs and libraries. Documentation and other data files will still use the regular prefix. In addition, if you use an unusual directory layout you can give options like `--bindir=DIR' to specify different values for particular kinds of files. Run `configure --help' for a list of the directories you can set and what kinds of files go in them. If the package supports it, you can cause programs to be installed with an extra prefix or suffix on their names by giving `configure' the option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. Optional Features ================= Some packages pay attention to `--enable-FEATURE' options to `configure', where FEATURE indicates an optional part of the package. They may also pay attention to `--with-PACKAGE' options, where PACKAGE is something like `gnu-as' or `x' (for the X Window System). The `README' should mention any `--enable-' and `--with-' options that the package recognizes. For packages that use the X Window System, `configure' can usually find the X include and library files automatically, but if it doesn't, you can use the `configure' options `--x-includes=DIR' and `--x-libraries=DIR' to specify their locations. Specifying the System Type ========================== There may be some features `configure' cannot figure out automatically, but needs to determine by the type of machine the package will run on. Usually, assuming the package is built to be run on the _same_ architectures, `configure' can figure that out, but if it prints a message saying it cannot guess the machine type, give it the `--build=TYPE' option. TYPE can either be a short name for the system type, such as `sun4', or a canonical name which has the form: CPU-COMPANY-SYSTEM where SYSTEM can have one of these forms: OS KERNEL-OS See the file `config.sub' for the possible values of each field. If `config.sub' isn't included in this package, then this package doesn't need to know the machine type. If you are _building_ compiler tools for cross-compiling, you should use the `--target=TYPE' option to select the type of system they will produce code for. If you want to _use_ a cross compiler, that generates code for a platform different from the build platform, you should specify the "host" platform (i.e., that on which the generated programs will eventually be run) with `--host=TYPE'. Sharing Defaults ================ If you want to set default values for `configure' scripts to share, you can create a site shell script called `config.site' that gives default values for variables like `CC', `cache_file', and `prefix'. `configure' looks for `PREFIX/share/config.site' if it exists, then `PREFIX/etc/config.site' if it exists. Or, you can set the `CONFIG_SITE' environment variable to the location of the site script. A warning: not all `configure' scripts look for a site script. Defining Variables ================== Variables not defined in a site shell script can be set in the environment passed to `configure'. However, some packages may run configure again during the build, and the customized values of these variables may be lost. In order to avoid this problem, you should set them in the `configure' command line, using `VAR=value'. For example: ./configure CC=/usr/local2/bin/gcc causes the specified `gcc' to be used as the C compiler (unless it is overridden in the site shell script). Here is a another example: /bin/bash ./configure CONFIG_SHELL=/bin/bash Here the `CONFIG_SHELL=/bin/bash' operand causes subsequent configuration-related scripts to be executed by `/bin/bash'. `configure' Invocation ====================== `configure' recognizes the following options to control how it operates. `--help' `-h' Print a summary of the options to `configure', and exit. `--version' `-V' Print the version of Autoconf used to generate the `configure' script, and exit. `--cache-file=FILE' Enable the cache: use and save the results of the tests in FILE, traditionally `config.cache'. FILE defaults to `/dev/null' to disable caching. `--config-cache' `-C' Alias for `--cache-file=config.cache'. `--quiet' `--silent' `-q' Do not print messages saying which checks are being made. To suppress all normal output, redirect it to `/dev/null' (any error messages will still be shown). `--srcdir=DIR' Look for the package's source code in directory DIR. Usually `configure' can determine that directory automatically. `configure' also accepts some other, not widely useful, options. Run `configure --help' for more details.