mirror of
https://github.com/xroche/httrack.git
synced 2026-05-17 16:36:07 +03:00
Compare commits
250 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7ba5ef9e7e | ||
|
|
8b8cce197a | ||
|
|
e8188eb243 | ||
|
|
f59bc8a790 | ||
|
|
854b7fe18e | ||
|
|
920d51082c | ||
|
|
e35b329c50 | ||
|
|
1ff6c081f1 | ||
|
|
7503937d76 | ||
|
|
23fa293e9e | ||
|
|
25c278b599 | ||
|
|
721da33d81 | ||
|
|
c0165072d6 | ||
|
|
ebd4d34b7b | ||
|
|
047c6b726b | ||
|
|
aecd9a41ea | ||
|
|
46a9b89dd3 | ||
|
|
b6ba5073a5 | ||
|
|
5eb5b0891d | ||
|
|
afff7dc033 | ||
|
|
69a93698dc | ||
|
|
68d81080b3 | ||
|
|
a431fcf717 | ||
|
|
c722368dc0 | ||
|
|
b1367feade | ||
|
|
5882b122d1 | ||
|
|
f27a5f58be | ||
|
|
d0d62c0598 | ||
|
|
027fe3a5ee | ||
|
|
8b05179083 | ||
|
|
522af8962f | ||
|
|
96a727e4fb | ||
|
|
4c876451be | ||
|
|
c5003322b7 | ||
|
|
8e72bb5deb | ||
|
|
2e6a99ce09 | ||
|
|
218f6e2cd9 | ||
|
|
967932e75d | ||
|
|
42bb06703a | ||
|
|
3bb87c123a | ||
|
|
eeaa956588 | ||
|
|
7925eccecd | ||
|
|
60ee0687d5 | ||
|
|
8b3af0d585 | ||
|
|
028f23ca6f | ||
|
|
bf40691b62 | ||
|
|
dc21c7f595 | ||
|
|
4461278b80 | ||
|
|
95480e8d16 | ||
|
|
b10df97dd0 | ||
|
|
7a1e4b8265 | ||
|
|
6c2120e053 | ||
|
|
7a261eec39 | ||
|
|
dbd99bb365 | ||
|
|
e0fe304f0b | ||
|
|
84632e7bb6 | ||
|
|
a4f1156edc | ||
|
|
1e87dc455f | ||
|
|
c0a31f2656 | ||
|
|
2e59d67d7a | ||
|
|
713b83f7b4 | ||
|
|
82e61ae9d6 | ||
|
|
d2103fce8a | ||
|
|
93ae992d7b | ||
|
|
49dd329a09 | ||
|
|
185b664930 | ||
|
|
3a7441b57b | ||
|
|
eeee43acb7 | ||
|
|
91946b7834 | ||
|
|
1af7fd8c5d | ||
|
|
f509bed5be | ||
|
|
6d1544383e | ||
|
|
cd268fd39e | ||
|
|
113fb00073 | ||
|
|
4608b62e2e | ||
|
|
3f1e6ac8cd | ||
|
|
bfdc88cb0b | ||
|
|
a911bcf0c9 | ||
|
|
49691770a9 | ||
|
|
1a683c668a | ||
|
|
dc49da62a1 | ||
|
|
018832a18b | ||
|
|
7ec5e6e7e4 | ||
|
|
8c1e9ef23d | ||
|
|
073a55ab1c | ||
|
|
9ff2518be6 | ||
|
|
f78d271246 | ||
|
|
344d47e632 | ||
|
|
d068a8f3ff | ||
|
|
e64f9a8929 | ||
|
|
2d2ec627b4 | ||
|
|
40f237fe9c | ||
|
|
04cfb2db0e | ||
|
|
bdbf66b45c | ||
|
|
6bace27858 | ||
|
|
7d3d496a7f | ||
|
|
7826a49f59 | ||
|
|
ed79961b7a | ||
|
|
d3c14c9d1f | ||
|
|
7026ba7c7b | ||
|
|
abe98f238d | ||
|
|
8dd39bc909 | ||
|
|
17ec3ecd6b | ||
|
|
c7636d4f90 | ||
|
|
3a7e594166 | ||
|
|
b88395a16c | ||
|
|
4f5776a8fa | ||
|
|
8adeadbdb6 | ||
|
|
c64b8d6e88 | ||
|
|
194ebad4c6 | ||
|
|
ae6d05fbb3 | ||
|
|
803f7b5a33 | ||
|
|
f919aab408 | ||
|
|
0238301aca | ||
|
|
3864a45388 | ||
|
|
5e248cc4e3 | ||
|
|
473baf7f95 | ||
|
|
27752e368c | ||
|
|
37187f967f | ||
|
|
1d07610320 | ||
|
|
49304bbe8f | ||
|
|
11e069aa07 | ||
|
|
0c7a0274ca | ||
|
|
f3a4a20750 | ||
|
|
e090cd9ccf | ||
|
|
1bebff2697 | ||
|
|
c7fac4dbca | ||
|
|
0b52cac218 | ||
|
|
43b457203b | ||
|
|
fdcff762f6 | ||
|
|
c3987aca71 | ||
|
|
f67a86657b | ||
|
|
01edfd6d1e | ||
|
|
a300785d5e | ||
|
|
5364514f34 | ||
|
|
f078a39677 | ||
|
|
65454f4ff1 | ||
|
|
15813b5380 | ||
|
|
033ce293b8 | ||
|
|
d1913325e4 | ||
|
|
882578ed9a | ||
|
|
1ec8b5fb9e | ||
|
|
796c62f07c | ||
|
|
cefcc04266 | ||
|
|
6ba50a2001 | ||
|
|
9315f64b6e | ||
|
|
feb2a02cc2 | ||
|
|
24ff04fdb7 | ||
|
|
72e0c0601b | ||
|
|
b72741ddc9 | ||
|
|
1edfda507d | ||
|
|
4a62c84479 | ||
|
|
595d446470 | ||
|
|
0474c596b6 | ||
|
|
9f23ea7980 | ||
|
|
fe1ec5b0f6 | ||
|
|
fd1ab669ad | ||
|
|
34788bb7f6 | ||
|
|
03edb3eac8 | ||
|
|
fe7ea8b140 | ||
|
|
1fd27d74af | ||
|
|
08a17f31d4 | ||
|
|
6c8b76e531 | ||
|
|
66c8cc32aa | ||
|
|
2209c7bdd8 | ||
|
|
cb0460ddcb | ||
|
|
fb9e02ffb9 | ||
|
|
ac779cb6a0 | ||
|
|
0073d3ad05 | ||
|
|
638cc96917 | ||
|
|
c6e0ad4bce | ||
|
|
c457788a14 | ||
|
|
216005d33a | ||
|
|
59008af067 | ||
|
|
3059bd6f53 | ||
|
|
e5b3c85156 | ||
|
|
843faaf83d | ||
|
|
75969b1147 | ||
|
|
6ad604624d | ||
|
|
c05f54ae04 | ||
|
|
ae1db762e7 | ||
|
|
16aec722bf | ||
|
|
4ff55249ed | ||
|
|
fea8122ed3 | ||
|
|
7323230eb3 | ||
|
|
c9f656fdeb | ||
|
|
042525a1db | ||
|
|
3fde59c090 | ||
|
|
edaaa73328 | ||
|
|
cc424a4503 | ||
|
|
1f18c67f8a | ||
|
|
a016accc4b | ||
|
|
1315e03cc5 | ||
|
|
917d6bd3c4 | ||
|
|
a085b2b2fa | ||
|
|
67b8737ed4 | ||
|
|
9d67ab4cf0 | ||
|
|
b331963ba6 | ||
|
|
f48114006d | ||
|
|
9208228e2d | ||
|
|
9a17499b99 | ||
|
|
91714c7a28 | ||
|
|
3a3d27386c | ||
|
|
d59341813d | ||
|
|
65eb4e58e5 | ||
|
|
7e75314395 | ||
|
|
5ff78eebd0 | ||
|
|
76dc4d04fc | ||
|
|
5b0c24aa71 | ||
|
|
ba35564fac | ||
|
|
0db2125bdc | ||
|
|
032be64885 | ||
|
|
b41e6dc3af | ||
|
|
a798cd3a8d | ||
|
|
d2435b1b5e | ||
|
|
213359b3db | ||
|
|
3b1bf0b8af | ||
|
|
6aef8ee820 | ||
|
|
ac6cc76bab | ||
|
|
a3fb178b10 | ||
|
|
b1fa75dfe0 | ||
|
|
4da59a6399 | ||
|
|
44688bdbdf | ||
|
|
6ce91ec1f3 | ||
|
|
95b9374ff3 | ||
|
|
c7edfe0f5f | ||
|
|
381eebc056 | ||
|
|
5544f503bf | ||
|
|
b3fa8537c4 | ||
|
|
aafafee47e | ||
|
|
632befbd53 | ||
|
|
908f3ac832 | ||
|
|
d46e835fc2 | ||
|
|
1f6b64f81a | ||
|
|
24eee92311 | ||
|
|
75b5002c63 | ||
|
|
792311df15 | ||
|
|
3e63dbc69c | ||
|
|
589b5ed78f | ||
|
|
015cff31b9 | ||
|
|
8e0c4ab867 | ||
|
|
919030900d | ||
|
|
859f4625cb | ||
|
|
0985f4c014 | ||
|
|
21debe05da | ||
|
|
d0d9660ac9 | ||
|
|
2fe3a96b09 | ||
|
|
ef647e9136 | ||
|
|
159e3d0017 | ||
|
|
9661b389d9 |
@@ -134,6 +134,7 @@ am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \
|
||||
distcleancheck_listfiles = find . -type f -print
|
||||
ACLOCAL = @ACLOCAL@
|
||||
AMTAR = @AMTAR@
|
||||
AM_CFLAGS = @AM_CFLAGS@
|
||||
AR = @AR@
|
||||
AUTOCONF = @AUTOCONF@
|
||||
AUTOHEADER = @AUTOHEADER@
|
||||
@@ -142,14 +143,12 @@ AWK = @AWK@
|
||||
CC = @CC@
|
||||
CCDEPMODE = @CCDEPMODE@
|
||||
CFLAGS = @CFLAGS@
|
||||
CFLAG_VISIBILITY = @CFLAG_VISIBILITY@
|
||||
CPP = @CPP@
|
||||
CPPFLAGS = @CPPFLAGS@
|
||||
CXX = @CXX@
|
||||
CXXCPP = @CXXCPP@
|
||||
CXXDEPMODE = @CXXDEPMODE@
|
||||
CXXFLAGS = @CXXFLAGS@
|
||||
CYGPATH_W = @CYGPATH_W@
|
||||
DEFAULT_CFLAGS = @DEFAULT_CFLAGS@
|
||||
DEFAULT_LDFLAGS = @DEFAULT_LDFLAGS@
|
||||
DEFS = @DEFS@
|
||||
DEPDIR = @DEPDIR@
|
||||
DLLTOOL = @DLLTOOL@
|
||||
@@ -163,6 +162,7 @@ EGREP = @EGREP@
|
||||
EXEEXT = @EXEEXT@
|
||||
FGREP = @FGREP@
|
||||
GREP = @GREP@
|
||||
HAVE_VISIBILITY = @HAVE_VISIBILITY@
|
||||
HTTPS_SUPPORT = @HTTPS_SUPPORT@
|
||||
ICONV_LIBS = @ICONV_LIBS@
|
||||
INSTALL = @INSTALL@
|
||||
@@ -218,7 +218,6 @@ abs_top_builddir = @abs_top_builddir@
|
||||
abs_top_srcdir = @abs_top_srcdir@
|
||||
ac_ct_AR = @ac_ct_AR@
|
||||
ac_ct_CC = @ac_ct_CC@
|
||||
ac_ct_CXX = @ac_ct_CXX@
|
||||
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
|
||||
am__include = @am__include@
|
||||
am__leading_dot = @am__leading_dot@
|
||||
|
||||
2
README
2
README
@@ -1,5 +1,5 @@
|
||||
HTTrack Website Copier, Offline Browser for Windows and Unix
|
||||
Copyright (C) 1998-2013 Xavier Roche and other contributors
|
||||
Copyright (C) 1998-2014 Xavier Roche and other contributors
|
||||
|
||||
Welcome to HTTrack Website Copier!
|
||||
|
||||
|
||||
241
compile
241
compile
@@ -1,9 +1,10 @@
|
||||
#! /bin/sh
|
||||
# Wrapper for compilers which do not understand `-c -o'.
|
||||
# Wrapper for compilers which do not understand '-c -o'.
|
||||
|
||||
scriptversion=2005-05-14.22
|
||||
scriptversion=2012-03-05.13; # UTC
|
||||
|
||||
# Copyright (C) 1999, 2000, 2003, 2004, 2005 Free Software Foundation, Inc.
|
||||
# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2009, 2010, 2012 Free
|
||||
# Software Foundation, Inc.
|
||||
# Written by Tom Tromey <tromey@cygnus.com>.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
@@ -17,8 +18,7 @@ scriptversion=2005-05-14.22
|
||||
# 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
# As a special exception to the GNU General Public License, if you
|
||||
# distribute this file as part of a program that contains a
|
||||
@@ -29,21 +29,219 @@ scriptversion=2005-05-14.22
|
||||
# bugs to <bug-automake@gnu.org> or send patches to
|
||||
# <automake-patches@gnu.org>.
|
||||
|
||||
nl='
|
||||
'
|
||||
|
||||
# We need space, tab and new line, in precisely that order. Quoting is
|
||||
# there to prevent tools from complaining about whitespace usage.
|
||||
IFS=" "" $nl"
|
||||
|
||||
file_conv=
|
||||
|
||||
# func_file_conv build_file lazy
|
||||
# Convert a $build file to $host form and store it in $file
|
||||
# Currently only supports Windows hosts. If the determined conversion
|
||||
# type is listed in (the comma separated) LAZY, no conversion will
|
||||
# take place.
|
||||
func_file_conv ()
|
||||
{
|
||||
file=$1
|
||||
case $file in
|
||||
/ | /[!/]*) # absolute file, and not a UNC file
|
||||
if test -z "$file_conv"; then
|
||||
# lazily determine how to convert abs files
|
||||
case `uname -s` in
|
||||
MINGW*)
|
||||
file_conv=mingw
|
||||
;;
|
||||
CYGWIN*)
|
||||
file_conv=cygwin
|
||||
;;
|
||||
*)
|
||||
file_conv=wine
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
case $file_conv/,$2, in
|
||||
*,$file_conv,*)
|
||||
;;
|
||||
mingw/*)
|
||||
file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'`
|
||||
;;
|
||||
cygwin/*)
|
||||
file=`cygpath -m "$file" || echo "$file"`
|
||||
;;
|
||||
wine/*)
|
||||
file=`winepath -w "$file" || echo "$file"`
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
# func_cl_dashL linkdir
|
||||
# Make cl look for libraries in LINKDIR
|
||||
func_cl_dashL ()
|
||||
{
|
||||
func_file_conv "$1"
|
||||
if test -z "$lib_path"; then
|
||||
lib_path=$file
|
||||
else
|
||||
lib_path="$lib_path;$file"
|
||||
fi
|
||||
linker_opts="$linker_opts -LIBPATH:$file"
|
||||
}
|
||||
|
||||
# func_cl_dashl library
|
||||
# Do a library search-path lookup for cl
|
||||
func_cl_dashl ()
|
||||
{
|
||||
lib=$1
|
||||
found=no
|
||||
save_IFS=$IFS
|
||||
IFS=';'
|
||||
for dir in $lib_path $LIB
|
||||
do
|
||||
IFS=$save_IFS
|
||||
if $shared && test -f "$dir/$lib.dll.lib"; then
|
||||
found=yes
|
||||
lib=$dir/$lib.dll.lib
|
||||
break
|
||||
fi
|
||||
if test -f "$dir/$lib.lib"; then
|
||||
found=yes
|
||||
lib=$dir/$lib.lib
|
||||
break
|
||||
fi
|
||||
done
|
||||
IFS=$save_IFS
|
||||
|
||||
if test "$found" != yes; then
|
||||
lib=$lib.lib
|
||||
fi
|
||||
}
|
||||
|
||||
# func_cl_wrapper cl arg...
|
||||
# Adjust compile command to suit cl
|
||||
func_cl_wrapper ()
|
||||
{
|
||||
# Assume a capable shell
|
||||
lib_path=
|
||||
shared=:
|
||||
linker_opts=
|
||||
for arg
|
||||
do
|
||||
if test -n "$eat"; then
|
||||
eat=
|
||||
else
|
||||
case $1 in
|
||||
-o)
|
||||
# configure might choose to run compile as 'compile cc -o foo foo.c'.
|
||||
eat=1
|
||||
case $2 in
|
||||
*.o | *.[oO][bB][jJ])
|
||||
func_file_conv "$2"
|
||||
set x "$@" -Fo"$file"
|
||||
shift
|
||||
;;
|
||||
*)
|
||||
func_file_conv "$2"
|
||||
set x "$@" -Fe"$file"
|
||||
shift
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
-I)
|
||||
eat=1
|
||||
func_file_conv "$2" mingw
|
||||
set x "$@" -I"$file"
|
||||
shift
|
||||
;;
|
||||
-I*)
|
||||
func_file_conv "${1#-I}" mingw
|
||||
set x "$@" -I"$file"
|
||||
shift
|
||||
;;
|
||||
-l)
|
||||
eat=1
|
||||
func_cl_dashl "$2"
|
||||
set x "$@" "$lib"
|
||||
shift
|
||||
;;
|
||||
-l*)
|
||||
func_cl_dashl "${1#-l}"
|
||||
set x "$@" "$lib"
|
||||
shift
|
||||
;;
|
||||
-L)
|
||||
eat=1
|
||||
func_cl_dashL "$2"
|
||||
;;
|
||||
-L*)
|
||||
func_cl_dashL "${1#-L}"
|
||||
;;
|
||||
-static)
|
||||
shared=false
|
||||
;;
|
||||
-Wl,*)
|
||||
arg=${1#-Wl,}
|
||||
save_ifs="$IFS"; IFS=','
|
||||
for flag in $arg; do
|
||||
IFS="$save_ifs"
|
||||
linker_opts="$linker_opts $flag"
|
||||
done
|
||||
IFS="$save_ifs"
|
||||
;;
|
||||
-Xlinker)
|
||||
eat=1
|
||||
linker_opts="$linker_opts $2"
|
||||
;;
|
||||
-*)
|
||||
set x "$@" "$1"
|
||||
shift
|
||||
;;
|
||||
*.cc | *.CC | *.cxx | *.CXX | *.[cC]++)
|
||||
func_file_conv "$1"
|
||||
set x "$@" -Tp"$file"
|
||||
shift
|
||||
;;
|
||||
*.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO])
|
||||
func_file_conv "$1" mingw
|
||||
set x "$@" "$file"
|
||||
shift
|
||||
;;
|
||||
*)
|
||||
set x "$@" "$1"
|
||||
shift
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
shift
|
||||
done
|
||||
if test -n "$linker_opts"; then
|
||||
linker_opts="-link$linker_opts"
|
||||
fi
|
||||
exec "$@" $linker_opts
|
||||
exit 1
|
||||
}
|
||||
|
||||
eat=
|
||||
|
||||
case $1 in
|
||||
'')
|
||||
echo "$0: No command. Try \`$0 --help' for more information." 1>&2
|
||||
echo "$0: No command. Try '$0 --help' for more information." 1>&2
|
||||
exit 1;
|
||||
;;
|
||||
-h | --h*)
|
||||
cat <<\EOF
|
||||
Usage: compile [--help] [--version] PROGRAM [ARGS]
|
||||
|
||||
Wrapper for compilers which do not understand `-c -o'.
|
||||
Remove `-o dest.o' from ARGS, run PROGRAM with the remaining
|
||||
Wrapper for compilers which do not understand '-c -o'.
|
||||
Remove '-o dest.o' from ARGS, run PROGRAM with the remaining
|
||||
arguments, and rename the output as expected.
|
||||
|
||||
If you are trying to build a whole package this is not the
|
||||
right script to run: please start by reading the file `INSTALL'.
|
||||
right script to run: please start by reading the file 'INSTALL'.
|
||||
|
||||
Report bugs to <bug-automake@gnu.org>.
|
||||
EOF
|
||||
@@ -53,11 +251,13 @@ EOF
|
||||
echo "compile $scriptversion"
|
||||
exit $?
|
||||
;;
|
||||
cl | *[/\\]cl | cl.exe | *[/\\]cl.exe )
|
||||
func_cl_wrapper "$@" # Doesn't return...
|
||||
;;
|
||||
esac
|
||||
|
||||
ofile=
|
||||
cfile=
|
||||
eat=
|
||||
|
||||
for arg
|
||||
do
|
||||
@@ -66,8 +266,8 @@ do
|
||||
else
|
||||
case $1 in
|
||||
-o)
|
||||
# configure might choose to run compile as `compile cc -o foo foo.c'.
|
||||
# So we strip `-o arg' only if arg is an object.
|
||||
# configure might choose to run compile as 'compile cc -o foo foo.c'.
|
||||
# So we strip '-o arg' only if arg is an object.
|
||||
eat=1
|
||||
case $2 in
|
||||
*.o | *.obj)
|
||||
@@ -94,22 +294,22 @@ do
|
||||
done
|
||||
|
||||
if test -z "$ofile" || test -z "$cfile"; then
|
||||
# If no `-o' option was seen then we might have been invoked from a
|
||||
# If no '-o' option was seen then we might have been invoked from a
|
||||
# pattern rule where we don't need one. That is ok -- this is a
|
||||
# normal compilation that the losing compiler can handle. If no
|
||||
# `.c' file was seen then we are probably linking. That is also
|
||||
# '.c' file was seen then we are probably linking. That is also
|
||||
# ok.
|
||||
exec "$@"
|
||||
fi
|
||||
|
||||
# Name of file we expect compiler to create.
|
||||
cofile=`echo "$cfile" | sed -e 's|^.*/||' -e 's/\.c$/.o/'`
|
||||
cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'`
|
||||
|
||||
# Create the lock directory.
|
||||
# Note: use `[/.-]' here to ensure that we don't use the same name
|
||||
# Note: use '[/\\:.-]' here to ensure that we don't use the same name
|
||||
# that we are using for the .o file. Also, base the name on the expected
|
||||
# object file name, since that is what matters with a parallel build.
|
||||
lockdir=`echo "$cofile" | sed -e 's|[/.-]|_|g'`.d
|
||||
lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d
|
||||
while true; do
|
||||
if mkdir "$lockdir" >/dev/null 2>&1; then
|
||||
break
|
||||
@@ -124,9 +324,9 @@ trap "rmdir '$lockdir'; exit 1" 1 2 15
|
||||
ret=$?
|
||||
|
||||
if test -f "$cofile"; then
|
||||
mv "$cofile" "$ofile"
|
||||
test "$cofile" = "$ofile" || mv "$cofile" "$ofile"
|
||||
elif test -f "${cofile}bj"; then
|
||||
mv "${cofile}bj" "$ofile"
|
||||
test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile"
|
||||
fi
|
||||
|
||||
rmdir "$lockdir"
|
||||
@@ -138,5 +338,6 @@ exit $ret
|
||||
# eval: (add-hook 'write-file-hooks 'time-stamp)
|
||||
# time-stamp-start: "scriptversion="
|
||||
# time-stamp-format: "%:y-%02m-%02d.%02H"
|
||||
# time-stamp-end: "$"
|
||||
# time-stamp-time-zone: "UTC"
|
||||
# time-stamp-end: "; # UTC"
|
||||
# End:
|
||||
|
||||
16
config.h.in
16
config.h.in
@@ -6,6 +6,9 @@
|
||||
/* Check for ftime */
|
||||
#undef FTIME
|
||||
|
||||
/* Define if pointers to integers require aligned access */
|
||||
#undef HAVE_ALIGNED_ACCESS_REQUIRED
|
||||
|
||||
/* Define to 1 if you have the <dlfcn.h> header file. */
|
||||
#undef HAVE_DLFCN_H
|
||||
|
||||
@@ -42,6 +45,10 @@
|
||||
/* Define to 1 if you have the <unistd.h> header file. */
|
||||
#undef HAVE_UNISTD_H
|
||||
|
||||
/* Define to 1 or 0, depending whether the compiler supports simple visibility
|
||||
declarations. */
|
||||
#undef HAVE_VISIBILITY
|
||||
|
||||
/* Define to 1 if you have the `vsnprintf' function. */
|
||||
#undef HAVE_VSNPRINTF
|
||||
|
||||
@@ -67,6 +74,9 @@
|
||||
*/
|
||||
#undef LT_OBJDIR
|
||||
|
||||
/* Define to 1 if your C compiler doesn't accept -c and -o together. */
|
||||
#undef NO_MINUS_C_MINUS_O
|
||||
|
||||
/* Name of package */
|
||||
#undef PACKAGE
|
||||
|
||||
@@ -108,3 +118,9 @@
|
||||
|
||||
/* Version number of package */
|
||||
#undef VERSION
|
||||
|
||||
/* in_port_t */
|
||||
#undef in_port_t
|
||||
|
||||
/* sa_family_t */
|
||||
#undef sa_family_t
|
||||
|
||||
89
configure.ac
89
configure.ac
@@ -1,18 +1,45 @@
|
||||
AC_INIT([httrack], [3.48.1], [roche+packaging@httrack.com], [httrack], [http://www.httrack.com/])
|
||||
AC_PREREQ(2.59)
|
||||
|
||||
AC_INIT([httrack], [3.48.16], [roche+packaging@httrack.com], [httrack], [http://www.httrack.com/])
|
||||
AC_COPYRIGHT([
|
||||
HTTrack Website Copier, Offline Browser for Windows and Unix
|
||||
Copyright (C) 1998-2014 Xavier Roche and other contributors
|
||||
|
||||
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 <http://www.gnu.org/licenses/>.
|
||||
|
||||
Important notes:
|
||||
|
||||
- We hereby ask people using this source NOT to use it in purpose of grabbing
|
||||
emails addresses, or collecting any other private information on persons.
|
||||
This would disgrace our work, and spoil the many hours we spent on it.
|
||||
|
||||
Please visit our Website: http://www.httrack.com
|
||||
])
|
||||
|
||||
AC_CONFIG_SRCDIR(src/httrack.c)
|
||||
AC_CONFIG_MACRO_DIR([m4])
|
||||
AC_CONFIG_HEADERS(config.h)
|
||||
AM_INIT_AUTOMAKE
|
||||
AM_INIT_AUTOMAKE([subdir-objects])
|
||||
VERSION_INFO="2:48:0"
|
||||
AM_MAINTAINER_MODE
|
||||
|
||||
AC_PREREQ(2.50)
|
||||
|
||||
AC_PROG_CC
|
||||
AC_PROG_CXX
|
||||
AM_PROG_CC_C_O
|
||||
AC_STDC_HEADERS
|
||||
LT_INIT
|
||||
AC_PROG_LN_S
|
||||
AM_PROG_LIBTOOL
|
||||
|
||||
# Export LD_LIBRARY_PATH name or equivalent.
|
||||
AC_SUBST(SHLIBPATH_VAR,$shlibpath_var)
|
||||
@@ -20,13 +47,40 @@ AC_SUBST(SHLIBPATH_VAR,$shlibpath_var)
|
||||
# Export .libs or equivalent.
|
||||
AC_SUBST(LT_CV_OBJDIR,$lt_cv_objdir)
|
||||
|
||||
### Default CFLAGS
|
||||
DEFAULT_CFLAGS="-Wall -Wcast-align -Wstrict-prototypes \
|
||||
-Wmissing-prototypes -Wmissing-declarations -Wpointer-arith \
|
||||
-Wnested-externs -D_REENTRANT"
|
||||
AC_SUBST(DEFAULT_CFLAGS)
|
||||
# Export version info
|
||||
AC_SUBST(VERSION_INFO)
|
||||
|
||||
### Default CFLAGS
|
||||
DEFAULT_CFLAGS="-Wall -Wformat -Wformat-security \
|
||||
-Wmultichar -Wwrite-strings -Wcast-qual -Wcast-align \
|
||||
-Wstrict-prototypes -Wmissing-prototypes \
|
||||
-Wmissing-declarations -Wdeclaration-after-statement \
|
||||
-Wpointer-arith -Wsequence-point -Wnested-externs \
|
||||
-D_REENTRANT"
|
||||
AC_SUBST(DEFAULT_CFLAGS)
|
||||
DEFAULT_LDFLAGS=""
|
||||
AC_SUBST(DEFAULT_LDFLAGS)
|
||||
|
||||
### Additional flags (if supported)
|
||||
AX_CHECK_COMPILE_FLAG([-Wparentheses], [DEFAULT_CFLAGS="$DEFAULT_CFLAGS -Wparentheses"])
|
||||
AX_CHECK_COMPILE_FLAG([-Winit-self], [DEFAULT_CFLAGS="$DEFAULT_CFLAGS -Winit-self"])
|
||||
AX_CHECK_COMPILE_FLAG([-Wunused-but-set-parameter], [DEFAULT_CFLAGS="$DEFAULT_CFLAGS -Wunused-but-set-parameter"])
|
||||
AX_CHECK_COMPILE_FLAG([-Waddress], [DEFAULT_CFLAGS="$DEFAULT_CFLAGS -Waddress"])
|
||||
AX_CHECK_COMPILE_FLAG([-Wuninitialized], [DEFAULT_CFLAGS="$DEFAULT_CFLAGS -Wuninitialized"])
|
||||
AX_CHECK_COMPILE_FLAG([-Wformat=2], [DEFAULT_CFLAGS="$DEFAULT_CFLAGS -Wformat=2"])
|
||||
AX_CHECK_COMPILE_FLAG([-Wformat-nonliteral], [DEFAULT_CFLAGS="$DEFAULT_CFLAGS -Wformat-nonliteral"])
|
||||
AX_CHECK_COMPILE_FLAG([-Wmissing-parameter-type], [DEFAULT_CFLAGS="$DEFAULT_CFLAGS -Wmissing-parameter-type"])
|
||||
AX_CHECK_COMPILE_FLAG([-Wold-style-definition], [DEFAULT_CFLAGS="$DEFAULT_CFLAGS -Wold-style-definition"])
|
||||
AX_CHECK_COMPILE_FLAG([-Wignored-qualifiers], [DEFAULT_CFLAGS="$DEFAULT_CFLAGS -Wignored-qualifiers"])
|
||||
AX_CHECK_COMPILE_FLAG([-fstrict-aliasing -Wstrict-aliasing], [DEFAULT_CFLAGS="$DEFAULT_CFLAGS -fstrict-aliasing -Wstrict-aliasing"])
|
||||
AX_CHECK_LINK_FLAG([-Wl,--discard-all], [DEFAULT_LDLAGS="$DEFAULT_LDLAGS -Wl,--discard-all"])
|
||||
AX_CHECK_LINK_FLAG([-Wl,--no-undefined], [DEFAULT_LDLAGS="$DEFAULT_LDLAGS -Wl,--no-undefined"])
|
||||
|
||||
### Check for -fvisibility=hidden support
|
||||
gl_VISIBILITY
|
||||
AM_CFLAGS="$AM_CFLAGS $CFLAG_VISIBILITY"
|
||||
AC_SUBST([AM_CFLAGS])
|
||||
|
||||
### Check for platform
|
||||
#case $host in
|
||||
#AIX) AC_DEFINE(HTS_PLATFORM, 1, [Defined to build under AIX]);;
|
||||
@@ -47,6 +101,21 @@ AC_MSG_WARN([*** in_addr_t not found]),
|
||||
#include <netinet/in.h>
|
||||
#include <arpa/inet.h>])
|
||||
|
||||
# check for in_port_
|
||||
AC_CHECK_TYPE(in_port_t, [], [AC_DEFINE([in_port_t], [uint16_t], [in_port_t])], [
|
||||
#include <sys/types.h>
|
||||
#include <netinet/in.h>
|
||||
])
|
||||
|
||||
# check for sa_family_t
|
||||
AC_CHECK_TYPE(sa_family_t, [], [AC_DEFINE([sa_family_t], [uint16_t], [sa_family_t])], [
|
||||
#include <sys/types.h>
|
||||
#include <netinet/in.h>
|
||||
])
|
||||
|
||||
# check wether misaligned access is possible or not
|
||||
AX_CHECK_ALIGNED_ACCESS_REQUIRED
|
||||
|
||||
### zlib
|
||||
CHECK_ZLIB()
|
||||
|
||||
|
||||
122
debian/changelog
vendored
122
debian/changelog
vendored
@@ -1,3 +1,125 @@
|
||||
httrack (3.48.16-1) unstable; urgency=low
|
||||
|
||||
* Updated to 3.48.16 (3.48-16)
|
||||
fixed FTBFS on ARM/MIPS again
|
||||
|
||||
-- Xavier Roche <xavier@debian.org> Wed, 09 Jul 2014 07:02:08 +0200
|
||||
|
||||
httrack (3.48.15-1) unstable; urgency=low
|
||||
|
||||
* Updated to 3.48.15 (3.48-15)
|
||||
fixed FTBFS on ARM/MIPS
|
||||
|
||||
-- Xavier Roche <xavier@debian.org> Tue, 08 Jul 2014 22:05:14 +0200
|
||||
|
||||
httrack (3.48.14-1) unstable; urgency=low
|
||||
|
||||
* Updated to 3.48.14 (3.48-14)
|
||||
|
||||
-- Xavier Roche <xavier@debian.org> Tue, 08 Jul 2014 20:36:55 +0200
|
||||
|
||||
httrack (3.48.13-1) unstable; urgency=low
|
||||
|
||||
* Updated to 3.48.13 (3.48-13)
|
||||
closes:#750931
|
||||
|
||||
-- Xavier Roche <xavier@debian.org> Sun, 08 Jun 2014 16:22:13 +0200
|
||||
|
||||
httrack (3.48.12-1) unstable; urgency=low
|
||||
|
||||
* Updated to 3.48.12 (3.48-12)
|
||||
Should fix missing/broken .h for libhttrack-dev
|
||||
|
||||
-- Xavier Roche <xavier@debian.org> Sun, 08 Jun 2014 13:19:49 +0200
|
||||
|
||||
httrack (3.48.11-1) unstable; urgency=low
|
||||
|
||||
* Updated to 3.48.11 (3.48-11)
|
||||
|
||||
-- Xavier Roche <xavier@debian.org> Fri, 06 Jun 2014 17:58:12 +0200
|
||||
|
||||
httrack (3.48.10-1) unstable; urgency=low
|
||||
|
||||
* Updated to 3.48.10 (3.48-10)
|
||||
|
||||
-- Xavier Roche <xavier@debian.org> Wed, 04 Jun 2014 19:00:07 +0200
|
||||
|
||||
httrack (3.48.9-1) unstable; urgency=low
|
||||
|
||||
* Updated to 3.48.9 (3.48-9)
|
||||
|
||||
-- Xavier Roche <xavier@debian.org> Wed, 21 May 2014 19:22:04 +0200
|
||||
|
||||
httrack (3.48.8-1) unstable; urgency=low
|
||||
|
||||
* Updated to 3.48.8 (3.48-8)
|
||||
|
||||
-- Xavier Roche <xavier@debian.org> Thu, 15 May 2014 19:21:21 +0200
|
||||
|
||||
httrack (3.48.7-1) unstable; urgency=low
|
||||
|
||||
* Updated to 3.48.7 (3.48-7)
|
||||
|
||||
-- Xavier Roche <xavier@debian.org> Wed, 14 May 2014 19:51:57 +0200
|
||||
|
||||
httrack (3.48.6-1) unstable; urgency=low
|
||||
|
||||
* Updated to 3.48.6 (3.48-6)
|
||||
|
||||
-- Xavier Roche <xavier@debian.org> Tue, 13 May 2014 21:23:02 +0200
|
||||
|
||||
httrack (3.48.5-1) unstable; urgency=low
|
||||
|
||||
* Updated to 3.48.5 (3.48-5)
|
||||
|
||||
-- Xavier Roche <xavier@debian.org> Fri, 02 May 2014 16:37:08 +0200
|
||||
|
||||
httrack (3.48.4-1) unstable; urgency=low
|
||||
|
||||
* Updated to 3.48.4 (3.48-4)
|
||||
closes:#746173
|
||||
|
||||
-- Xavier Roche <xavier@debian.org> Sun, 27 Apr 2014 18:48:57 +0200
|
||||
|
||||
httrack (3.48.3-1) unstable; urgency=low
|
||||
|
||||
* Updated to 3.48.3 (3.48-3)
|
||||
|
||||
-- Xavier Roche <xavier@debian.org> Fri, 11 Apr 2014 20:31:21 +0200
|
||||
|
||||
httrack (3.48.2-1) unstable; urgency=low
|
||||
|
||||
* Updated to 3.48.2 (3.48-2)
|
||||
|
||||
-- Xavier Roche <xavier@debian.org> Thu, 10 Apr 2014 18:30:08 +0200
|
||||
|
||||
httrack (3.48.1-5) unstable; urgency=low
|
||||
|
||||
* Really call dh_autoreconf, fix configure dependencies.
|
||||
|
||||
-- Matthias Klose <doko@ubuntu.com> Wed, 16 Apr 2014 14:46:20 +0200
|
||||
|
||||
httrack (3.48.1-4) unstable; urgency=low
|
||||
|
||||
* Cleanup in dependencies
|
||||
|
||||
-- Xavier Roche <xavier@debian.org> Tue, 15 Apr 2014 22:13:19 +0200
|
||||
|
||||
httrack (3.48.1-3) unstable; urgency=low
|
||||
|
||||
* Fixed FTBFS due to a missing Build-Depends: dh-autoreconf
|
||||
|
||||
-- Xavier Roche <xavier@debian.org> Tue, 15 Apr 2014 21:32:03 +0200
|
||||
|
||||
httrack (3.48.1-2) unstable; urgency=low
|
||||
|
||||
* Fixed removal of .a files even on architectures where .a are libraries
|
||||
closes:#744594
|
||||
Enable verosity of unit tests
|
||||
Call dh_autoreconf_clean before dh_clean
|
||||
|
||||
-- Xavier Roche <xavier@debian.org> Tue, 15 Apr 2014 21:02:14 +0200
|
||||
|
||||
httrack (3.48.1-1) unstable; urgency=low
|
||||
|
||||
* Updated to 3.48.1 (3.48-1)
|
||||
|
||||
6
debian/control
vendored
6
debian/control
vendored
@@ -2,9 +2,11 @@ Source: httrack
|
||||
Section: web
|
||||
Priority: optional
|
||||
Maintainer: Xavier Roche <roche@httrack.com>
|
||||
Standards-Version: 3.9.4
|
||||
Build-Depends: debhelper (>= 8.0.0), zlib1g-dev, libssl-dev, autotools-dev, autoconf, automake, libtool
|
||||
Standards-Version: 3.9.5
|
||||
Build-Depends: debhelper (>= 8.0.0), dh-autoreconf, autotools-dev, autoconf, autoconf-archive, automake, libtool, zlib1g-dev, libssl-dev
|
||||
Homepage: http://www.httrack.com
|
||||
Vcs-Svn: http://httrack.googlecode.com/svn/trunk
|
||||
Vcs-Browser: https://code.google.com/p/httrack/source/browse/trunk/src
|
||||
|
||||
Package: httrack
|
||||
Architecture: any
|
||||
|
||||
2
debian/copyright
vendored
2
debian/copyright
vendored
@@ -5,7 +5,7 @@ The current Debian maintainer is Xavier Roche <xavier@debian.org>
|
||||
|
||||
Upstream author: Xavier Roche <roche@httrack.com>
|
||||
|
||||
Copyright: 1998-2013 Xavier Roche and other contributors
|
||||
Copyright: 1998-2014 Xavier Roche and other contributors
|
||||
|
||||
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
|
||||
|
||||
19
debian/rules
vendored
19
debian/rules
vendored
@@ -23,11 +23,16 @@ ifeq (,$(findstring nostrip,$(DEB_BUILD_OPTIONS)))
|
||||
INSTALL_PROGRAM += -s
|
||||
endif
|
||||
|
||||
# as suggested by Simon McVittie
|
||||
# (https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=744380)
|
||||
override_dh_auto_test:
|
||||
VERBOSE=1 dh_auto_test
|
||||
|
||||
configure: configure-stamp
|
||||
configure-stamp:
|
||||
dh_testdir
|
||||
|
||||
autoreconf -v -i
|
||||
dh_autoreconf
|
||||
# note: dpkg-buildflags to be removed when compat=9
|
||||
dh_auto_configure -- --enable-online-unit-tests=auto $(shell dpkg-buildflags --export=configure)
|
||||
|
||||
@@ -50,6 +55,7 @@ clean:
|
||||
dh_testroot
|
||||
rm -f build-stamp configure-stamp
|
||||
dh_auto_clean
|
||||
dh_autoreconf_clean
|
||||
dh_clean
|
||||
|
||||
install: build
|
||||
@@ -79,10 +85,17 @@ install: build
|
||||
mkdir -p $(CURDIR)/debian/httrack/usr/lib/httrack/
|
||||
mv $(CURDIR)/debian/httrack/usr/bin/htsserver \
|
||||
$(CURDIR)/debian/httrack/usr/lib/httrack/
|
||||
rm -f $(CURDIR)/debian/httrack/usr/lib/*.a
|
||||
# remove *.la (https://wiki.debian.org/ReleaseGoals/LAFileRemoval)
|
||||
rm -f $(CURDIR)/debian/httrack/usr/lib/*.la
|
||||
rm -f $(CURDIR)/debian/httrack/usr/lib/httrack/*.a
|
||||
rm -f $(CURDIR)/debian/httrack/usr/lib/httrack/*.la
|
||||
# remove *.a unless we do not have *.so files
|
||||
# see BUG #744594
|
||||
if ls $(CURDIR)/debian/httrack/usr/lib/*.so >/dev/null 2>/dev/null ; then \
|
||||
rm -f $(CURDIR)/debian/httrack/usr/lib/*.a ; \
|
||||
fi
|
||||
if ls $(CURDIR)/debian/httrack/usr/lib/httrack/*.so >/dev/null 2>/dev/null ; then \
|
||||
rm -f $(CURDIR)/debian/httrack/usr/lib/httrack/*.a ; \
|
||||
fi
|
||||
mv $(CURDIR)/debian/httrack/usr/lib/httrack/lib* \
|
||||
$(CURDIR)/debian/httrack/usr/share/httrack/libtest/
|
||||
mkdir -p $(CURDIR)/debian/httrack/usr/lib/httrack/libtest
|
||||
|
||||
25
history.txt
25
history.txt
@@ -4,7 +4,30 @@ HTTrack Website Copier release history:
|
||||
|
||||
This file lists all changes and fixes that have been made for HTTrack.
|
||||
|
||||
3.48-1
|
||||
3.48-14
|
||||
+ Fixed: buggy FFFD (replacement character) in place of leading non-ascii character such as Chinese ones (aballboy)
|
||||
+ Fixed: FTBFS when compiling with zlib versions < 1.2.70 (sammyx)
|
||||
+ Fixed: buggy SVG (Smiling Spectre)
|
||||
+ Fixed: do not uncompress .tgz advertised as "streamed" (Smiling Spectre)
|
||||
+ Fixed: NULL pointer dereferencing in back_unserialize (htsback.c:976)
|
||||
+ Fixed: library development files
|
||||
+ Fixed: --advanced-maxlinks broken (Localhost)
|
||||
+ Fixed: -devel package should now be standalone
|
||||
+ Fixed: assertion failure at htscore.c:244 (len + liensbuf->string_buffer_size < liensbuf->string_buffer_capa)
|
||||
+ Fixed: injection-proof templates
|
||||
+ Fixed: htshash.c:330 assertion failure ("error invalidating hash entry") (Sergey)
|
||||
+ Fixed: Windows 2000 regression (fantozzi.usenet)
|
||||
+ Fixed: code cleanup (aliasing issues, const correctness, safe strings)
|
||||
+ New: handle --advanced-maxlinks=0 to disable maximum link limits
|
||||
+ New: updated ZIP routines (zlib 1.2.8)
|
||||
+ Fixed: broken 32-bit version
|
||||
+ Fixed: assertion "segOutputSize < segSize assertion fails at htscharset.c:993"
|
||||
+ Fixed: new zlib version fixing CVE-2004-0797 and CVE-2005-2096
|
||||
+ Fixed: more reliable crash reporting
|
||||
+ Fixed: fixed infamous "hashtable internal error: cuckoo/stash collision" errors
|
||||
+ Fixed: safety cleanup in many strings operations
|
||||
+ Fixed: buggy option pannels
|
||||
+ New: Enforce check against CVE-2014-0160
|
||||
+ New: improved hashtables to speedup large mirrors
|
||||
+ New: added unit tests
|
||||
+ New: Added %a option, allowing to define the "Accept:" header line.
|
||||
|
||||
@@ -115,6 +115,7 @@ DATA = $(HelpHtml_DATA) $(HelpHtmlTxt_DATA) $(HelpHtmldiv_DATA) \
|
||||
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
||||
ACLOCAL = @ACLOCAL@
|
||||
AMTAR = @AMTAR@
|
||||
AM_CFLAGS = @AM_CFLAGS@
|
||||
AR = @AR@
|
||||
AUTOCONF = @AUTOCONF@
|
||||
AUTOHEADER = @AUTOHEADER@
|
||||
@@ -123,14 +124,12 @@ AWK = @AWK@
|
||||
CC = @CC@
|
||||
CCDEPMODE = @CCDEPMODE@
|
||||
CFLAGS = @CFLAGS@
|
||||
CFLAG_VISIBILITY = @CFLAG_VISIBILITY@
|
||||
CPP = @CPP@
|
||||
CPPFLAGS = @CPPFLAGS@
|
||||
CXX = @CXX@
|
||||
CXXCPP = @CXXCPP@
|
||||
CXXDEPMODE = @CXXDEPMODE@
|
||||
CXXFLAGS = @CXXFLAGS@
|
||||
CYGPATH_W = @CYGPATH_W@
|
||||
DEFAULT_CFLAGS = @DEFAULT_CFLAGS@
|
||||
DEFAULT_LDFLAGS = @DEFAULT_LDFLAGS@
|
||||
DEFS = @DEFS@
|
||||
DEPDIR = @DEPDIR@
|
||||
DLLTOOL = @DLLTOOL@
|
||||
@@ -144,6 +143,7 @@ EGREP = @EGREP@
|
||||
EXEEXT = @EXEEXT@
|
||||
FGREP = @FGREP@
|
||||
GREP = @GREP@
|
||||
HAVE_VISIBILITY = @HAVE_VISIBILITY@
|
||||
HTTPS_SUPPORT = @HTTPS_SUPPORT@
|
||||
ICONV_LIBS = @ICONV_LIBS@
|
||||
INSTALL = @INSTALL@
|
||||
@@ -199,7 +199,6 @@ abs_top_builddir = @abs_top_builddir@
|
||||
abs_top_srcdir = @abs_top_srcdir@
|
||||
ac_ct_AR = @ac_ct_AR@
|
||||
ac_ct_CC = @ac_ct_CC@
|
||||
ac_ct_CXX = @ac_ct_CXX@
|
||||
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
|
||||
am__include = @am__include@
|
||||
am__leading_dot = @am__leading_dot@
|
||||
|
||||
@@ -52,8 +52,7 @@ offline browser : copy websites to a local directory</p>
|
||||
|
||||
<p style="margin-left:11%; margin-top: 1em"><b>httrack [
|
||||
url ]... [ −filter ]... [ +filter ]... [ −O,
|
||||
−−path</b> ] [ <b>−%O,
|
||||
−−chroot</b> ] [ <b>−w,
|
||||
−−path</b> ] [ <b>−w,
|
||||
−−mirror</b> ] [ <b>−W,
|
||||
−−mirror−wizard</b> ] [ <b>−g,
|
||||
−−get−files</b> ] [ <b>−i,
|
||||
@@ -70,8 +69,6 @@ url ]... [ −filter ]... [ +filter ]... [ −O,
|
||||
−−max−rate[=N]</b> ] [ <b>−%cN,
|
||||
−−connection−per−second[=N]</b> ] [
|
||||
<b>−GN, −−max−pause[=N]</b> ] [
|
||||
<b>−%mN,
|
||||
−−max−mms−time[=N]</b> ] [
|
||||
<b>−cN, −−sockets[=N]</b> ] [
|
||||
<b>−TN, −−timeout[=N]</b> ] [
|
||||
<b>−RN, −−retries[=N]</b> ] [
|
||||
@@ -111,7 +108,9 @@ url ]... [ −filter ]... [ +filter ]... [ −O,
|
||||
−−referer</b> ] [ <b>−%E,
|
||||
−−from</b> ] [ <b>−%F,
|
||||
−−footer</b> ] [ <b>−%l,
|
||||
−−language</b> ] [ <b>−C,
|
||||
−−language</b> ] [ <b>−%a,
|
||||
−−accept</b> ] [ <b>−%X,
|
||||
−−headers</b> ] [ <b>−C,
|
||||
−−cache[=N]</b> ] [ <b>−k,
|
||||
−−store−all−in−cache</b> ] [
|
||||
<b>−%n, −−do−not−recatch</b> ]
|
||||
@@ -144,8 +143,7 @@ url ]... [ −filter ]... [ +filter ]... [ −O,
|
||||
<b>−%!,
|
||||
−−disable−security−limits</b> ] [
|
||||
<b>−V, −−userdef−cmd</b> ] [
|
||||
<b>−%U, −−user</b> ] [ <b>−%W,
|
||||
−−callback</b> ] [ <b>−K,
|
||||
<b>−%W, −−callback</b> ] [ <b>−K,
|
||||
−−keep−links[=N]</b> ] [</p>
|
||||
|
||||
<h2>DESCRIPTION
|
||||
@@ -227,29 +225,17 @@ options:</b></p>
|
||||
cellspacing="0" cellpadding="0">
|
||||
<tr valign="top" align="left">
|
||||
<td width="11%"></td>
|
||||
<td width="4%">
|
||||
<td width="3%">
|
||||
|
||||
|
||||
<p>−O</p></td>
|
||||
<td width="7%"></td>
|
||||
<td width="8%"></td>
|
||||
<td width="78%">
|
||||
|
||||
|
||||
<p>path for mirror/logfiles+cache (−O path
|
||||
mirror[,path cache and logfiles]) (−−path
|
||||
<param>)</p> </td></tr>
|
||||
<tr valign="top" align="left">
|
||||
<td width="11%"></td>
|
||||
<td width="4%">
|
||||
|
||||
|
||||
<p>−%O</p></td>
|
||||
<td width="7%"></td>
|
||||
<td width="78%">
|
||||
|
||||
|
||||
<p>chroot path to, must be r00t (−%O root path)
|
||||
(−−chroot <param>)</p></td></tr>
|
||||
</table>
|
||||
|
||||
<p style="margin-left:11%; margin-top: 1em"><b>Action
|
||||
@@ -475,19 +461,6 @@ hour) (−−max−time[=N])</p></td></tr>
|
||||
|
||||
<p>pause transfer if N bytes reached, and wait until lock
|
||||
file is deleted (−−max−pause[=N])</p></td></tr>
|
||||
<tr valign="top" align="left">
|
||||
<td width="11%"></td>
|
||||
<td width="9%">
|
||||
|
||||
|
||||
<p>−%mN</p></td>
|
||||
<td width="2%"></td>
|
||||
<td width="78%">
|
||||
|
||||
|
||||
<p>maximum mms stream download time in seconds (60=1
|
||||
minute, 3600=1 hour)
|
||||
(−−max−mms−time[=N])</p> </td></tr>
|
||||
</table>
|
||||
|
||||
<p style="margin-left:11%; margin-top: 1em"><b>Flow
|
||||
@@ -1049,6 +1022,32 @@ HTTP headers (−F "user−agent name")
|
||||
|
||||
<p>preffered language (−%l "fr, en, jp, *"
|
||||
(−−language <param>)</p></td></tr>
|
||||
<tr valign="top" align="left">
|
||||
<td width="11%"></td>
|
||||
<td width="4%">
|
||||
|
||||
|
||||
<p>−%a</p></td>
|
||||
<td width="7%"></td>
|
||||
<td width="78%">
|
||||
|
||||
|
||||
<p>accepted formats (−%a
|
||||
"text/html,image/png;q=0.9,*/*;q=0.1"
|
||||
(−−accept <param>)</p></td></tr>
|
||||
<tr valign="top" align="left">
|
||||
<td width="11%"></td>
|
||||
<td width="4%">
|
||||
|
||||
|
||||
<p>−%X</p></td>
|
||||
<td width="7%"></td>
|
||||
<td width="78%">
|
||||
|
||||
|
||||
<p>additional HTTP header line (−%X
|
||||
"X−Magic: 42" (−−headers
|
||||
<param>)</p> </td></tr>
|
||||
</table>
|
||||
|
||||
<p style="margin-left:11%; margin-top: 1em"><b>Log, index,
|
||||
@@ -1632,18 +1631,6 @@ memory boundary checks)
|
||||
|
||||
<p>generate transfer rate statictics every minutes
|
||||
(−−debug−ratestats)</p> </td></tr>
|
||||
<tr valign="top" align="left">
|
||||
<td width="11%"></td>
|
||||
<td width="6%">
|
||||
|
||||
|
||||
<p>−#!</p></td>
|
||||
<td width="5%"></td>
|
||||
<td width="78%">
|
||||
|
||||
|
||||
<p>execute a shell command (−#! "echo
|
||||
hello") (−−exec <param>)</p></td></tr>
|
||||
</table>
|
||||
|
||||
<p style="margin-left:11%; margin-top: 1em"><b>Dangerous
|
||||
@@ -1707,25 +1694,13 @@ specific options:</b></p>
|
||||
|
||||
|
||||
<p style="margin-top: 1em">execute system command after
|
||||
each files ($0 is the filename: −V "rm ")
|
||||
each files ($0 is the filename: −V "rm \$0")
|
||||
(−−userdef−cmd <param>)</p></td></tr>
|
||||
<tr valign="top" align="left">
|
||||
<td width="11%"></td>
|
||||
<td width="4%">
|
||||
|
||||
|
||||
<p>−%U</p></td>
|
||||
<td width="7%"></td>
|
||||
<td width="78%">
|
||||
|
||||
|
||||
<p>run the engine with another id when called as root
|
||||
(−%U smith) (−−user <param>)</p></td></tr>
|
||||
<tr valign="top" align="left">
|
||||
<td width="11%"></td>
|
||||
<td width="4%">
|
||||
|
||||
|
||||
<p>−%W</p></td>
|
||||
<td width="7%"></td>
|
||||
<td width="78%">
|
||||
@@ -2311,7 +2286,7 @@ other information you deem necessary.</p>
|
||||
|
||||
|
||||
<p style="margin-left:11%; margin-top: 1em">Copyright (C)
|
||||
1998-2013 Xavier Roche and other contributors</p>
|
||||
1998-2014 Xavier Roche and other contributors</p>
|
||||
|
||||
<p style="margin-left:11%; margin-top: 1em">This program is
|
||||
free software: you can redistribute it and/or modify it
|
||||
|
||||
@@ -104,6 +104,7 @@ DATA = $(lang_DATA) $(langroot_DATA)
|
||||
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
||||
ACLOCAL = @ACLOCAL@
|
||||
AMTAR = @AMTAR@
|
||||
AM_CFLAGS = @AM_CFLAGS@
|
||||
AR = @AR@
|
||||
AUTOCONF = @AUTOCONF@
|
||||
AUTOHEADER = @AUTOHEADER@
|
||||
@@ -112,14 +113,12 @@ AWK = @AWK@
|
||||
CC = @CC@
|
||||
CCDEPMODE = @CCDEPMODE@
|
||||
CFLAGS = @CFLAGS@
|
||||
CFLAG_VISIBILITY = @CFLAG_VISIBILITY@
|
||||
CPP = @CPP@
|
||||
CPPFLAGS = @CPPFLAGS@
|
||||
CXX = @CXX@
|
||||
CXXCPP = @CXXCPP@
|
||||
CXXDEPMODE = @CXXDEPMODE@
|
||||
CXXFLAGS = @CXXFLAGS@
|
||||
CYGPATH_W = @CYGPATH_W@
|
||||
DEFAULT_CFLAGS = @DEFAULT_CFLAGS@
|
||||
DEFAULT_LDFLAGS = @DEFAULT_LDFLAGS@
|
||||
DEFS = @DEFS@
|
||||
DEPDIR = @DEPDIR@
|
||||
DLLTOOL = @DLLTOOL@
|
||||
@@ -133,6 +132,7 @@ EGREP = @EGREP@
|
||||
EXEEXT = @EXEEXT@
|
||||
FGREP = @FGREP@
|
||||
GREP = @GREP@
|
||||
HAVE_VISIBILITY = @HAVE_VISIBILITY@
|
||||
HTTPS_SUPPORT = @HTTPS_SUPPORT@
|
||||
ICONV_LIBS = @ICONV_LIBS@
|
||||
INSTALL = @INSTALL@
|
||||
@@ -188,7 +188,6 @@ abs_top_builddir = @abs_top_builddir@
|
||||
abs_top_srcdir = @abs_top_srcdir@
|
||||
ac_ct_AR = @ac_ct_AR@
|
||||
ac_ct_CC = @ac_ct_CC@
|
||||
ac_ct_CXX = @ac_ct_CXX@
|
||||
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
|
||||
am__include = @am__include@
|
||||
am__leading_dot = @am__leading_dot@
|
||||
|
||||
@@ -3,7 +3,7 @@ exemplesdir = $(datadir)/httrack/libtest
|
||||
exemples_DATA = *.c *.h *.txt
|
||||
EXTRA_DIST = $(exemples_DATA)
|
||||
|
||||
INCLUDES = \
|
||||
AM_CPPFLAGS = \
|
||||
@DEFAULT_CFLAGS@ \
|
||||
@THREADS_CFLAGS@ \
|
||||
@V6_FLAG@ \
|
||||
@@ -13,7 +13,7 @@ INCLUDES = \
|
||||
-DDATADIR=\""$(datadir)"\" \
|
||||
-DLIBDIR=\""$(libdir)"\"
|
||||
|
||||
AM_CPPFLAGS = -I../src
|
||||
AM_CPPFLAGS += -I../src
|
||||
AM_LDFLAGS = -L../src
|
||||
|
||||
# Examples
|
||||
|
||||
@@ -201,6 +201,7 @@ CTAGS = ctags
|
||||
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
||||
ACLOCAL = @ACLOCAL@
|
||||
AMTAR = @AMTAR@
|
||||
AM_CFLAGS = @AM_CFLAGS@
|
||||
AR = @AR@
|
||||
AUTOCONF = @AUTOCONF@
|
||||
AUTOHEADER = @AUTOHEADER@
|
||||
@@ -209,14 +210,12 @@ AWK = @AWK@
|
||||
CC = @CC@
|
||||
CCDEPMODE = @CCDEPMODE@
|
||||
CFLAGS = @CFLAGS@
|
||||
CFLAG_VISIBILITY = @CFLAG_VISIBILITY@
|
||||
CPP = @CPP@
|
||||
CPPFLAGS = @CPPFLAGS@
|
||||
CXX = @CXX@
|
||||
CXXCPP = @CXXCPP@
|
||||
CXXDEPMODE = @CXXDEPMODE@
|
||||
CXXFLAGS = @CXXFLAGS@
|
||||
CYGPATH_W = @CYGPATH_W@
|
||||
DEFAULT_CFLAGS = @DEFAULT_CFLAGS@
|
||||
DEFAULT_LDFLAGS = @DEFAULT_LDFLAGS@
|
||||
DEFS = @DEFS@
|
||||
DEPDIR = @DEPDIR@
|
||||
DLLTOOL = @DLLTOOL@
|
||||
@@ -230,6 +229,7 @@ EGREP = @EGREP@
|
||||
EXEEXT = @EXEEXT@
|
||||
FGREP = @FGREP@
|
||||
GREP = @GREP@
|
||||
HAVE_VISIBILITY = @HAVE_VISIBILITY@
|
||||
HTTPS_SUPPORT = @HTTPS_SUPPORT@
|
||||
ICONV_LIBS = @ICONV_LIBS@
|
||||
INSTALL = @INSTALL@
|
||||
@@ -285,7 +285,6 @@ abs_top_builddir = @abs_top_builddir@
|
||||
abs_top_srcdir = @abs_top_srcdir@
|
||||
ac_ct_AR = @ac_ct_AR@
|
||||
ac_ct_CC = @ac_ct_CC@
|
||||
ac_ct_CXX = @ac_ct_CXX@
|
||||
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
|
||||
am__include = @am__include@
|
||||
am__leading_dot = @am__leading_dot@
|
||||
@@ -335,17 +334,9 @@ top_srcdir = @top_srcdir@
|
||||
exemplesdir = $(datadir)/httrack/libtest
|
||||
exemples_DATA = *.c *.h *.txt
|
||||
EXTRA_DIST = $(exemples_DATA)
|
||||
INCLUDES = \
|
||||
@DEFAULT_CFLAGS@ \
|
||||
@THREADS_CFLAGS@ \
|
||||
@V6_FLAG@ \
|
||||
@LFS_FLAG@ \
|
||||
-DPREFIX=\""$(prefix)"\" \
|
||||
-DSYSCONFDIR=\""$(sysconfdir)"\" \
|
||||
-DDATADIR=\""$(datadir)"\" \
|
||||
-DLIBDIR=\""$(libdir)"\"
|
||||
|
||||
AM_CPPFLAGS = -I../src
|
||||
AM_CPPFLAGS = @DEFAULT_CFLAGS@ @THREADS_CFLAGS@ @V6_FLAG@ @LFS_FLAG@ \
|
||||
-DPREFIX=\""$(prefix)"\" -DSYSCONFDIR=\""$(sysconfdir)"\" \
|
||||
-DDATADIR=\""$(datadir)"\" -DLIBDIR=\""$(libdir)"\" -I../src
|
||||
AM_LDFLAGS = -L../src
|
||||
|
||||
# Examples
|
||||
@@ -485,22 +476,25 @@ distclean-compile:
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/callbacks-example-simple.Plo@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
|
||||
@am__fastdepCC_TRUE@ depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
|
||||
@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
|
||||
@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.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 $<
|
||||
@am__fastdepCC_FALSE@ $(COMPILE) -c -o $@ $<
|
||||
|
||||
.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
|
||||
@am__fastdepCC_TRUE@ depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\
|
||||
@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\
|
||||
@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.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) '$<'`
|
||||
@am__fastdepCC_FALSE@ $(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
|
||||
|
||||
.c.lo:
|
||||
@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
|
||||
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
|
||||
@am__fastdepCC_TRUE@ depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\
|
||||
@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
|
||||
@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
|
||||
|
||||
@@ -100,9 +100,9 @@ EXTERNAL_FUNCTION int hts_plug(httrackp * opt, const char *argv) {
|
||||
if (arg == NULL)
|
||||
arg = "log-wrapper-info";
|
||||
hts_log(opt, arg, "* plugging functions");
|
||||
CHAIN_FUNCTION(opt, check_html, process_file, (char *) arg);
|
||||
CHAIN_FUNCTION(opt, start, start_of_mirror, (char *) arg);
|
||||
CHAIN_FUNCTION(opt, end, end_of_mirror, (char *) arg);
|
||||
CHAIN_FUNCTION(opt, check_html, process_file, (void *) (uintptr_t) arg);
|
||||
CHAIN_FUNCTION(opt, start, start_of_mirror, (void *) (uintptr_t) arg);
|
||||
CHAIN_FUNCTION(opt, end, end_of_mirror, (void *) (uintptr_t) arg);
|
||||
|
||||
hts_log(opt, arg, "* module successfully plugged");
|
||||
return 1; /* success */
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
HTTrack Website Copier License Agreement:
|
||||
|
||||
HTTrack Website Copier, Offline Browser for Windows and Unix
|
||||
Copyright (C) 1998-2013 Xavier Roche and other contributors
|
||||
Copyright (C) 1998-2014 Xavier Roche and other contributors
|
||||
|
||||
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
|
||||
|
||||
@@ -74,6 +74,7 @@ am__can_run_installinfo = \
|
||||
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
||||
ACLOCAL = @ACLOCAL@
|
||||
AMTAR = @AMTAR@
|
||||
AM_CFLAGS = @AM_CFLAGS@
|
||||
AR = @AR@
|
||||
AUTOCONF = @AUTOCONF@
|
||||
AUTOHEADER = @AUTOHEADER@
|
||||
@@ -82,14 +83,12 @@ AWK = @AWK@
|
||||
CC = @CC@
|
||||
CCDEPMODE = @CCDEPMODE@
|
||||
CFLAGS = @CFLAGS@
|
||||
CFLAG_VISIBILITY = @CFLAG_VISIBILITY@
|
||||
CPP = @CPP@
|
||||
CPPFLAGS = @CPPFLAGS@
|
||||
CXX = @CXX@
|
||||
CXXCPP = @CXXCPP@
|
||||
CXXDEPMODE = @CXXDEPMODE@
|
||||
CXXFLAGS = @CXXFLAGS@
|
||||
CYGPATH_W = @CYGPATH_W@
|
||||
DEFAULT_CFLAGS = @DEFAULT_CFLAGS@
|
||||
DEFAULT_LDFLAGS = @DEFAULT_LDFLAGS@
|
||||
DEFS = @DEFS@
|
||||
DEPDIR = @DEPDIR@
|
||||
DLLTOOL = @DLLTOOL@
|
||||
@@ -103,6 +102,7 @@ EGREP = @EGREP@
|
||||
EXEEXT = @EXEEXT@
|
||||
FGREP = @FGREP@
|
||||
GREP = @GREP@
|
||||
HAVE_VISIBILITY = @HAVE_VISIBILITY@
|
||||
HTTPS_SUPPORT = @HTTPS_SUPPORT@
|
||||
ICONV_LIBS = @ICONV_LIBS@
|
||||
INSTALL = @INSTALL@
|
||||
@@ -158,7 +158,6 @@ abs_top_builddir = @abs_top_builddir@
|
||||
abs_top_srcdir = @abs_top_srcdir@
|
||||
ac_ct_AR = @ac_ct_AR@
|
||||
ac_ct_CC = @ac_ct_CC@
|
||||
ac_ct_CXX = @ac_ct_CXX@
|
||||
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
|
||||
am__include = @am__include@
|
||||
am__leading_dot = @am__leading_dot@
|
||||
|
||||
@@ -105,6 +105,7 @@ MANS = $(man_MANS)
|
||||
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
||||
ACLOCAL = @ACLOCAL@
|
||||
AMTAR = @AMTAR@
|
||||
AM_CFLAGS = @AM_CFLAGS@
|
||||
AR = @AR@
|
||||
AUTOCONF = @AUTOCONF@
|
||||
AUTOHEADER = @AUTOHEADER@
|
||||
@@ -113,14 +114,12 @@ AWK = @AWK@
|
||||
CC = @CC@
|
||||
CCDEPMODE = @CCDEPMODE@
|
||||
CFLAGS = @CFLAGS@
|
||||
CFLAG_VISIBILITY = @CFLAG_VISIBILITY@
|
||||
CPP = @CPP@
|
||||
CPPFLAGS = @CPPFLAGS@
|
||||
CXX = @CXX@
|
||||
CXXCPP = @CXXCPP@
|
||||
CXXDEPMODE = @CXXDEPMODE@
|
||||
CXXFLAGS = @CXXFLAGS@
|
||||
CYGPATH_W = @CYGPATH_W@
|
||||
DEFAULT_CFLAGS = @DEFAULT_CFLAGS@
|
||||
DEFAULT_LDFLAGS = @DEFAULT_LDFLAGS@
|
||||
DEFS = @DEFS@
|
||||
DEPDIR = @DEPDIR@
|
||||
DLLTOOL = @DLLTOOL@
|
||||
@@ -134,6 +133,7 @@ EGREP = @EGREP@
|
||||
EXEEXT = @EXEEXT@
|
||||
FGREP = @FGREP@
|
||||
GREP = @GREP@
|
||||
HAVE_VISIBILITY = @HAVE_VISIBILITY@
|
||||
HTTPS_SUPPORT = @HTTPS_SUPPORT@
|
||||
ICONV_LIBS = @ICONV_LIBS@
|
||||
INSTALL = @INSTALL@
|
||||
@@ -189,7 +189,6 @@ abs_top_builddir = @abs_top_builddir@
|
||||
abs_top_srcdir = @abs_top_srcdir@
|
||||
ac_ct_AR = @ac_ct_AR@
|
||||
ac_ct_CC = @ac_ct_CC@
|
||||
ac_ct_CXX = @ac_ct_CXX@
|
||||
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
|
||||
am__include = @am__include@
|
||||
am__leading_dot = @am__leading_dot@
|
||||
|
||||
@@ -1,15 +1,13 @@
|
||||
.\" Process this file with
|
||||
.\" groff -man -Tascii httrack.1
|
||||
.\"
|
||||
.TH httrack 1 "HTTrack version 3.47-26 (compiled Sep 6 2013)" "httrack website copier"
|
||||
.TH httrack 1 "08 July 2014" "httrack website copier"
|
||||
.SH NAME
|
||||
httrack \- offline browser : copy websites to a local directory
|
||||
.SH SYNOPSIS
|
||||
.B httrack [ url ]... [ \-filter ]... [ +filter ]... [
|
||||
.B \-O, \-\-path
|
||||
] [
|
||||
.B \-%O, \-\-chroot
|
||||
] [
|
||||
.B \-w, \-\-mirror
|
||||
] [
|
||||
.B \-W, \-\-mirror\-wizard
|
||||
@@ -42,8 +40,6 @@ httrack \- offline browser : copy websites to a local directory
|
||||
] [
|
||||
.B \-GN, \-\-max\-pause[=N]
|
||||
] [
|
||||
.B \-%mN, \-\-max\-mms\-time[=N]
|
||||
] [
|
||||
.B \-cN, \-\-sockets[=N]
|
||||
] [
|
||||
.B \-TN, \-\-timeout[=N]
|
||||
@@ -122,6 +118,10 @@ httrack \- offline browser : copy websites to a local directory
|
||||
] [
|
||||
.B \-%l, \-\-language
|
||||
] [
|
||||
.B \-%a, \-\-accept
|
||||
] [
|
||||
.B \-%X, \-\-headers
|
||||
] [
|
||||
.B \-C, \-\-cache[=N]
|
||||
] [
|
||||
.B \-k, \-\-store\-all\-in\-cache
|
||||
@@ -174,8 +174,6 @@ httrack \- offline browser : copy websites to a local directory
|
||||
] [
|
||||
.B \-V, \-\-userdef\-cmd
|
||||
] [
|
||||
.B \-%U, \-\-user
|
||||
] [
|
||||
.B \-%W, \-\-callback
|
||||
] [
|
||||
.B \-K, \-\-keep\-links[=N]
|
||||
@@ -214,9 +212,6 @@ mirror[,path
|
||||
cache
|
||||
and
|
||||
logfiles]) (\-\-path <param>)
|
||||
.IP \-%O
|
||||
chroot path to, must be r00t (\-%O root
|
||||
path) (\-\-chroot <param>)
|
||||
|
||||
.SS Action options:
|
||||
.IP \-w
|
||||
@@ -257,8 +252,6 @@ maximum transfer rate in bytes/seconds (1000=1KB/s max) (\-\-max\-rate[=N])
|
||||
maximum number of connections/seconds (*%c10) (\-\-connection\-per\-second[=N])
|
||||
.IP \-GN
|
||||
pause transfer if N bytes reached, and wait until lock file is deleted (\-\-max\-pause[=N])
|
||||
.IP \-%mN
|
||||
maximum mms stream download time in seconds (60=1 minute, 3600=1 hour) (\-\-max\-mms\-time[=N])
|
||||
|
||||
.SS Flow control:
|
||||
.IP \-cN
|
||||
@@ -353,6 +346,10 @@ from email address sent in HTTP headers (\-\-from <param>)
|
||||
footer string in Html code (\-%F "Mirrored [from host %s [file %s [at %s]]]" (\-\-footer <param>)
|
||||
.IP \-%l
|
||||
preffered language (\-%l "fr, en, jp, *" (\-\-language <param>)
|
||||
.IP \-%a
|
||||
accepted formats (\-%a "text/html,image/png;q=0.9,*/*;q=0.1" (\-\-accept <param>)
|
||||
.IP \-%X
|
||||
additional HTTP header line (\-%X "X\-Magic: 42" (\-\-headers <param>)
|
||||
|
||||
.SS Log, index, cache
|
||||
.IP \-C
|
||||
@@ -455,8 +452,6 @@ generate transfer ops. log every minutes (\-\-debug\-xfrstats)
|
||||
wait time (\-\-advanced\-wait)
|
||||
.IP \-#Z
|
||||
generate transfer rate statictics every minutes (\-\-debug\-ratestats)
|
||||
.IP \-#!
|
||||
execute a shell command (\-#! "echo hello") (\-\-exec <param>)
|
||||
|
||||
.SS Dangerous options: (do NOT use unless you exactly know what you are doing)
|
||||
.IP \-%!
|
||||
@@ -468,9 +463,7 @@ IT WITH EXTREME CARE
|
||||
|
||||
.SS Command\-line specific options:
|
||||
.IP \-V
|
||||
execute system command after each files ($0 is the filename: \-V "rm \$0") (\-\-userdef\-cmd <param>)
|
||||
.IP \-%U
|
||||
run the engine with another id when called as root (\-%U smith) (\-\-user <param>)
|
||||
execute system command after each files ($0 is the filename: \-V "rm \\$0") (\-\-userdef\-cmd <param>)
|
||||
.IP \-%W
|
||||
use an external library function as a wrapper (\-%W myfoo.so[,myparameters]) (\-\-callback <param>)
|
||||
|
||||
@@ -617,7 +610,7 @@ Please reports bugs to
|
||||
.B <bugs@httrack.com>.
|
||||
Include a complete, self-contained example that will allow the bug to be reproduced, and say which version of httrack you are using. Do not forget to detail options used, OS version, and any other information you deem necessary.
|
||||
.SH COPYRIGHT
|
||||
Copyright (C) 1998-2013 Xavier Roche and other contributors
|
||||
Copyright (C) 1998-2014 Xavier Roche and other contributors
|
||||
|
||||
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
|
||||
|
||||
@@ -8,10 +8,14 @@ DevIncludes_DATA = \
|
||||
../config.h \
|
||||
htsmodules.h \
|
||||
htsbasenet.h \
|
||||
htsnet.h \
|
||||
htsbauth.h \
|
||||
htsdefines.h
|
||||
htsdefines.h \
|
||||
htsstrings.h \
|
||||
htsarrays.h \
|
||||
htssafe.h
|
||||
|
||||
INCLUDES = \
|
||||
AM_CPPFLAGS = \
|
||||
@DEFAULT_CFLAGS@ \
|
||||
@THREADS_CFLAGS@ \
|
||||
@V6_FLAG@ \
|
||||
@@ -26,41 +30,44 @@ bin_PROGRAMS = proxytrack httrack htsserver
|
||||
httrack_LDADD = $(THREADS_LIBS) libhttrack.la
|
||||
htsserver_LDADD = $(THREADS_LIBS) $(SOCKET_LIBS) libhttrack.la
|
||||
proxytrack_LDADD = $(THREADS_LIBS) $(SOCKET_LIBS)
|
||||
proxytrack_CFLAGS = $(AM_CFLAGS) -DNO_MALLOCT
|
||||
proxytrack_CFLAGS = $(AM_CFLAGS) -DNO_MALLOCT -DZLIB_CONST -DHTS_INTHASH_USES_MD5
|
||||
htsserver_CFLAGS = $(AM_CFLAGS) -DZLIB_CONST -DHTS_INTHASH_USES_MD5
|
||||
|
||||
lib_LTLIBRARIES = libhttrack.la libhtsjava.la
|
||||
|
||||
htsserver_SOURCES = htsserver.c htsserver.h htsweb.c htsweb.h
|
||||
proxytrack_SOURCES = proxy/main.c \
|
||||
proxy/proxytrack.c proxy/store.c \
|
||||
htsinthash.c htsmd5.c md5.c \
|
||||
coucal.c htsmd5.c md5.c \
|
||||
minizip/ioapi.c minizip/mztools.c minizip/unzip.c minizip/zip.c
|
||||
|
||||
whttrackrundir = $(bindir)
|
||||
whttrackrun_SCRIPTS = webhttrack
|
||||
|
||||
libhttrack_la_SOURCES = htscore.c htsparse.c htsback.c htscache.c \
|
||||
htscatchurl.c htsfilters.c htsftp.c htshash.c htsinthash.c \
|
||||
htscatchurl.c htsfilters.c htsftp.c htshash.c coucal.c \
|
||||
htshelp.c htslib.c htscoremain.c \
|
||||
htsname.c htsrobots.c htstools.c htswizard.c \
|
||||
htsalias.c htsthread.c htsindex.c htsbauth.c \
|
||||
htsmd5.c htszlib.c htswrap.c \
|
||||
htsmd5.c htszlib.c htswrap.c htsconcat.c \
|
||||
htsmodules.c htscharset.c punycode.c htsencoding.c \
|
||||
md5.c \
|
||||
minizip/ioapi.c minizip/mztools.c minizip/unzip.c minizip/zip.c \
|
||||
hts-indextmpl.h htsalias.h htsback.h htsbase.h \
|
||||
hts-indextmpl.h htsalias.h htsback.h htsbase.h htssafe.h \
|
||||
htsbasenet.h htsbauth.h htscache.h htscatchurl.h \
|
||||
htsconfig.h htscore.h htsparse.h htscoremain.h htsdefines.h \
|
||||
htsfilters.h htsftp.h htsglobal.h htshash.h htsinthash.h \
|
||||
htsfilters.h htsftp.h htsglobal.h htshash.h coucal.h \
|
||||
htshelp.h htsindex.h htslib.h htsmd5.h \
|
||||
htsmodules.h htsname.h htsnet.h \
|
||||
htsopt.h htsrobots.h htsthread.h \
|
||||
htstools.h htswizard.h htswrap.h htszlib.h \
|
||||
htsstrings.h httrack-library.h htscharset.h punycode.h htsencoding.h \
|
||||
htsstrings.h htsarrays.h httrack-library.h \
|
||||
htscharset.h punycode.h htsencoding.h \
|
||||
htsentities.h htsentities.sh htsbasiccharsets.sh htscodepages.h \
|
||||
md5.h murmurhash3.h \
|
||||
minizip/crypt.h minizip/ioapi.h minizip/mztools.h minizip/unzip.h minizip/zip.h
|
||||
libhttrack_la_LIBADD = $(THREADS_LIBS) $(ZLIB_LIBS) $(OPENSSL_LIBS) $(DL_LIBS) $(SOCKET_LIBS) $(ICONV_LIBS)
|
||||
libhttrack_la_CFLAGS = $(AM_CFLAGS) -DLIBHTTRACK_EXPORTS -DZLIB_CONST
|
||||
libhttrack_la_LDFLAGS = -version-info $(VERSION_INFO)
|
||||
|
||||
libhtsjava_la_SOURCES = htsjava.c htsjava.h
|
||||
@@ -68,9 +75,22 @@ libhtsjava_la_LIBADD = $(THREADS_LIBS) $(DL_LIBS) libhttrack.la
|
||||
libhtsjava_la_LDFLAGS = -version-info $(VERSION_INFO)
|
||||
|
||||
EXTRA_DIST = httrack.h webhttrack \
|
||||
minizip/ChangeLogUnzip \
|
||||
murmurhash3.h.diff \
|
||||
murmurhash3.h.orig \
|
||||
minizip/iowin32.c \
|
||||
minizip/iowin32.h \
|
||||
minizip/ioapi.c.diff \
|
||||
minizip/ioapi.h.diff \
|
||||
minizip/zip.c.diff \
|
||||
minizip/zip.h.diff \
|
||||
minizip/mztools.c.diff \
|
||||
minizip/ioapi.c.orig \
|
||||
minizip/ioapi.h.orig \
|
||||
minizip/mztools.c.orig \
|
||||
minizip/zip.c.orig \
|
||||
minizip/zip.h.orig \
|
||||
minizip/MiniZip64_Changes.txt \
|
||||
minizip/MiniZip64_info.txt \
|
||||
proxy/AUTHORS \
|
||||
proxy/COPYING \
|
||||
proxy/changelog.txt \
|
||||
|
||||
694
src/Makefile.in
694
src/Makefile.in
@@ -110,31 +110,49 @@ libhtsjava_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
|
||||
libhttrack_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \
|
||||
$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
|
||||
$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
|
||||
am_libhttrack_la_OBJECTS = htscore.lo htsparse.lo htsback.lo \
|
||||
htscache.lo htscatchurl.lo htsfilters.lo htsftp.lo htshash.lo \
|
||||
htsinthash.lo htshelp.lo htslib.lo htscoremain.lo htsname.lo \
|
||||
htsrobots.lo htstools.lo htswizard.lo htsalias.lo htsthread.lo \
|
||||
htsindex.lo htsbauth.lo htsmd5.lo htszlib.lo htswrap.lo \
|
||||
htsmodules.lo htscharset.lo punycode.lo htsencoding.lo md5.lo \
|
||||
ioapi.lo mztools.lo unzip.lo zip.lo
|
||||
am__dirstamp = $(am__leading_dot)dirstamp
|
||||
am_libhttrack_la_OBJECTS = libhttrack_la-htscore.lo \
|
||||
libhttrack_la-htsparse.lo libhttrack_la-htsback.lo \
|
||||
libhttrack_la-htscache.lo libhttrack_la-htscatchurl.lo \
|
||||
libhttrack_la-htsfilters.lo libhttrack_la-htsftp.lo \
|
||||
libhttrack_la-htshash.lo libhttrack_la-coucal.lo \
|
||||
libhttrack_la-htshelp.lo libhttrack_la-htslib.lo \
|
||||
libhttrack_la-htscoremain.lo libhttrack_la-htsname.lo \
|
||||
libhttrack_la-htsrobots.lo libhttrack_la-htstools.lo \
|
||||
libhttrack_la-htswizard.lo libhttrack_la-htsalias.lo \
|
||||
libhttrack_la-htsthread.lo libhttrack_la-htsindex.lo \
|
||||
libhttrack_la-htsbauth.lo libhttrack_la-htsmd5.lo \
|
||||
libhttrack_la-htszlib.lo libhttrack_la-htswrap.lo \
|
||||
libhttrack_la-htsconcat.lo libhttrack_la-htsmodules.lo \
|
||||
libhttrack_la-htscharset.lo libhttrack_la-punycode.lo \
|
||||
libhttrack_la-htsencoding.lo libhttrack_la-md5.lo \
|
||||
minizip/libhttrack_la-ioapi.lo \
|
||||
minizip/libhttrack_la-mztools.lo \
|
||||
minizip/libhttrack_la-unzip.lo minizip/libhttrack_la-zip.lo
|
||||
libhttrack_la_OBJECTS = $(am_libhttrack_la_OBJECTS)
|
||||
libhttrack_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
|
||||
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
|
||||
$(libhttrack_la_LDFLAGS) $(LDFLAGS) -o $@
|
||||
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(libhttrack_la_CFLAGS) \
|
||||
$(CFLAGS) $(libhttrack_la_LDFLAGS) $(LDFLAGS) -o $@
|
||||
PROGRAMS = $(bin_PROGRAMS)
|
||||
am_htsserver_OBJECTS = htsserver.$(OBJEXT) htsweb.$(OBJEXT)
|
||||
am_htsserver_OBJECTS = htsserver-htsserver.$(OBJEXT) \
|
||||
htsserver-htsweb.$(OBJEXT)
|
||||
htsserver_OBJECTS = $(am_htsserver_OBJECTS)
|
||||
htsserver_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
|
||||
libhttrack.la
|
||||
htsserver_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
|
||||
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(htsserver_CFLAGS) \
|
||||
$(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
|
||||
httrack_SOURCES = httrack.c
|
||||
httrack_OBJECTS = httrack.$(OBJEXT)
|
||||
httrack_DEPENDENCIES = $(am__DEPENDENCIES_1) libhttrack.la
|
||||
am_proxytrack_OBJECTS = proxytrack-main.$(OBJEXT) \
|
||||
proxytrack-proxytrack.$(OBJEXT) proxytrack-store.$(OBJEXT) \
|
||||
proxytrack-htsinthash.$(OBJEXT) proxytrack-htsmd5.$(OBJEXT) \
|
||||
proxytrack-md5.$(OBJEXT) proxytrack-ioapi.$(OBJEXT) \
|
||||
proxytrack-mztools.$(OBJEXT) proxytrack-unzip.$(OBJEXT) \
|
||||
proxytrack-zip.$(OBJEXT)
|
||||
am_proxytrack_OBJECTS = proxy/proxytrack-main.$(OBJEXT) \
|
||||
proxy/proxytrack-proxytrack.$(OBJEXT) \
|
||||
proxy/proxytrack-store.$(OBJEXT) proxytrack-coucal.$(OBJEXT) \
|
||||
proxytrack-htsmd5.$(OBJEXT) proxytrack-md5.$(OBJEXT) \
|
||||
minizip/proxytrack-ioapi.$(OBJEXT) \
|
||||
minizip/proxytrack-mztools.$(OBJEXT) \
|
||||
minizip/proxytrack-unzip.$(OBJEXT) \
|
||||
minizip/proxytrack-zip.$(OBJEXT)
|
||||
proxytrack_OBJECTS = $(am_proxytrack_OBJECTS)
|
||||
proxytrack_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
|
||||
proxytrack_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
|
||||
@@ -169,6 +187,7 @@ CTAGS = ctags
|
||||
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
||||
ACLOCAL = @ACLOCAL@
|
||||
AMTAR = @AMTAR@
|
||||
AM_CFLAGS = @AM_CFLAGS@
|
||||
AR = @AR@
|
||||
AUTOCONF = @AUTOCONF@
|
||||
AUTOHEADER = @AUTOHEADER@
|
||||
@@ -177,14 +196,12 @@ AWK = @AWK@
|
||||
CC = @CC@
|
||||
CCDEPMODE = @CCDEPMODE@
|
||||
CFLAGS = @CFLAGS@
|
||||
CFLAG_VISIBILITY = @CFLAG_VISIBILITY@
|
||||
CPP = @CPP@
|
||||
CPPFLAGS = @CPPFLAGS@
|
||||
CXX = @CXX@
|
||||
CXXCPP = @CXXCPP@
|
||||
CXXDEPMODE = @CXXDEPMODE@
|
||||
CXXFLAGS = @CXXFLAGS@
|
||||
CYGPATH_W = @CYGPATH_W@
|
||||
DEFAULT_CFLAGS = @DEFAULT_CFLAGS@
|
||||
DEFAULT_LDFLAGS = @DEFAULT_LDFLAGS@
|
||||
DEFS = @DEFS@
|
||||
DEPDIR = @DEPDIR@
|
||||
DLLTOOL = @DLLTOOL@
|
||||
@@ -198,6 +215,7 @@ EGREP = @EGREP@
|
||||
EXEEXT = @EXEEXT@
|
||||
FGREP = @FGREP@
|
||||
GREP = @GREP@
|
||||
HAVE_VISIBILITY = @HAVE_VISIBILITY@
|
||||
HTTPS_SUPPORT = @HTTPS_SUPPORT@
|
||||
ICONV_LIBS = @ICONV_LIBS@
|
||||
INSTALL = @INSTALL@
|
||||
@@ -253,7 +271,6 @@ abs_top_builddir = @abs_top_builddir@
|
||||
abs_top_srcdir = @abs_top_srcdir@
|
||||
ac_ct_AR = @ac_ct_AR@
|
||||
ac_ct_CC = @ac_ct_CC@
|
||||
ac_ct_CXX = @ac_ct_CXX@
|
||||
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
|
||||
am__include = @am__include@
|
||||
am__leading_dot = @am__leading_dot@
|
||||
@@ -310,10 +327,14 @@ DevIncludes_DATA = \
|
||||
../config.h \
|
||||
htsmodules.h \
|
||||
htsbasenet.h \
|
||||
htsnet.h \
|
||||
htsbauth.h \
|
||||
htsdefines.h
|
||||
htsdefines.h \
|
||||
htsstrings.h \
|
||||
htsarrays.h \
|
||||
htssafe.h
|
||||
|
||||
INCLUDES = \
|
||||
AM_CPPFLAGS = \
|
||||
@DEFAULT_CFLAGS@ \
|
||||
@THREADS_CFLAGS@ \
|
||||
@V6_FLAG@ \
|
||||
@@ -326,47 +347,63 @@ INCLUDES = \
|
||||
httrack_LDADD = $(THREADS_LIBS) libhttrack.la
|
||||
htsserver_LDADD = $(THREADS_LIBS) $(SOCKET_LIBS) libhttrack.la
|
||||
proxytrack_LDADD = $(THREADS_LIBS) $(SOCKET_LIBS)
|
||||
proxytrack_CFLAGS = $(AM_CFLAGS) -DNO_MALLOCT
|
||||
proxytrack_CFLAGS = $(AM_CFLAGS) -DNO_MALLOCT -DZLIB_CONST -DHTS_INTHASH_USES_MD5
|
||||
htsserver_CFLAGS = $(AM_CFLAGS) -DZLIB_CONST -DHTS_INTHASH_USES_MD5
|
||||
lib_LTLIBRARIES = libhttrack.la libhtsjava.la
|
||||
htsserver_SOURCES = htsserver.c htsserver.h htsweb.c htsweb.h
|
||||
proxytrack_SOURCES = proxy/main.c \
|
||||
proxy/proxytrack.c proxy/store.c \
|
||||
htsinthash.c htsmd5.c md5.c \
|
||||
coucal.c htsmd5.c md5.c \
|
||||
minizip/ioapi.c minizip/mztools.c minizip/unzip.c minizip/zip.c
|
||||
|
||||
whttrackrundir = $(bindir)
|
||||
whttrackrun_SCRIPTS = webhttrack
|
||||
libhttrack_la_SOURCES = htscore.c htsparse.c htsback.c htscache.c \
|
||||
htscatchurl.c htsfilters.c htsftp.c htshash.c htsinthash.c \
|
||||
htscatchurl.c htsfilters.c htsftp.c htshash.c coucal.c \
|
||||
htshelp.c htslib.c htscoremain.c \
|
||||
htsname.c htsrobots.c htstools.c htswizard.c \
|
||||
htsalias.c htsthread.c htsindex.c htsbauth.c \
|
||||
htsmd5.c htszlib.c htswrap.c \
|
||||
htsmd5.c htszlib.c htswrap.c htsconcat.c \
|
||||
htsmodules.c htscharset.c punycode.c htsencoding.c \
|
||||
md5.c \
|
||||
minizip/ioapi.c minizip/mztools.c minizip/unzip.c minizip/zip.c \
|
||||
hts-indextmpl.h htsalias.h htsback.h htsbase.h \
|
||||
hts-indextmpl.h htsalias.h htsback.h htsbase.h htssafe.h \
|
||||
htsbasenet.h htsbauth.h htscache.h htscatchurl.h \
|
||||
htsconfig.h htscore.h htsparse.h htscoremain.h htsdefines.h \
|
||||
htsfilters.h htsftp.h htsglobal.h htshash.h htsinthash.h \
|
||||
htsfilters.h htsftp.h htsglobal.h htshash.h coucal.h \
|
||||
htshelp.h htsindex.h htslib.h htsmd5.h \
|
||||
htsmodules.h htsname.h htsnet.h \
|
||||
htsopt.h htsrobots.h htsthread.h \
|
||||
htstools.h htswizard.h htswrap.h htszlib.h \
|
||||
htsstrings.h httrack-library.h htscharset.h punycode.h htsencoding.h \
|
||||
htsstrings.h htsarrays.h httrack-library.h \
|
||||
htscharset.h punycode.h htsencoding.h \
|
||||
htsentities.h htsentities.sh htsbasiccharsets.sh htscodepages.h \
|
||||
md5.h murmurhash3.h \
|
||||
minizip/crypt.h minizip/ioapi.h minizip/mztools.h minizip/unzip.h minizip/zip.h
|
||||
|
||||
libhttrack_la_LIBADD = $(THREADS_LIBS) $(ZLIB_LIBS) $(OPENSSL_LIBS) $(DL_LIBS) $(SOCKET_LIBS) $(ICONV_LIBS)
|
||||
libhttrack_la_CFLAGS = $(AM_CFLAGS) -DLIBHTTRACK_EXPORTS -DZLIB_CONST
|
||||
libhttrack_la_LDFLAGS = -version-info $(VERSION_INFO)
|
||||
libhtsjava_la_SOURCES = htsjava.c htsjava.h
|
||||
libhtsjava_la_LIBADD = $(THREADS_LIBS) $(DL_LIBS) libhttrack.la
|
||||
libhtsjava_la_LDFLAGS = -version-info $(VERSION_INFO)
|
||||
EXTRA_DIST = httrack.h webhttrack \
|
||||
minizip/ChangeLogUnzip \
|
||||
murmurhash3.h.diff \
|
||||
murmurhash3.h.orig \
|
||||
minizip/iowin32.c \
|
||||
minizip/iowin32.h \
|
||||
minizip/ioapi.c.diff \
|
||||
minizip/ioapi.h.diff \
|
||||
minizip/zip.c.diff \
|
||||
minizip/zip.h.diff \
|
||||
minizip/mztools.c.diff \
|
||||
minizip/ioapi.c.orig \
|
||||
minizip/ioapi.h.orig \
|
||||
minizip/mztools.c.orig \
|
||||
minizip/zip.c.orig \
|
||||
minizip/zip.h.orig \
|
||||
minizip/MiniZip64_Changes.txt \
|
||||
minizip/MiniZip64_info.txt \
|
||||
proxy/AUTHORS \
|
||||
proxy/COPYING \
|
||||
proxy/changelog.txt \
|
||||
@@ -443,6 +480,20 @@ clean-libLTLIBRARIES:
|
||||
done
|
||||
libhtsjava.la: $(libhtsjava_la_OBJECTS) $(libhtsjava_la_DEPENDENCIES) $(EXTRA_libhtsjava_la_DEPENDENCIES)
|
||||
$(libhtsjava_la_LINK) -rpath $(libdir) $(libhtsjava_la_OBJECTS) $(libhtsjava_la_LIBADD) $(LIBS)
|
||||
minizip/$(am__dirstamp):
|
||||
@$(MKDIR_P) minizip
|
||||
@: > minizip/$(am__dirstamp)
|
||||
minizip/$(DEPDIR)/$(am__dirstamp):
|
||||
@$(MKDIR_P) minizip/$(DEPDIR)
|
||||
@: > minizip/$(DEPDIR)/$(am__dirstamp)
|
||||
minizip/libhttrack_la-ioapi.lo: minizip/$(am__dirstamp) \
|
||||
minizip/$(DEPDIR)/$(am__dirstamp)
|
||||
minizip/libhttrack_la-mztools.lo: minizip/$(am__dirstamp) \
|
||||
minizip/$(DEPDIR)/$(am__dirstamp)
|
||||
minizip/libhttrack_la-unzip.lo: minizip/$(am__dirstamp) \
|
||||
minizip/$(DEPDIR)/$(am__dirstamp)
|
||||
minizip/libhttrack_la-zip.lo: minizip/$(am__dirstamp) \
|
||||
minizip/$(DEPDIR)/$(am__dirstamp)
|
||||
libhttrack.la: $(libhttrack_la_OBJECTS) $(libhttrack_la_DEPENDENCIES) $(EXTRA_libhttrack_la_DEPENDENCIES)
|
||||
$(libhttrack_la_LINK) -rpath $(libdir) $(libhttrack_la_OBJECTS) $(libhttrack_la_LIBADD) $(LIBS)
|
||||
install-binPROGRAMS: $(bin_PROGRAMS)
|
||||
@@ -493,10 +544,30 @@ clean-binPROGRAMS:
|
||||
rm -f $$list
|
||||
htsserver$(EXEEXT): $(htsserver_OBJECTS) $(htsserver_DEPENDENCIES) $(EXTRA_htsserver_DEPENDENCIES)
|
||||
@rm -f htsserver$(EXEEXT)
|
||||
$(LINK) $(htsserver_OBJECTS) $(htsserver_LDADD) $(LIBS)
|
||||
$(htsserver_LINK) $(htsserver_OBJECTS) $(htsserver_LDADD) $(LIBS)
|
||||
httrack$(EXEEXT): $(httrack_OBJECTS) $(httrack_DEPENDENCIES) $(EXTRA_httrack_DEPENDENCIES)
|
||||
@rm -f httrack$(EXEEXT)
|
||||
$(LINK) $(httrack_OBJECTS) $(httrack_LDADD) $(LIBS)
|
||||
proxy/$(am__dirstamp):
|
||||
@$(MKDIR_P) proxy
|
||||
@: > proxy/$(am__dirstamp)
|
||||
proxy/$(DEPDIR)/$(am__dirstamp):
|
||||
@$(MKDIR_P) proxy/$(DEPDIR)
|
||||
@: > proxy/$(DEPDIR)/$(am__dirstamp)
|
||||
proxy/proxytrack-main.$(OBJEXT): proxy/$(am__dirstamp) \
|
||||
proxy/$(DEPDIR)/$(am__dirstamp)
|
||||
proxy/proxytrack-proxytrack.$(OBJEXT): proxy/$(am__dirstamp) \
|
||||
proxy/$(DEPDIR)/$(am__dirstamp)
|
||||
proxy/proxytrack-store.$(OBJEXT): proxy/$(am__dirstamp) \
|
||||
proxy/$(DEPDIR)/$(am__dirstamp)
|
||||
minizip/proxytrack-ioapi.$(OBJEXT): minizip/$(am__dirstamp) \
|
||||
minizip/$(DEPDIR)/$(am__dirstamp)
|
||||
minizip/proxytrack-mztools.$(OBJEXT): minizip/$(am__dirstamp) \
|
||||
minizip/$(DEPDIR)/$(am__dirstamp)
|
||||
minizip/proxytrack-unzip.$(OBJEXT): minizip/$(am__dirstamp) \
|
||||
minizip/$(DEPDIR)/$(am__dirstamp)
|
||||
minizip/proxytrack-zip.$(OBJEXT): minizip/$(am__dirstamp) \
|
||||
minizip/$(DEPDIR)/$(am__dirstamp)
|
||||
proxytrack$(EXEEXT): $(proxytrack_OBJECTS) $(proxytrack_DEPENDENCIES) $(EXTRA_proxytrack_DEPENDENCIES)
|
||||
@rm -f proxytrack$(EXEEXT)
|
||||
$(proxytrack_LINK) $(proxytrack_OBJECTS) $(proxytrack_LDADD) $(LIBS)
|
||||
@@ -538,161 +609,411 @@ uninstall-whttrackrunSCRIPTS:
|
||||
|
||||
mostlyclean-compile:
|
||||
-rm -f *.$(OBJEXT)
|
||||
-rm -f minizip/libhttrack_la-ioapi.$(OBJEXT)
|
||||
-rm -f minizip/libhttrack_la-ioapi.lo
|
||||
-rm -f minizip/libhttrack_la-mztools.$(OBJEXT)
|
||||
-rm -f minizip/libhttrack_la-mztools.lo
|
||||
-rm -f minizip/libhttrack_la-unzip.$(OBJEXT)
|
||||
-rm -f minizip/libhttrack_la-unzip.lo
|
||||
-rm -f minizip/libhttrack_la-zip.$(OBJEXT)
|
||||
-rm -f minizip/libhttrack_la-zip.lo
|
||||
-rm -f minizip/proxytrack-ioapi.$(OBJEXT)
|
||||
-rm -f minizip/proxytrack-mztools.$(OBJEXT)
|
||||
-rm -f minizip/proxytrack-unzip.$(OBJEXT)
|
||||
-rm -f minizip/proxytrack-zip.$(OBJEXT)
|
||||
-rm -f proxy/proxytrack-main.$(OBJEXT)
|
||||
-rm -f proxy/proxytrack-proxytrack.$(OBJEXT)
|
||||
-rm -f proxy/proxytrack-store.$(OBJEXT)
|
||||
|
||||
distclean-compile:
|
||||
-rm -f *.tab.c
|
||||
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/htsalias.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/htsback.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/htsbauth.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/htscache.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/htscatchurl.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/htscharset.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/htscore.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/htscoremain.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/htsencoding.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/htsfilters.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/htsftp.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/htshash.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/htshelp.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/htsindex.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/htsinthash.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/htsjava.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/htslib.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/htsmd5.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/htsmodules.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/htsname.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/htsparse.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/htsrobots.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/htsserver.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/htsthread.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/htstools.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/htsweb.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/htswizard.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/htswrap.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/htszlib.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/htsserver-htsserver.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/htsserver-htsweb.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/httrack.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ioapi.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/md5.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mztools.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/proxytrack-htsinthash.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhttrack_la-coucal.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhttrack_la-htsalias.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhttrack_la-htsback.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhttrack_la-htsbauth.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhttrack_la-htscache.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhttrack_la-htscatchurl.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhttrack_la-htscharset.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhttrack_la-htsconcat.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhttrack_la-htscore.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhttrack_la-htscoremain.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhttrack_la-htsencoding.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhttrack_la-htsfilters.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhttrack_la-htsftp.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhttrack_la-htshash.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhttrack_la-htshelp.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhttrack_la-htsindex.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhttrack_la-htslib.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhttrack_la-htsmd5.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhttrack_la-htsmodules.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhttrack_la-htsname.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhttrack_la-htsparse.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhttrack_la-htsrobots.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhttrack_la-htsthread.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhttrack_la-htstools.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhttrack_la-htswizard.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhttrack_la-htswrap.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhttrack_la-htszlib.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhttrack_la-md5.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhttrack_la-punycode.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/proxytrack-coucal.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/proxytrack-htsmd5.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/proxytrack-ioapi.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/proxytrack-main.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/proxytrack-md5.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/proxytrack-mztools.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/proxytrack-proxytrack.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/proxytrack-store.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/proxytrack-unzip.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/proxytrack-zip.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/punycode.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unzip.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zip.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@minizip/$(DEPDIR)/libhttrack_la-ioapi.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@minizip/$(DEPDIR)/libhttrack_la-mztools.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@minizip/$(DEPDIR)/libhttrack_la-unzip.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@minizip/$(DEPDIR)/libhttrack_la-zip.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@minizip/$(DEPDIR)/proxytrack-ioapi.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@minizip/$(DEPDIR)/proxytrack-mztools.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@minizip/$(DEPDIR)/proxytrack-unzip.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@minizip/$(DEPDIR)/proxytrack-zip.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@proxy/$(DEPDIR)/proxytrack-main.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@proxy/$(DEPDIR)/proxytrack-proxytrack.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@proxy/$(DEPDIR)/proxytrack-store.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
|
||||
@am__fastdepCC_TRUE@ depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
|
||||
@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
|
||||
@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.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 $<
|
||||
@am__fastdepCC_FALSE@ $(COMPILE) -c -o $@ $<
|
||||
|
||||
.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
|
||||
@am__fastdepCC_TRUE@ depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\
|
||||
@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\
|
||||
@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.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) '$<'`
|
||||
@am__fastdepCC_FALSE@ $(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
|
||||
|
||||
.c.lo:
|
||||
@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
|
||||
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
|
||||
@am__fastdepCC_TRUE@ depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\
|
||||
@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
|
||||
@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
|
||||
|
||||
ioapi.lo: minizip/ioapi.c
|
||||
@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ioapi.lo -MD -MP -MF $(DEPDIR)/ioapi.Tpo -c -o ioapi.lo `test -f 'minizip/ioapi.c' || echo '$(srcdir)/'`minizip/ioapi.c
|
||||
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/ioapi.Tpo $(DEPDIR)/ioapi.Plo
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='minizip/ioapi.c' object='ioapi.lo' libtool=yes @AMDEPBACKSLASH@
|
||||
libhttrack_la-htscore.lo: htscore.c
|
||||
@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhttrack_la_CFLAGS) $(CFLAGS) -MT libhttrack_la-htscore.lo -MD -MP -MF $(DEPDIR)/libhttrack_la-htscore.Tpo -c -o libhttrack_la-htscore.lo `test -f 'htscore.c' || echo '$(srcdir)/'`htscore.c
|
||||
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libhttrack_la-htscore.Tpo $(DEPDIR)/libhttrack_la-htscore.Plo
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='htscore.c' object='libhttrack_la-htscore.lo' libtool=yes @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ioapi.lo `test -f 'minizip/ioapi.c' || echo '$(srcdir)/'`minizip/ioapi.c
|
||||
@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhttrack_la_CFLAGS) $(CFLAGS) -c -o libhttrack_la-htscore.lo `test -f 'htscore.c' || echo '$(srcdir)/'`htscore.c
|
||||
|
||||
mztools.lo: minizip/mztools.c
|
||||
@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mztools.lo -MD -MP -MF $(DEPDIR)/mztools.Tpo -c -o mztools.lo `test -f 'minizip/mztools.c' || echo '$(srcdir)/'`minizip/mztools.c
|
||||
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/mztools.Tpo $(DEPDIR)/mztools.Plo
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='minizip/mztools.c' object='mztools.lo' libtool=yes @AMDEPBACKSLASH@
|
||||
libhttrack_la-htsparse.lo: htsparse.c
|
||||
@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhttrack_la_CFLAGS) $(CFLAGS) -MT libhttrack_la-htsparse.lo -MD -MP -MF $(DEPDIR)/libhttrack_la-htsparse.Tpo -c -o libhttrack_la-htsparse.lo `test -f 'htsparse.c' || echo '$(srcdir)/'`htsparse.c
|
||||
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libhttrack_la-htsparse.Tpo $(DEPDIR)/libhttrack_la-htsparse.Plo
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='htsparse.c' object='libhttrack_la-htsparse.lo' libtool=yes @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mztools.lo `test -f 'minizip/mztools.c' || echo '$(srcdir)/'`minizip/mztools.c
|
||||
@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhttrack_la_CFLAGS) $(CFLAGS) -c -o libhttrack_la-htsparse.lo `test -f 'htsparse.c' || echo '$(srcdir)/'`htsparse.c
|
||||
|
||||
unzip.lo: minizip/unzip.c
|
||||
@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unzip.lo -MD -MP -MF $(DEPDIR)/unzip.Tpo -c -o unzip.lo `test -f 'minizip/unzip.c' || echo '$(srcdir)/'`minizip/unzip.c
|
||||
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/unzip.Tpo $(DEPDIR)/unzip.Plo
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='minizip/unzip.c' object='unzip.lo' libtool=yes @AMDEPBACKSLASH@
|
||||
libhttrack_la-htsback.lo: htsback.c
|
||||
@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhttrack_la_CFLAGS) $(CFLAGS) -MT libhttrack_la-htsback.lo -MD -MP -MF $(DEPDIR)/libhttrack_la-htsback.Tpo -c -o libhttrack_la-htsback.lo `test -f 'htsback.c' || echo '$(srcdir)/'`htsback.c
|
||||
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libhttrack_la-htsback.Tpo $(DEPDIR)/libhttrack_la-htsback.Plo
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='htsback.c' object='libhttrack_la-htsback.lo' libtool=yes @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unzip.lo `test -f 'minizip/unzip.c' || echo '$(srcdir)/'`minizip/unzip.c
|
||||
@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhttrack_la_CFLAGS) $(CFLAGS) -c -o libhttrack_la-htsback.lo `test -f 'htsback.c' || echo '$(srcdir)/'`htsback.c
|
||||
|
||||
zip.lo: minizip/zip.c
|
||||
@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT zip.lo -MD -MP -MF $(DEPDIR)/zip.Tpo -c -o zip.lo `test -f 'minizip/zip.c' || echo '$(srcdir)/'`minizip/zip.c
|
||||
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/zip.Tpo $(DEPDIR)/zip.Plo
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='minizip/zip.c' object='zip.lo' libtool=yes @AMDEPBACKSLASH@
|
||||
libhttrack_la-htscache.lo: htscache.c
|
||||
@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhttrack_la_CFLAGS) $(CFLAGS) -MT libhttrack_la-htscache.lo -MD -MP -MF $(DEPDIR)/libhttrack_la-htscache.Tpo -c -o libhttrack_la-htscache.lo `test -f 'htscache.c' || echo '$(srcdir)/'`htscache.c
|
||||
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libhttrack_la-htscache.Tpo $(DEPDIR)/libhttrack_la-htscache.Plo
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='htscache.c' object='libhttrack_la-htscache.lo' libtool=yes @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o zip.lo `test -f 'minizip/zip.c' || echo '$(srcdir)/'`minizip/zip.c
|
||||
@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhttrack_la_CFLAGS) $(CFLAGS) -c -o libhttrack_la-htscache.lo `test -f 'htscache.c' || echo '$(srcdir)/'`htscache.c
|
||||
|
||||
proxytrack-main.o: proxy/main.c
|
||||
@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(proxytrack_CFLAGS) $(CFLAGS) -MT proxytrack-main.o -MD -MP -MF $(DEPDIR)/proxytrack-main.Tpo -c -o proxytrack-main.o `test -f 'proxy/main.c' || echo '$(srcdir)/'`proxy/main.c
|
||||
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/proxytrack-main.Tpo $(DEPDIR)/proxytrack-main.Po
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='proxy/main.c' object='proxytrack-main.o' libtool=no @AMDEPBACKSLASH@
|
||||
libhttrack_la-htscatchurl.lo: htscatchurl.c
|
||||
@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhttrack_la_CFLAGS) $(CFLAGS) -MT libhttrack_la-htscatchurl.lo -MD -MP -MF $(DEPDIR)/libhttrack_la-htscatchurl.Tpo -c -o libhttrack_la-htscatchurl.lo `test -f 'htscatchurl.c' || echo '$(srcdir)/'`htscatchurl.c
|
||||
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libhttrack_la-htscatchurl.Tpo $(DEPDIR)/libhttrack_la-htscatchurl.Plo
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='htscatchurl.c' object='libhttrack_la-htscatchurl.lo' libtool=yes @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(proxytrack_CFLAGS) $(CFLAGS) -c -o proxytrack-main.o `test -f 'proxy/main.c' || echo '$(srcdir)/'`proxy/main.c
|
||||
@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhttrack_la_CFLAGS) $(CFLAGS) -c -o libhttrack_la-htscatchurl.lo `test -f 'htscatchurl.c' || echo '$(srcdir)/'`htscatchurl.c
|
||||
|
||||
proxytrack-main.obj: proxy/main.c
|
||||
@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(proxytrack_CFLAGS) $(CFLAGS) -MT proxytrack-main.obj -MD -MP -MF $(DEPDIR)/proxytrack-main.Tpo -c -o proxytrack-main.obj `if test -f 'proxy/main.c'; then $(CYGPATH_W) 'proxy/main.c'; else $(CYGPATH_W) '$(srcdir)/proxy/main.c'; fi`
|
||||
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/proxytrack-main.Tpo $(DEPDIR)/proxytrack-main.Po
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='proxy/main.c' object='proxytrack-main.obj' libtool=no @AMDEPBACKSLASH@
|
||||
libhttrack_la-htsfilters.lo: htsfilters.c
|
||||
@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhttrack_la_CFLAGS) $(CFLAGS) -MT libhttrack_la-htsfilters.lo -MD -MP -MF $(DEPDIR)/libhttrack_la-htsfilters.Tpo -c -o libhttrack_la-htsfilters.lo `test -f 'htsfilters.c' || echo '$(srcdir)/'`htsfilters.c
|
||||
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libhttrack_la-htsfilters.Tpo $(DEPDIR)/libhttrack_la-htsfilters.Plo
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='htsfilters.c' object='libhttrack_la-htsfilters.lo' libtool=yes @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(proxytrack_CFLAGS) $(CFLAGS) -c -o proxytrack-main.obj `if test -f 'proxy/main.c'; then $(CYGPATH_W) 'proxy/main.c'; else $(CYGPATH_W) '$(srcdir)/proxy/main.c'; fi`
|
||||
@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhttrack_la_CFLAGS) $(CFLAGS) -c -o libhttrack_la-htsfilters.lo `test -f 'htsfilters.c' || echo '$(srcdir)/'`htsfilters.c
|
||||
|
||||
proxytrack-proxytrack.o: proxy/proxytrack.c
|
||||
@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(proxytrack_CFLAGS) $(CFLAGS) -MT proxytrack-proxytrack.o -MD -MP -MF $(DEPDIR)/proxytrack-proxytrack.Tpo -c -o proxytrack-proxytrack.o `test -f 'proxy/proxytrack.c' || echo '$(srcdir)/'`proxy/proxytrack.c
|
||||
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/proxytrack-proxytrack.Tpo $(DEPDIR)/proxytrack-proxytrack.Po
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='proxy/proxytrack.c' object='proxytrack-proxytrack.o' libtool=no @AMDEPBACKSLASH@
|
||||
libhttrack_la-htsftp.lo: htsftp.c
|
||||
@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhttrack_la_CFLAGS) $(CFLAGS) -MT libhttrack_la-htsftp.lo -MD -MP -MF $(DEPDIR)/libhttrack_la-htsftp.Tpo -c -o libhttrack_la-htsftp.lo `test -f 'htsftp.c' || echo '$(srcdir)/'`htsftp.c
|
||||
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libhttrack_la-htsftp.Tpo $(DEPDIR)/libhttrack_la-htsftp.Plo
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='htsftp.c' object='libhttrack_la-htsftp.lo' libtool=yes @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(proxytrack_CFLAGS) $(CFLAGS) -c -o proxytrack-proxytrack.o `test -f 'proxy/proxytrack.c' || echo '$(srcdir)/'`proxy/proxytrack.c
|
||||
@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhttrack_la_CFLAGS) $(CFLAGS) -c -o libhttrack_la-htsftp.lo `test -f 'htsftp.c' || echo '$(srcdir)/'`htsftp.c
|
||||
|
||||
proxytrack-proxytrack.obj: proxy/proxytrack.c
|
||||
@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(proxytrack_CFLAGS) $(CFLAGS) -MT proxytrack-proxytrack.obj -MD -MP -MF $(DEPDIR)/proxytrack-proxytrack.Tpo -c -o proxytrack-proxytrack.obj `if test -f 'proxy/proxytrack.c'; then $(CYGPATH_W) 'proxy/proxytrack.c'; else $(CYGPATH_W) '$(srcdir)/proxy/proxytrack.c'; fi`
|
||||
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/proxytrack-proxytrack.Tpo $(DEPDIR)/proxytrack-proxytrack.Po
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='proxy/proxytrack.c' object='proxytrack-proxytrack.obj' libtool=no @AMDEPBACKSLASH@
|
||||
libhttrack_la-htshash.lo: htshash.c
|
||||
@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhttrack_la_CFLAGS) $(CFLAGS) -MT libhttrack_la-htshash.lo -MD -MP -MF $(DEPDIR)/libhttrack_la-htshash.Tpo -c -o libhttrack_la-htshash.lo `test -f 'htshash.c' || echo '$(srcdir)/'`htshash.c
|
||||
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libhttrack_la-htshash.Tpo $(DEPDIR)/libhttrack_la-htshash.Plo
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='htshash.c' object='libhttrack_la-htshash.lo' libtool=yes @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(proxytrack_CFLAGS) $(CFLAGS) -c -o proxytrack-proxytrack.obj `if test -f 'proxy/proxytrack.c'; then $(CYGPATH_W) 'proxy/proxytrack.c'; else $(CYGPATH_W) '$(srcdir)/proxy/proxytrack.c'; fi`
|
||||
@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhttrack_la_CFLAGS) $(CFLAGS) -c -o libhttrack_la-htshash.lo `test -f 'htshash.c' || echo '$(srcdir)/'`htshash.c
|
||||
|
||||
proxytrack-store.o: proxy/store.c
|
||||
@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(proxytrack_CFLAGS) $(CFLAGS) -MT proxytrack-store.o -MD -MP -MF $(DEPDIR)/proxytrack-store.Tpo -c -o proxytrack-store.o `test -f 'proxy/store.c' || echo '$(srcdir)/'`proxy/store.c
|
||||
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/proxytrack-store.Tpo $(DEPDIR)/proxytrack-store.Po
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='proxy/store.c' object='proxytrack-store.o' libtool=no @AMDEPBACKSLASH@
|
||||
libhttrack_la-coucal.lo: coucal.c
|
||||
@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhttrack_la_CFLAGS) $(CFLAGS) -MT libhttrack_la-coucal.lo -MD -MP -MF $(DEPDIR)/libhttrack_la-coucal.Tpo -c -o libhttrack_la-coucal.lo `test -f 'coucal.c' || echo '$(srcdir)/'`coucal.c
|
||||
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libhttrack_la-coucal.Tpo $(DEPDIR)/libhttrack_la-coucal.Plo
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='coucal.c' object='libhttrack_la-coucal.lo' libtool=yes @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(proxytrack_CFLAGS) $(CFLAGS) -c -o proxytrack-store.o `test -f 'proxy/store.c' || echo '$(srcdir)/'`proxy/store.c
|
||||
@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhttrack_la_CFLAGS) $(CFLAGS) -c -o libhttrack_la-coucal.lo `test -f 'coucal.c' || echo '$(srcdir)/'`coucal.c
|
||||
|
||||
proxytrack-store.obj: proxy/store.c
|
||||
@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(proxytrack_CFLAGS) $(CFLAGS) -MT proxytrack-store.obj -MD -MP -MF $(DEPDIR)/proxytrack-store.Tpo -c -o proxytrack-store.obj `if test -f 'proxy/store.c'; then $(CYGPATH_W) 'proxy/store.c'; else $(CYGPATH_W) '$(srcdir)/proxy/store.c'; fi`
|
||||
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/proxytrack-store.Tpo $(DEPDIR)/proxytrack-store.Po
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='proxy/store.c' object='proxytrack-store.obj' libtool=no @AMDEPBACKSLASH@
|
||||
libhttrack_la-htshelp.lo: htshelp.c
|
||||
@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhttrack_la_CFLAGS) $(CFLAGS) -MT libhttrack_la-htshelp.lo -MD -MP -MF $(DEPDIR)/libhttrack_la-htshelp.Tpo -c -o libhttrack_la-htshelp.lo `test -f 'htshelp.c' || echo '$(srcdir)/'`htshelp.c
|
||||
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libhttrack_la-htshelp.Tpo $(DEPDIR)/libhttrack_la-htshelp.Plo
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='htshelp.c' object='libhttrack_la-htshelp.lo' libtool=yes @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(proxytrack_CFLAGS) $(CFLAGS) -c -o proxytrack-store.obj `if test -f 'proxy/store.c'; then $(CYGPATH_W) 'proxy/store.c'; else $(CYGPATH_W) '$(srcdir)/proxy/store.c'; fi`
|
||||
@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhttrack_la_CFLAGS) $(CFLAGS) -c -o libhttrack_la-htshelp.lo `test -f 'htshelp.c' || echo '$(srcdir)/'`htshelp.c
|
||||
|
||||
proxytrack-htsinthash.o: htsinthash.c
|
||||
@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(proxytrack_CFLAGS) $(CFLAGS) -MT proxytrack-htsinthash.o -MD -MP -MF $(DEPDIR)/proxytrack-htsinthash.Tpo -c -o proxytrack-htsinthash.o `test -f 'htsinthash.c' || echo '$(srcdir)/'`htsinthash.c
|
||||
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/proxytrack-htsinthash.Tpo $(DEPDIR)/proxytrack-htsinthash.Po
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='htsinthash.c' object='proxytrack-htsinthash.o' libtool=no @AMDEPBACKSLASH@
|
||||
libhttrack_la-htslib.lo: htslib.c
|
||||
@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhttrack_la_CFLAGS) $(CFLAGS) -MT libhttrack_la-htslib.lo -MD -MP -MF $(DEPDIR)/libhttrack_la-htslib.Tpo -c -o libhttrack_la-htslib.lo `test -f 'htslib.c' || echo '$(srcdir)/'`htslib.c
|
||||
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libhttrack_la-htslib.Tpo $(DEPDIR)/libhttrack_la-htslib.Plo
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='htslib.c' object='libhttrack_la-htslib.lo' libtool=yes @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(proxytrack_CFLAGS) $(CFLAGS) -c -o proxytrack-htsinthash.o `test -f 'htsinthash.c' || echo '$(srcdir)/'`htsinthash.c
|
||||
@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhttrack_la_CFLAGS) $(CFLAGS) -c -o libhttrack_la-htslib.lo `test -f 'htslib.c' || echo '$(srcdir)/'`htslib.c
|
||||
|
||||
proxytrack-htsinthash.obj: htsinthash.c
|
||||
@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(proxytrack_CFLAGS) $(CFLAGS) -MT proxytrack-htsinthash.obj -MD -MP -MF $(DEPDIR)/proxytrack-htsinthash.Tpo -c -o proxytrack-htsinthash.obj `if test -f 'htsinthash.c'; then $(CYGPATH_W) 'htsinthash.c'; else $(CYGPATH_W) '$(srcdir)/htsinthash.c'; fi`
|
||||
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/proxytrack-htsinthash.Tpo $(DEPDIR)/proxytrack-htsinthash.Po
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='htsinthash.c' object='proxytrack-htsinthash.obj' libtool=no @AMDEPBACKSLASH@
|
||||
libhttrack_la-htscoremain.lo: htscoremain.c
|
||||
@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhttrack_la_CFLAGS) $(CFLAGS) -MT libhttrack_la-htscoremain.lo -MD -MP -MF $(DEPDIR)/libhttrack_la-htscoremain.Tpo -c -o libhttrack_la-htscoremain.lo `test -f 'htscoremain.c' || echo '$(srcdir)/'`htscoremain.c
|
||||
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libhttrack_la-htscoremain.Tpo $(DEPDIR)/libhttrack_la-htscoremain.Plo
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='htscoremain.c' object='libhttrack_la-htscoremain.lo' libtool=yes @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(proxytrack_CFLAGS) $(CFLAGS) -c -o proxytrack-htsinthash.obj `if test -f 'htsinthash.c'; then $(CYGPATH_W) 'htsinthash.c'; else $(CYGPATH_W) '$(srcdir)/htsinthash.c'; fi`
|
||||
@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhttrack_la_CFLAGS) $(CFLAGS) -c -o libhttrack_la-htscoremain.lo `test -f 'htscoremain.c' || echo '$(srcdir)/'`htscoremain.c
|
||||
|
||||
libhttrack_la-htsname.lo: htsname.c
|
||||
@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhttrack_la_CFLAGS) $(CFLAGS) -MT libhttrack_la-htsname.lo -MD -MP -MF $(DEPDIR)/libhttrack_la-htsname.Tpo -c -o libhttrack_la-htsname.lo `test -f 'htsname.c' || echo '$(srcdir)/'`htsname.c
|
||||
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libhttrack_la-htsname.Tpo $(DEPDIR)/libhttrack_la-htsname.Plo
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='htsname.c' object='libhttrack_la-htsname.lo' libtool=yes @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhttrack_la_CFLAGS) $(CFLAGS) -c -o libhttrack_la-htsname.lo `test -f 'htsname.c' || echo '$(srcdir)/'`htsname.c
|
||||
|
||||
libhttrack_la-htsrobots.lo: htsrobots.c
|
||||
@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhttrack_la_CFLAGS) $(CFLAGS) -MT libhttrack_la-htsrobots.lo -MD -MP -MF $(DEPDIR)/libhttrack_la-htsrobots.Tpo -c -o libhttrack_la-htsrobots.lo `test -f 'htsrobots.c' || echo '$(srcdir)/'`htsrobots.c
|
||||
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libhttrack_la-htsrobots.Tpo $(DEPDIR)/libhttrack_la-htsrobots.Plo
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='htsrobots.c' object='libhttrack_la-htsrobots.lo' libtool=yes @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhttrack_la_CFLAGS) $(CFLAGS) -c -o libhttrack_la-htsrobots.lo `test -f 'htsrobots.c' || echo '$(srcdir)/'`htsrobots.c
|
||||
|
||||
libhttrack_la-htstools.lo: htstools.c
|
||||
@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhttrack_la_CFLAGS) $(CFLAGS) -MT libhttrack_la-htstools.lo -MD -MP -MF $(DEPDIR)/libhttrack_la-htstools.Tpo -c -o libhttrack_la-htstools.lo `test -f 'htstools.c' || echo '$(srcdir)/'`htstools.c
|
||||
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libhttrack_la-htstools.Tpo $(DEPDIR)/libhttrack_la-htstools.Plo
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='htstools.c' object='libhttrack_la-htstools.lo' libtool=yes @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhttrack_la_CFLAGS) $(CFLAGS) -c -o libhttrack_la-htstools.lo `test -f 'htstools.c' || echo '$(srcdir)/'`htstools.c
|
||||
|
||||
libhttrack_la-htswizard.lo: htswizard.c
|
||||
@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhttrack_la_CFLAGS) $(CFLAGS) -MT libhttrack_la-htswizard.lo -MD -MP -MF $(DEPDIR)/libhttrack_la-htswizard.Tpo -c -o libhttrack_la-htswizard.lo `test -f 'htswizard.c' || echo '$(srcdir)/'`htswizard.c
|
||||
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libhttrack_la-htswizard.Tpo $(DEPDIR)/libhttrack_la-htswizard.Plo
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='htswizard.c' object='libhttrack_la-htswizard.lo' libtool=yes @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhttrack_la_CFLAGS) $(CFLAGS) -c -o libhttrack_la-htswizard.lo `test -f 'htswizard.c' || echo '$(srcdir)/'`htswizard.c
|
||||
|
||||
libhttrack_la-htsalias.lo: htsalias.c
|
||||
@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhttrack_la_CFLAGS) $(CFLAGS) -MT libhttrack_la-htsalias.lo -MD -MP -MF $(DEPDIR)/libhttrack_la-htsalias.Tpo -c -o libhttrack_la-htsalias.lo `test -f 'htsalias.c' || echo '$(srcdir)/'`htsalias.c
|
||||
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libhttrack_la-htsalias.Tpo $(DEPDIR)/libhttrack_la-htsalias.Plo
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='htsalias.c' object='libhttrack_la-htsalias.lo' libtool=yes @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhttrack_la_CFLAGS) $(CFLAGS) -c -o libhttrack_la-htsalias.lo `test -f 'htsalias.c' || echo '$(srcdir)/'`htsalias.c
|
||||
|
||||
libhttrack_la-htsthread.lo: htsthread.c
|
||||
@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhttrack_la_CFLAGS) $(CFLAGS) -MT libhttrack_la-htsthread.lo -MD -MP -MF $(DEPDIR)/libhttrack_la-htsthread.Tpo -c -o libhttrack_la-htsthread.lo `test -f 'htsthread.c' || echo '$(srcdir)/'`htsthread.c
|
||||
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libhttrack_la-htsthread.Tpo $(DEPDIR)/libhttrack_la-htsthread.Plo
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='htsthread.c' object='libhttrack_la-htsthread.lo' libtool=yes @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhttrack_la_CFLAGS) $(CFLAGS) -c -o libhttrack_la-htsthread.lo `test -f 'htsthread.c' || echo '$(srcdir)/'`htsthread.c
|
||||
|
||||
libhttrack_la-htsindex.lo: htsindex.c
|
||||
@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhttrack_la_CFLAGS) $(CFLAGS) -MT libhttrack_la-htsindex.lo -MD -MP -MF $(DEPDIR)/libhttrack_la-htsindex.Tpo -c -o libhttrack_la-htsindex.lo `test -f 'htsindex.c' || echo '$(srcdir)/'`htsindex.c
|
||||
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libhttrack_la-htsindex.Tpo $(DEPDIR)/libhttrack_la-htsindex.Plo
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='htsindex.c' object='libhttrack_la-htsindex.lo' libtool=yes @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhttrack_la_CFLAGS) $(CFLAGS) -c -o libhttrack_la-htsindex.lo `test -f 'htsindex.c' || echo '$(srcdir)/'`htsindex.c
|
||||
|
||||
libhttrack_la-htsbauth.lo: htsbauth.c
|
||||
@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhttrack_la_CFLAGS) $(CFLAGS) -MT libhttrack_la-htsbauth.lo -MD -MP -MF $(DEPDIR)/libhttrack_la-htsbauth.Tpo -c -o libhttrack_la-htsbauth.lo `test -f 'htsbauth.c' || echo '$(srcdir)/'`htsbauth.c
|
||||
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libhttrack_la-htsbauth.Tpo $(DEPDIR)/libhttrack_la-htsbauth.Plo
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='htsbauth.c' object='libhttrack_la-htsbauth.lo' libtool=yes @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhttrack_la_CFLAGS) $(CFLAGS) -c -o libhttrack_la-htsbauth.lo `test -f 'htsbauth.c' || echo '$(srcdir)/'`htsbauth.c
|
||||
|
||||
libhttrack_la-htsmd5.lo: htsmd5.c
|
||||
@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhttrack_la_CFLAGS) $(CFLAGS) -MT libhttrack_la-htsmd5.lo -MD -MP -MF $(DEPDIR)/libhttrack_la-htsmd5.Tpo -c -o libhttrack_la-htsmd5.lo `test -f 'htsmd5.c' || echo '$(srcdir)/'`htsmd5.c
|
||||
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libhttrack_la-htsmd5.Tpo $(DEPDIR)/libhttrack_la-htsmd5.Plo
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='htsmd5.c' object='libhttrack_la-htsmd5.lo' libtool=yes @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhttrack_la_CFLAGS) $(CFLAGS) -c -o libhttrack_la-htsmd5.lo `test -f 'htsmd5.c' || echo '$(srcdir)/'`htsmd5.c
|
||||
|
||||
libhttrack_la-htszlib.lo: htszlib.c
|
||||
@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhttrack_la_CFLAGS) $(CFLAGS) -MT libhttrack_la-htszlib.lo -MD -MP -MF $(DEPDIR)/libhttrack_la-htszlib.Tpo -c -o libhttrack_la-htszlib.lo `test -f 'htszlib.c' || echo '$(srcdir)/'`htszlib.c
|
||||
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libhttrack_la-htszlib.Tpo $(DEPDIR)/libhttrack_la-htszlib.Plo
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='htszlib.c' object='libhttrack_la-htszlib.lo' libtool=yes @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhttrack_la_CFLAGS) $(CFLAGS) -c -o libhttrack_la-htszlib.lo `test -f 'htszlib.c' || echo '$(srcdir)/'`htszlib.c
|
||||
|
||||
libhttrack_la-htswrap.lo: htswrap.c
|
||||
@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhttrack_la_CFLAGS) $(CFLAGS) -MT libhttrack_la-htswrap.lo -MD -MP -MF $(DEPDIR)/libhttrack_la-htswrap.Tpo -c -o libhttrack_la-htswrap.lo `test -f 'htswrap.c' || echo '$(srcdir)/'`htswrap.c
|
||||
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libhttrack_la-htswrap.Tpo $(DEPDIR)/libhttrack_la-htswrap.Plo
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='htswrap.c' object='libhttrack_la-htswrap.lo' libtool=yes @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhttrack_la_CFLAGS) $(CFLAGS) -c -o libhttrack_la-htswrap.lo `test -f 'htswrap.c' || echo '$(srcdir)/'`htswrap.c
|
||||
|
||||
libhttrack_la-htsconcat.lo: htsconcat.c
|
||||
@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhttrack_la_CFLAGS) $(CFLAGS) -MT libhttrack_la-htsconcat.lo -MD -MP -MF $(DEPDIR)/libhttrack_la-htsconcat.Tpo -c -o libhttrack_la-htsconcat.lo `test -f 'htsconcat.c' || echo '$(srcdir)/'`htsconcat.c
|
||||
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libhttrack_la-htsconcat.Tpo $(DEPDIR)/libhttrack_la-htsconcat.Plo
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='htsconcat.c' object='libhttrack_la-htsconcat.lo' libtool=yes @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhttrack_la_CFLAGS) $(CFLAGS) -c -o libhttrack_la-htsconcat.lo `test -f 'htsconcat.c' || echo '$(srcdir)/'`htsconcat.c
|
||||
|
||||
libhttrack_la-htsmodules.lo: htsmodules.c
|
||||
@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhttrack_la_CFLAGS) $(CFLAGS) -MT libhttrack_la-htsmodules.lo -MD -MP -MF $(DEPDIR)/libhttrack_la-htsmodules.Tpo -c -o libhttrack_la-htsmodules.lo `test -f 'htsmodules.c' || echo '$(srcdir)/'`htsmodules.c
|
||||
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libhttrack_la-htsmodules.Tpo $(DEPDIR)/libhttrack_la-htsmodules.Plo
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='htsmodules.c' object='libhttrack_la-htsmodules.lo' libtool=yes @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhttrack_la_CFLAGS) $(CFLAGS) -c -o libhttrack_la-htsmodules.lo `test -f 'htsmodules.c' || echo '$(srcdir)/'`htsmodules.c
|
||||
|
||||
libhttrack_la-htscharset.lo: htscharset.c
|
||||
@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhttrack_la_CFLAGS) $(CFLAGS) -MT libhttrack_la-htscharset.lo -MD -MP -MF $(DEPDIR)/libhttrack_la-htscharset.Tpo -c -o libhttrack_la-htscharset.lo `test -f 'htscharset.c' || echo '$(srcdir)/'`htscharset.c
|
||||
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libhttrack_la-htscharset.Tpo $(DEPDIR)/libhttrack_la-htscharset.Plo
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='htscharset.c' object='libhttrack_la-htscharset.lo' libtool=yes @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhttrack_la_CFLAGS) $(CFLAGS) -c -o libhttrack_la-htscharset.lo `test -f 'htscharset.c' || echo '$(srcdir)/'`htscharset.c
|
||||
|
||||
libhttrack_la-punycode.lo: punycode.c
|
||||
@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhttrack_la_CFLAGS) $(CFLAGS) -MT libhttrack_la-punycode.lo -MD -MP -MF $(DEPDIR)/libhttrack_la-punycode.Tpo -c -o libhttrack_la-punycode.lo `test -f 'punycode.c' || echo '$(srcdir)/'`punycode.c
|
||||
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libhttrack_la-punycode.Tpo $(DEPDIR)/libhttrack_la-punycode.Plo
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='punycode.c' object='libhttrack_la-punycode.lo' libtool=yes @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhttrack_la_CFLAGS) $(CFLAGS) -c -o libhttrack_la-punycode.lo `test -f 'punycode.c' || echo '$(srcdir)/'`punycode.c
|
||||
|
||||
libhttrack_la-htsencoding.lo: htsencoding.c
|
||||
@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhttrack_la_CFLAGS) $(CFLAGS) -MT libhttrack_la-htsencoding.lo -MD -MP -MF $(DEPDIR)/libhttrack_la-htsencoding.Tpo -c -o libhttrack_la-htsencoding.lo `test -f 'htsencoding.c' || echo '$(srcdir)/'`htsencoding.c
|
||||
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libhttrack_la-htsencoding.Tpo $(DEPDIR)/libhttrack_la-htsencoding.Plo
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='htsencoding.c' object='libhttrack_la-htsencoding.lo' libtool=yes @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhttrack_la_CFLAGS) $(CFLAGS) -c -o libhttrack_la-htsencoding.lo `test -f 'htsencoding.c' || echo '$(srcdir)/'`htsencoding.c
|
||||
|
||||
libhttrack_la-md5.lo: md5.c
|
||||
@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhttrack_la_CFLAGS) $(CFLAGS) -MT libhttrack_la-md5.lo -MD -MP -MF $(DEPDIR)/libhttrack_la-md5.Tpo -c -o libhttrack_la-md5.lo `test -f 'md5.c' || echo '$(srcdir)/'`md5.c
|
||||
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libhttrack_la-md5.Tpo $(DEPDIR)/libhttrack_la-md5.Plo
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='md5.c' object='libhttrack_la-md5.lo' libtool=yes @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhttrack_la_CFLAGS) $(CFLAGS) -c -o libhttrack_la-md5.lo `test -f 'md5.c' || echo '$(srcdir)/'`md5.c
|
||||
|
||||
minizip/libhttrack_la-ioapi.lo: minizip/ioapi.c
|
||||
@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhttrack_la_CFLAGS) $(CFLAGS) -MT minizip/libhttrack_la-ioapi.lo -MD -MP -MF minizip/$(DEPDIR)/libhttrack_la-ioapi.Tpo -c -o minizip/libhttrack_la-ioapi.lo `test -f 'minizip/ioapi.c' || echo '$(srcdir)/'`minizip/ioapi.c
|
||||
@am__fastdepCC_TRUE@ $(am__mv) minizip/$(DEPDIR)/libhttrack_la-ioapi.Tpo minizip/$(DEPDIR)/libhttrack_la-ioapi.Plo
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='minizip/ioapi.c' object='minizip/libhttrack_la-ioapi.lo' libtool=yes @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhttrack_la_CFLAGS) $(CFLAGS) -c -o minizip/libhttrack_la-ioapi.lo `test -f 'minizip/ioapi.c' || echo '$(srcdir)/'`minizip/ioapi.c
|
||||
|
||||
minizip/libhttrack_la-mztools.lo: minizip/mztools.c
|
||||
@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhttrack_la_CFLAGS) $(CFLAGS) -MT minizip/libhttrack_la-mztools.lo -MD -MP -MF minizip/$(DEPDIR)/libhttrack_la-mztools.Tpo -c -o minizip/libhttrack_la-mztools.lo `test -f 'minizip/mztools.c' || echo '$(srcdir)/'`minizip/mztools.c
|
||||
@am__fastdepCC_TRUE@ $(am__mv) minizip/$(DEPDIR)/libhttrack_la-mztools.Tpo minizip/$(DEPDIR)/libhttrack_la-mztools.Plo
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='minizip/mztools.c' object='minizip/libhttrack_la-mztools.lo' libtool=yes @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhttrack_la_CFLAGS) $(CFLAGS) -c -o minizip/libhttrack_la-mztools.lo `test -f 'minizip/mztools.c' || echo '$(srcdir)/'`minizip/mztools.c
|
||||
|
||||
minizip/libhttrack_la-unzip.lo: minizip/unzip.c
|
||||
@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhttrack_la_CFLAGS) $(CFLAGS) -MT minizip/libhttrack_la-unzip.lo -MD -MP -MF minizip/$(DEPDIR)/libhttrack_la-unzip.Tpo -c -o minizip/libhttrack_la-unzip.lo `test -f 'minizip/unzip.c' || echo '$(srcdir)/'`minizip/unzip.c
|
||||
@am__fastdepCC_TRUE@ $(am__mv) minizip/$(DEPDIR)/libhttrack_la-unzip.Tpo minizip/$(DEPDIR)/libhttrack_la-unzip.Plo
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='minizip/unzip.c' object='minizip/libhttrack_la-unzip.lo' libtool=yes @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhttrack_la_CFLAGS) $(CFLAGS) -c -o minizip/libhttrack_la-unzip.lo `test -f 'minizip/unzip.c' || echo '$(srcdir)/'`minizip/unzip.c
|
||||
|
||||
minizip/libhttrack_la-zip.lo: minizip/zip.c
|
||||
@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhttrack_la_CFLAGS) $(CFLAGS) -MT minizip/libhttrack_la-zip.lo -MD -MP -MF minizip/$(DEPDIR)/libhttrack_la-zip.Tpo -c -o minizip/libhttrack_la-zip.lo `test -f 'minizip/zip.c' || echo '$(srcdir)/'`minizip/zip.c
|
||||
@am__fastdepCC_TRUE@ $(am__mv) minizip/$(DEPDIR)/libhttrack_la-zip.Tpo minizip/$(DEPDIR)/libhttrack_la-zip.Plo
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='minizip/zip.c' object='minizip/libhttrack_la-zip.lo' libtool=yes @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhttrack_la_CFLAGS) $(CFLAGS) -c -o minizip/libhttrack_la-zip.lo `test -f 'minizip/zip.c' || echo '$(srcdir)/'`minizip/zip.c
|
||||
|
||||
htsserver-htsserver.o: htsserver.c
|
||||
@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(htsserver_CFLAGS) $(CFLAGS) -MT htsserver-htsserver.o -MD -MP -MF $(DEPDIR)/htsserver-htsserver.Tpo -c -o htsserver-htsserver.o `test -f 'htsserver.c' || echo '$(srcdir)/'`htsserver.c
|
||||
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/htsserver-htsserver.Tpo $(DEPDIR)/htsserver-htsserver.Po
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='htsserver.c' object='htsserver-htsserver.o' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(htsserver_CFLAGS) $(CFLAGS) -c -o htsserver-htsserver.o `test -f 'htsserver.c' || echo '$(srcdir)/'`htsserver.c
|
||||
|
||||
htsserver-htsserver.obj: htsserver.c
|
||||
@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(htsserver_CFLAGS) $(CFLAGS) -MT htsserver-htsserver.obj -MD -MP -MF $(DEPDIR)/htsserver-htsserver.Tpo -c -o htsserver-htsserver.obj `if test -f 'htsserver.c'; then $(CYGPATH_W) 'htsserver.c'; else $(CYGPATH_W) '$(srcdir)/htsserver.c'; fi`
|
||||
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/htsserver-htsserver.Tpo $(DEPDIR)/htsserver-htsserver.Po
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='htsserver.c' object='htsserver-htsserver.obj' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(htsserver_CFLAGS) $(CFLAGS) -c -o htsserver-htsserver.obj `if test -f 'htsserver.c'; then $(CYGPATH_W) 'htsserver.c'; else $(CYGPATH_W) '$(srcdir)/htsserver.c'; fi`
|
||||
|
||||
htsserver-htsweb.o: htsweb.c
|
||||
@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(htsserver_CFLAGS) $(CFLAGS) -MT htsserver-htsweb.o -MD -MP -MF $(DEPDIR)/htsserver-htsweb.Tpo -c -o htsserver-htsweb.o `test -f 'htsweb.c' || echo '$(srcdir)/'`htsweb.c
|
||||
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/htsserver-htsweb.Tpo $(DEPDIR)/htsserver-htsweb.Po
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='htsweb.c' object='htsserver-htsweb.o' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(htsserver_CFLAGS) $(CFLAGS) -c -o htsserver-htsweb.o `test -f 'htsweb.c' || echo '$(srcdir)/'`htsweb.c
|
||||
|
||||
htsserver-htsweb.obj: htsweb.c
|
||||
@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(htsserver_CFLAGS) $(CFLAGS) -MT htsserver-htsweb.obj -MD -MP -MF $(DEPDIR)/htsserver-htsweb.Tpo -c -o htsserver-htsweb.obj `if test -f 'htsweb.c'; then $(CYGPATH_W) 'htsweb.c'; else $(CYGPATH_W) '$(srcdir)/htsweb.c'; fi`
|
||||
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/htsserver-htsweb.Tpo $(DEPDIR)/htsserver-htsweb.Po
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='htsweb.c' object='htsserver-htsweb.obj' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(htsserver_CFLAGS) $(CFLAGS) -c -o htsserver-htsweb.obj `if test -f 'htsweb.c'; then $(CYGPATH_W) 'htsweb.c'; else $(CYGPATH_W) '$(srcdir)/htsweb.c'; fi`
|
||||
|
||||
proxy/proxytrack-main.o: proxy/main.c
|
||||
@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(proxytrack_CFLAGS) $(CFLAGS) -MT proxy/proxytrack-main.o -MD -MP -MF proxy/$(DEPDIR)/proxytrack-main.Tpo -c -o proxy/proxytrack-main.o `test -f 'proxy/main.c' || echo '$(srcdir)/'`proxy/main.c
|
||||
@am__fastdepCC_TRUE@ $(am__mv) proxy/$(DEPDIR)/proxytrack-main.Tpo proxy/$(DEPDIR)/proxytrack-main.Po
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='proxy/main.c' object='proxy/proxytrack-main.o' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(proxytrack_CFLAGS) $(CFLAGS) -c -o proxy/proxytrack-main.o `test -f 'proxy/main.c' || echo '$(srcdir)/'`proxy/main.c
|
||||
|
||||
proxy/proxytrack-main.obj: proxy/main.c
|
||||
@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(proxytrack_CFLAGS) $(CFLAGS) -MT proxy/proxytrack-main.obj -MD -MP -MF proxy/$(DEPDIR)/proxytrack-main.Tpo -c -o proxy/proxytrack-main.obj `if test -f 'proxy/main.c'; then $(CYGPATH_W) 'proxy/main.c'; else $(CYGPATH_W) '$(srcdir)/proxy/main.c'; fi`
|
||||
@am__fastdepCC_TRUE@ $(am__mv) proxy/$(DEPDIR)/proxytrack-main.Tpo proxy/$(DEPDIR)/proxytrack-main.Po
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='proxy/main.c' object='proxy/proxytrack-main.obj' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(proxytrack_CFLAGS) $(CFLAGS) -c -o proxy/proxytrack-main.obj `if test -f 'proxy/main.c'; then $(CYGPATH_W) 'proxy/main.c'; else $(CYGPATH_W) '$(srcdir)/proxy/main.c'; fi`
|
||||
|
||||
proxy/proxytrack-proxytrack.o: proxy/proxytrack.c
|
||||
@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(proxytrack_CFLAGS) $(CFLAGS) -MT proxy/proxytrack-proxytrack.o -MD -MP -MF proxy/$(DEPDIR)/proxytrack-proxytrack.Tpo -c -o proxy/proxytrack-proxytrack.o `test -f 'proxy/proxytrack.c' || echo '$(srcdir)/'`proxy/proxytrack.c
|
||||
@am__fastdepCC_TRUE@ $(am__mv) proxy/$(DEPDIR)/proxytrack-proxytrack.Tpo proxy/$(DEPDIR)/proxytrack-proxytrack.Po
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='proxy/proxytrack.c' object='proxy/proxytrack-proxytrack.o' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(proxytrack_CFLAGS) $(CFLAGS) -c -o proxy/proxytrack-proxytrack.o `test -f 'proxy/proxytrack.c' || echo '$(srcdir)/'`proxy/proxytrack.c
|
||||
|
||||
proxy/proxytrack-proxytrack.obj: proxy/proxytrack.c
|
||||
@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(proxytrack_CFLAGS) $(CFLAGS) -MT proxy/proxytrack-proxytrack.obj -MD -MP -MF proxy/$(DEPDIR)/proxytrack-proxytrack.Tpo -c -o proxy/proxytrack-proxytrack.obj `if test -f 'proxy/proxytrack.c'; then $(CYGPATH_W) 'proxy/proxytrack.c'; else $(CYGPATH_W) '$(srcdir)/proxy/proxytrack.c'; fi`
|
||||
@am__fastdepCC_TRUE@ $(am__mv) proxy/$(DEPDIR)/proxytrack-proxytrack.Tpo proxy/$(DEPDIR)/proxytrack-proxytrack.Po
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='proxy/proxytrack.c' object='proxy/proxytrack-proxytrack.obj' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(proxytrack_CFLAGS) $(CFLAGS) -c -o proxy/proxytrack-proxytrack.obj `if test -f 'proxy/proxytrack.c'; then $(CYGPATH_W) 'proxy/proxytrack.c'; else $(CYGPATH_W) '$(srcdir)/proxy/proxytrack.c'; fi`
|
||||
|
||||
proxy/proxytrack-store.o: proxy/store.c
|
||||
@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(proxytrack_CFLAGS) $(CFLAGS) -MT proxy/proxytrack-store.o -MD -MP -MF proxy/$(DEPDIR)/proxytrack-store.Tpo -c -o proxy/proxytrack-store.o `test -f 'proxy/store.c' || echo '$(srcdir)/'`proxy/store.c
|
||||
@am__fastdepCC_TRUE@ $(am__mv) proxy/$(DEPDIR)/proxytrack-store.Tpo proxy/$(DEPDIR)/proxytrack-store.Po
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='proxy/store.c' object='proxy/proxytrack-store.o' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(proxytrack_CFLAGS) $(CFLAGS) -c -o proxy/proxytrack-store.o `test -f 'proxy/store.c' || echo '$(srcdir)/'`proxy/store.c
|
||||
|
||||
proxy/proxytrack-store.obj: proxy/store.c
|
||||
@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(proxytrack_CFLAGS) $(CFLAGS) -MT proxy/proxytrack-store.obj -MD -MP -MF proxy/$(DEPDIR)/proxytrack-store.Tpo -c -o proxy/proxytrack-store.obj `if test -f 'proxy/store.c'; then $(CYGPATH_W) 'proxy/store.c'; else $(CYGPATH_W) '$(srcdir)/proxy/store.c'; fi`
|
||||
@am__fastdepCC_TRUE@ $(am__mv) proxy/$(DEPDIR)/proxytrack-store.Tpo proxy/$(DEPDIR)/proxytrack-store.Po
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='proxy/store.c' object='proxy/proxytrack-store.obj' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(proxytrack_CFLAGS) $(CFLAGS) -c -o proxy/proxytrack-store.obj `if test -f 'proxy/store.c'; then $(CYGPATH_W) 'proxy/store.c'; else $(CYGPATH_W) '$(srcdir)/proxy/store.c'; fi`
|
||||
|
||||
proxytrack-coucal.o: coucal.c
|
||||
@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(proxytrack_CFLAGS) $(CFLAGS) -MT proxytrack-coucal.o -MD -MP -MF $(DEPDIR)/proxytrack-coucal.Tpo -c -o proxytrack-coucal.o `test -f 'coucal.c' || echo '$(srcdir)/'`coucal.c
|
||||
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/proxytrack-coucal.Tpo $(DEPDIR)/proxytrack-coucal.Po
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='coucal.c' object='proxytrack-coucal.o' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(proxytrack_CFLAGS) $(CFLAGS) -c -o proxytrack-coucal.o `test -f 'coucal.c' || echo '$(srcdir)/'`coucal.c
|
||||
|
||||
proxytrack-coucal.obj: coucal.c
|
||||
@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(proxytrack_CFLAGS) $(CFLAGS) -MT proxytrack-coucal.obj -MD -MP -MF $(DEPDIR)/proxytrack-coucal.Tpo -c -o proxytrack-coucal.obj `if test -f 'coucal.c'; then $(CYGPATH_W) 'coucal.c'; else $(CYGPATH_W) '$(srcdir)/coucal.c'; fi`
|
||||
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/proxytrack-coucal.Tpo $(DEPDIR)/proxytrack-coucal.Po
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='coucal.c' object='proxytrack-coucal.obj' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(proxytrack_CFLAGS) $(CFLAGS) -c -o proxytrack-coucal.obj `if test -f 'coucal.c'; then $(CYGPATH_W) 'coucal.c'; else $(CYGPATH_W) '$(srcdir)/coucal.c'; fi`
|
||||
|
||||
proxytrack-htsmd5.o: htsmd5.c
|
||||
@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(proxytrack_CFLAGS) $(CFLAGS) -MT proxytrack-htsmd5.o -MD -MP -MF $(DEPDIR)/proxytrack-htsmd5.Tpo -c -o proxytrack-htsmd5.o `test -f 'htsmd5.c' || echo '$(srcdir)/'`htsmd5.c
|
||||
@@ -722,67 +1043,68 @@ proxytrack-md5.obj: md5.c
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(proxytrack_CFLAGS) $(CFLAGS) -c -o proxytrack-md5.obj `if test -f 'md5.c'; then $(CYGPATH_W) 'md5.c'; else $(CYGPATH_W) '$(srcdir)/md5.c'; fi`
|
||||
|
||||
proxytrack-ioapi.o: minizip/ioapi.c
|
||||
@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(proxytrack_CFLAGS) $(CFLAGS) -MT proxytrack-ioapi.o -MD -MP -MF $(DEPDIR)/proxytrack-ioapi.Tpo -c -o proxytrack-ioapi.o `test -f 'minizip/ioapi.c' || echo '$(srcdir)/'`minizip/ioapi.c
|
||||
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/proxytrack-ioapi.Tpo $(DEPDIR)/proxytrack-ioapi.Po
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='minizip/ioapi.c' object='proxytrack-ioapi.o' libtool=no @AMDEPBACKSLASH@
|
||||
minizip/proxytrack-ioapi.o: minizip/ioapi.c
|
||||
@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(proxytrack_CFLAGS) $(CFLAGS) -MT minizip/proxytrack-ioapi.o -MD -MP -MF minizip/$(DEPDIR)/proxytrack-ioapi.Tpo -c -o minizip/proxytrack-ioapi.o `test -f 'minizip/ioapi.c' || echo '$(srcdir)/'`minizip/ioapi.c
|
||||
@am__fastdepCC_TRUE@ $(am__mv) minizip/$(DEPDIR)/proxytrack-ioapi.Tpo minizip/$(DEPDIR)/proxytrack-ioapi.Po
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='minizip/ioapi.c' object='minizip/proxytrack-ioapi.o' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(proxytrack_CFLAGS) $(CFLAGS) -c -o proxytrack-ioapi.o `test -f 'minizip/ioapi.c' || echo '$(srcdir)/'`minizip/ioapi.c
|
||||
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(proxytrack_CFLAGS) $(CFLAGS) -c -o minizip/proxytrack-ioapi.o `test -f 'minizip/ioapi.c' || echo '$(srcdir)/'`minizip/ioapi.c
|
||||
|
||||
proxytrack-ioapi.obj: minizip/ioapi.c
|
||||
@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(proxytrack_CFLAGS) $(CFLAGS) -MT proxytrack-ioapi.obj -MD -MP -MF $(DEPDIR)/proxytrack-ioapi.Tpo -c -o proxytrack-ioapi.obj `if test -f 'minizip/ioapi.c'; then $(CYGPATH_W) 'minizip/ioapi.c'; else $(CYGPATH_W) '$(srcdir)/minizip/ioapi.c'; fi`
|
||||
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/proxytrack-ioapi.Tpo $(DEPDIR)/proxytrack-ioapi.Po
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='minizip/ioapi.c' object='proxytrack-ioapi.obj' libtool=no @AMDEPBACKSLASH@
|
||||
minizip/proxytrack-ioapi.obj: minizip/ioapi.c
|
||||
@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(proxytrack_CFLAGS) $(CFLAGS) -MT minizip/proxytrack-ioapi.obj -MD -MP -MF minizip/$(DEPDIR)/proxytrack-ioapi.Tpo -c -o minizip/proxytrack-ioapi.obj `if test -f 'minizip/ioapi.c'; then $(CYGPATH_W) 'minizip/ioapi.c'; else $(CYGPATH_W) '$(srcdir)/minizip/ioapi.c'; fi`
|
||||
@am__fastdepCC_TRUE@ $(am__mv) minizip/$(DEPDIR)/proxytrack-ioapi.Tpo minizip/$(DEPDIR)/proxytrack-ioapi.Po
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='minizip/ioapi.c' object='minizip/proxytrack-ioapi.obj' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(proxytrack_CFLAGS) $(CFLAGS) -c -o proxytrack-ioapi.obj `if test -f 'minizip/ioapi.c'; then $(CYGPATH_W) 'minizip/ioapi.c'; else $(CYGPATH_W) '$(srcdir)/minizip/ioapi.c'; fi`
|
||||
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(proxytrack_CFLAGS) $(CFLAGS) -c -o minizip/proxytrack-ioapi.obj `if test -f 'minizip/ioapi.c'; then $(CYGPATH_W) 'minizip/ioapi.c'; else $(CYGPATH_W) '$(srcdir)/minizip/ioapi.c'; fi`
|
||||
|
||||
proxytrack-mztools.o: minizip/mztools.c
|
||||
@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(proxytrack_CFLAGS) $(CFLAGS) -MT proxytrack-mztools.o -MD -MP -MF $(DEPDIR)/proxytrack-mztools.Tpo -c -o proxytrack-mztools.o `test -f 'minizip/mztools.c' || echo '$(srcdir)/'`minizip/mztools.c
|
||||
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/proxytrack-mztools.Tpo $(DEPDIR)/proxytrack-mztools.Po
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='minizip/mztools.c' object='proxytrack-mztools.o' libtool=no @AMDEPBACKSLASH@
|
||||
minizip/proxytrack-mztools.o: minizip/mztools.c
|
||||
@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(proxytrack_CFLAGS) $(CFLAGS) -MT minizip/proxytrack-mztools.o -MD -MP -MF minizip/$(DEPDIR)/proxytrack-mztools.Tpo -c -o minizip/proxytrack-mztools.o `test -f 'minizip/mztools.c' || echo '$(srcdir)/'`minizip/mztools.c
|
||||
@am__fastdepCC_TRUE@ $(am__mv) minizip/$(DEPDIR)/proxytrack-mztools.Tpo minizip/$(DEPDIR)/proxytrack-mztools.Po
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='minizip/mztools.c' object='minizip/proxytrack-mztools.o' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(proxytrack_CFLAGS) $(CFLAGS) -c -o proxytrack-mztools.o `test -f 'minizip/mztools.c' || echo '$(srcdir)/'`minizip/mztools.c
|
||||
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(proxytrack_CFLAGS) $(CFLAGS) -c -o minizip/proxytrack-mztools.o `test -f 'minizip/mztools.c' || echo '$(srcdir)/'`minizip/mztools.c
|
||||
|
||||
proxytrack-mztools.obj: minizip/mztools.c
|
||||
@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(proxytrack_CFLAGS) $(CFLAGS) -MT proxytrack-mztools.obj -MD -MP -MF $(DEPDIR)/proxytrack-mztools.Tpo -c -o proxytrack-mztools.obj `if test -f 'minizip/mztools.c'; then $(CYGPATH_W) 'minizip/mztools.c'; else $(CYGPATH_W) '$(srcdir)/minizip/mztools.c'; fi`
|
||||
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/proxytrack-mztools.Tpo $(DEPDIR)/proxytrack-mztools.Po
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='minizip/mztools.c' object='proxytrack-mztools.obj' libtool=no @AMDEPBACKSLASH@
|
||||
minizip/proxytrack-mztools.obj: minizip/mztools.c
|
||||
@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(proxytrack_CFLAGS) $(CFLAGS) -MT minizip/proxytrack-mztools.obj -MD -MP -MF minizip/$(DEPDIR)/proxytrack-mztools.Tpo -c -o minizip/proxytrack-mztools.obj `if test -f 'minizip/mztools.c'; then $(CYGPATH_W) 'minizip/mztools.c'; else $(CYGPATH_W) '$(srcdir)/minizip/mztools.c'; fi`
|
||||
@am__fastdepCC_TRUE@ $(am__mv) minizip/$(DEPDIR)/proxytrack-mztools.Tpo minizip/$(DEPDIR)/proxytrack-mztools.Po
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='minizip/mztools.c' object='minizip/proxytrack-mztools.obj' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(proxytrack_CFLAGS) $(CFLAGS) -c -o proxytrack-mztools.obj `if test -f 'minizip/mztools.c'; then $(CYGPATH_W) 'minizip/mztools.c'; else $(CYGPATH_W) '$(srcdir)/minizip/mztools.c'; fi`
|
||||
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(proxytrack_CFLAGS) $(CFLAGS) -c -o minizip/proxytrack-mztools.obj `if test -f 'minizip/mztools.c'; then $(CYGPATH_W) 'minizip/mztools.c'; else $(CYGPATH_W) '$(srcdir)/minizip/mztools.c'; fi`
|
||||
|
||||
proxytrack-unzip.o: minizip/unzip.c
|
||||
@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(proxytrack_CFLAGS) $(CFLAGS) -MT proxytrack-unzip.o -MD -MP -MF $(DEPDIR)/proxytrack-unzip.Tpo -c -o proxytrack-unzip.o `test -f 'minizip/unzip.c' || echo '$(srcdir)/'`minizip/unzip.c
|
||||
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/proxytrack-unzip.Tpo $(DEPDIR)/proxytrack-unzip.Po
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='minizip/unzip.c' object='proxytrack-unzip.o' libtool=no @AMDEPBACKSLASH@
|
||||
minizip/proxytrack-unzip.o: minizip/unzip.c
|
||||
@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(proxytrack_CFLAGS) $(CFLAGS) -MT minizip/proxytrack-unzip.o -MD -MP -MF minizip/$(DEPDIR)/proxytrack-unzip.Tpo -c -o minizip/proxytrack-unzip.o `test -f 'minizip/unzip.c' || echo '$(srcdir)/'`minizip/unzip.c
|
||||
@am__fastdepCC_TRUE@ $(am__mv) minizip/$(DEPDIR)/proxytrack-unzip.Tpo minizip/$(DEPDIR)/proxytrack-unzip.Po
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='minizip/unzip.c' object='minizip/proxytrack-unzip.o' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(proxytrack_CFLAGS) $(CFLAGS) -c -o proxytrack-unzip.o `test -f 'minizip/unzip.c' || echo '$(srcdir)/'`minizip/unzip.c
|
||||
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(proxytrack_CFLAGS) $(CFLAGS) -c -o minizip/proxytrack-unzip.o `test -f 'minizip/unzip.c' || echo '$(srcdir)/'`minizip/unzip.c
|
||||
|
||||
proxytrack-unzip.obj: minizip/unzip.c
|
||||
@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(proxytrack_CFLAGS) $(CFLAGS) -MT proxytrack-unzip.obj -MD -MP -MF $(DEPDIR)/proxytrack-unzip.Tpo -c -o proxytrack-unzip.obj `if test -f 'minizip/unzip.c'; then $(CYGPATH_W) 'minizip/unzip.c'; else $(CYGPATH_W) '$(srcdir)/minizip/unzip.c'; fi`
|
||||
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/proxytrack-unzip.Tpo $(DEPDIR)/proxytrack-unzip.Po
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='minizip/unzip.c' object='proxytrack-unzip.obj' libtool=no @AMDEPBACKSLASH@
|
||||
minizip/proxytrack-unzip.obj: minizip/unzip.c
|
||||
@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(proxytrack_CFLAGS) $(CFLAGS) -MT minizip/proxytrack-unzip.obj -MD -MP -MF minizip/$(DEPDIR)/proxytrack-unzip.Tpo -c -o minizip/proxytrack-unzip.obj `if test -f 'minizip/unzip.c'; then $(CYGPATH_W) 'minizip/unzip.c'; else $(CYGPATH_W) '$(srcdir)/minizip/unzip.c'; fi`
|
||||
@am__fastdepCC_TRUE@ $(am__mv) minizip/$(DEPDIR)/proxytrack-unzip.Tpo minizip/$(DEPDIR)/proxytrack-unzip.Po
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='minizip/unzip.c' object='minizip/proxytrack-unzip.obj' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(proxytrack_CFLAGS) $(CFLAGS) -c -o proxytrack-unzip.obj `if test -f 'minizip/unzip.c'; then $(CYGPATH_W) 'minizip/unzip.c'; else $(CYGPATH_W) '$(srcdir)/minizip/unzip.c'; fi`
|
||||
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(proxytrack_CFLAGS) $(CFLAGS) -c -o minizip/proxytrack-unzip.obj `if test -f 'minizip/unzip.c'; then $(CYGPATH_W) 'minizip/unzip.c'; else $(CYGPATH_W) '$(srcdir)/minizip/unzip.c'; fi`
|
||||
|
||||
proxytrack-zip.o: minizip/zip.c
|
||||
@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(proxytrack_CFLAGS) $(CFLAGS) -MT proxytrack-zip.o -MD -MP -MF $(DEPDIR)/proxytrack-zip.Tpo -c -o proxytrack-zip.o `test -f 'minizip/zip.c' || echo '$(srcdir)/'`minizip/zip.c
|
||||
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/proxytrack-zip.Tpo $(DEPDIR)/proxytrack-zip.Po
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='minizip/zip.c' object='proxytrack-zip.o' libtool=no @AMDEPBACKSLASH@
|
||||
minizip/proxytrack-zip.o: minizip/zip.c
|
||||
@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(proxytrack_CFLAGS) $(CFLAGS) -MT minizip/proxytrack-zip.o -MD -MP -MF minizip/$(DEPDIR)/proxytrack-zip.Tpo -c -o minizip/proxytrack-zip.o `test -f 'minizip/zip.c' || echo '$(srcdir)/'`minizip/zip.c
|
||||
@am__fastdepCC_TRUE@ $(am__mv) minizip/$(DEPDIR)/proxytrack-zip.Tpo minizip/$(DEPDIR)/proxytrack-zip.Po
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='minizip/zip.c' object='minizip/proxytrack-zip.o' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(proxytrack_CFLAGS) $(CFLAGS) -c -o proxytrack-zip.o `test -f 'minizip/zip.c' || echo '$(srcdir)/'`minizip/zip.c
|
||||
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(proxytrack_CFLAGS) $(CFLAGS) -c -o minizip/proxytrack-zip.o `test -f 'minizip/zip.c' || echo '$(srcdir)/'`minizip/zip.c
|
||||
|
||||
proxytrack-zip.obj: minizip/zip.c
|
||||
@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(proxytrack_CFLAGS) $(CFLAGS) -MT proxytrack-zip.obj -MD -MP -MF $(DEPDIR)/proxytrack-zip.Tpo -c -o proxytrack-zip.obj `if test -f 'minizip/zip.c'; then $(CYGPATH_W) 'minizip/zip.c'; else $(CYGPATH_W) '$(srcdir)/minizip/zip.c'; fi`
|
||||
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/proxytrack-zip.Tpo $(DEPDIR)/proxytrack-zip.Po
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='minizip/zip.c' object='proxytrack-zip.obj' libtool=no @AMDEPBACKSLASH@
|
||||
minizip/proxytrack-zip.obj: minizip/zip.c
|
||||
@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(proxytrack_CFLAGS) $(CFLAGS) -MT minizip/proxytrack-zip.obj -MD -MP -MF minizip/$(DEPDIR)/proxytrack-zip.Tpo -c -o minizip/proxytrack-zip.obj `if test -f 'minizip/zip.c'; then $(CYGPATH_W) 'minizip/zip.c'; else $(CYGPATH_W) '$(srcdir)/minizip/zip.c'; fi`
|
||||
@am__fastdepCC_TRUE@ $(am__mv) minizip/$(DEPDIR)/proxytrack-zip.Tpo minizip/$(DEPDIR)/proxytrack-zip.Po
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='minizip/zip.c' object='minizip/proxytrack-zip.obj' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(proxytrack_CFLAGS) $(CFLAGS) -c -o proxytrack-zip.obj `if test -f 'minizip/zip.c'; then $(CYGPATH_W) 'minizip/zip.c'; else $(CYGPATH_W) '$(srcdir)/minizip/zip.c'; fi`
|
||||
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(proxytrack_CFLAGS) $(CFLAGS) -c -o minizip/proxytrack-zip.obj `if test -f 'minizip/zip.c'; then $(CYGPATH_W) 'minizip/zip.c'; else $(CYGPATH_W) '$(srcdir)/minizip/zip.c'; fi`
|
||||
|
||||
mostlyclean-libtool:
|
||||
-rm -f *.lo
|
||||
|
||||
clean-libtool:
|
||||
-rm -rf .libs _libs
|
||||
-rm -rf minizip/.libs minizip/_libs
|
||||
install-DevIncludesDATA: $(DevIncludes_DATA)
|
||||
@$(NORMAL_INSTALL)
|
||||
@list='$(DevIncludes_DATA)'; test -n "$(DevIncludesdir)" || list=; \
|
||||
@@ -922,6 +1244,10 @@ 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)
|
||||
-rm -f minizip/$(DEPDIR)/$(am__dirstamp)
|
||||
-rm -f minizip/$(am__dirstamp)
|
||||
-rm -f proxy/$(DEPDIR)/$(am__dirstamp)
|
||||
-rm -f proxy/$(am__dirstamp)
|
||||
|
||||
maintainer-clean-generic:
|
||||
@echo "This command is intended for maintainers to use"
|
||||
@@ -932,7 +1258,7 @@ clean-am: clean-binPROGRAMS clean-generic clean-libLTLIBRARIES \
|
||||
clean-libtool mostlyclean-am
|
||||
|
||||
distclean: distclean-am
|
||||
-rm -rf ./$(DEPDIR)
|
||||
-rm -rf ./$(DEPDIR) minizip/$(DEPDIR) proxy/$(DEPDIR)
|
||||
-rm -f Makefile
|
||||
distclean-am: clean-am distclean-compile distclean-generic \
|
||||
distclean-tags
|
||||
@@ -978,7 +1304,7 @@ install-ps-am:
|
||||
installcheck-am:
|
||||
|
||||
maintainer-clean: maintainer-clean-am
|
||||
-rm -rf ./$(DEPDIR)
|
||||
-rm -rf ./$(DEPDIR) minizip/$(DEPDIR) proxy/$(DEPDIR)
|
||||
-rm -f Makefile
|
||||
maintainer-clean-am: distclean-am maintainer-clean-generic
|
||||
|
||||
|
||||
1561
src/coucal.c
Normal file
1561
src/coucal.c
Normal file
File diff suppressed because it is too large
Load Diff
529
src/coucal.h
Normal file
529
src/coucal.h
Normal file
@@ -0,0 +1,529 @@
|
||||
/* ------------------------------------------------------------ */
|
||||
/*
|
||||
Coucal, Cuckoo hashing-based hashtable with stash area.
|
||||
Copyright (C) 2013-2014 Xavier Roche (http://www.httrack.com/)
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:
|
||||
|
||||
1. Redistributions of source code must retain the above copyright notice, this
|
||||
list of conditions and the following disclaimer.
|
||||
|
||||
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
this list of conditions and the following disclaimer in the documentation
|
||||
and/or other materials provided with the distribution.
|
||||
|
||||
3. Neither the name of the copyright holder nor the names of its contributors
|
||||
may be used to endorse or promote products derived from this software without
|
||||
specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
||||
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Coucal, a Cuckoo-hashing-based hashtable with stash area C library.
|
||||
*
|
||||
* This hashtable library provides key/value hashtable, with by default a
|
||||
* string key, and integer/pointer value (with an associated optional
|
||||
* allocator). Both key and value can be of any type, using custom settings.
|
||||
* By default, the string key is dup'ed using a string pool, and the opaque
|
||||
* value is stored as-is (either the pointer, or an uintptr_t integer value).
|
||||
* It features O(1) average insertion, and guaranteed O(1) lookup, replace,
|
||||
* and delete operations.
|
||||
*
|
||||
* Implementation notes:
|
||||
* Implementation is auto-rehashable, and uses cuckoo hashing of size 2**n
|
||||
* with a Murmur or MD5 hash function, with one additional auxiliary hash
|
||||
* function.
|
||||
* It also uses a small stash area to handle rare cases of collisions.
|
||||
* Enumeration of all key/values is possible, deletion is also possible, but
|
||||
* currently without any auto-shrinking (ie. table will never shrink).
|
||||
* Overall, two main blocks are allocated: one for the items, and one for
|
||||
* the keys (pool).
|
||||
* If the string pool is being used (to store dup'ed keys), deleting is only
|
||||
* O(1) average, because the pool needs to be compacted time to time.
|
||||
* Currently the default maximum number of elements in the hashtable is
|
||||
* 2**31 - 1 (that is, 2,147,483,648 elements), but this default can be changed
|
||||
* by setting COUCAL_HASH_SIZE to a higher value (64 is the only higher value
|
||||
* currently supported), and rebuilding the library.
|
||||
*
|
||||
* References:
|
||||
*
|
||||
* Cuckoo Hashing, by Rasmus Pagh and Flemming Friche Rodler
|
||||
* http://www.it-c.dk/people/pagh/papers/cuckoo-jour.pdf
|
||||
*
|
||||
* Cuckoo Stash, by Adam Kirsch, Michael Mitzenmacher and Udi Wieder
|
||||
* http://research.microsoft.com/pubs/73856/stash-full.9-30.pdf
|
||||
*
|
||||
* MurmurHash3, by Austin Appleby
|
||||
* http://en.wikipedia.org/wiki/MurmurHash
|
||||
*
|
||||
* MD5 http://en.wikipedia.org/wiki/MD5
|
||||
* FNV http://www.isthe.com/chongo/tech/comp/fnv/
|
||||
**/
|
||||
|
||||
#ifndef COUCAL_DEFH
|
||||
#define COUCAL_DEFH
|
||||
|
||||
/* Includes */
|
||||
#ifdef _WIN32
|
||||
#include <stddef.h>
|
||||
typedef unsigned __int32 uint32_t;
|
||||
typedef unsigned __int64 uint64_t;
|
||||
#elif (defined(SOLARIS) || defined(sun) || defined(HAVE_INTTYPES_H) \
|
||||
|| defined(BSD) || defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__NetBSD__) || defined(__FreeBSD_kernel__))
|
||||
#include <inttypes.h>
|
||||
#else
|
||||
#include <stdint.h>
|
||||
#endif
|
||||
#include <stdarg.h>
|
||||
|
||||
/* External definitions */
|
||||
#ifndef COUCAL_EXTERN
|
||||
#ifdef _WIN32
|
||||
#ifdef COUCAL_BUILDING
|
||||
#define COUCAL_EXTERN __declspec(dllimport)
|
||||
#else
|
||||
#define COUCAL_EXTERN __declspec(dllexport)
|
||||
#endif
|
||||
#elif ( ( defined(__GNUC__) && ( __GNUC__ >= 4 ) ) \
|
||||
|| ( defined(HAVE_VISIBILITY) && HAVE_VISIBILITY ) )
|
||||
#define COUCAL_EXTERN extern __attribute__ ((visibility("default")))
|
||||
#else
|
||||
#define COUCAL_EXTERN extern
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/** Key opaque type. May be a regular 'const char*'. **/
|
||||
typedef void* coucal_key;
|
||||
|
||||
/** Key constant (can not be modified) opaque type. **/
|
||||
typedef const void* coucal_key_const;
|
||||
|
||||
/** Opaque user-defined pointer. **/
|
||||
typedef void* coucal_opaque;
|
||||
|
||||
/** Value (union of any value). **/
|
||||
typedef union coucal_value {
|
||||
/** Integer value. **/
|
||||
intptr_t intg;
|
||||
|
||||
/** Unsigned integer value. **/
|
||||
uintptr_t uintg;
|
||||
|
||||
/** Pointer value. **/
|
||||
void *ptr;
|
||||
} coucal_value;
|
||||
|
||||
/** Value constant. **/
|
||||
typedef const coucal_value coucal_value_const;
|
||||
|
||||
/** NULL Value. **/
|
||||
#define INTHASH_VALUE_NULL { 0 }
|
||||
|
||||
#ifndef HTS_DEF_FWSTRUCT_coucal_item
|
||||
#define HTS_DEF_FWSTRUCT_coucal_item
|
||||
typedef struct coucal_item coucal_item;
|
||||
#endif
|
||||
|
||||
/** Coucal primary hash size. Default is 32-bit. **/
|
||||
#ifndef COUCAL_HASH_SIZE
|
||||
#define COUCAL_HASH_SIZE 32
|
||||
#endif
|
||||
|
||||
/** Hash integer type. **/
|
||||
#if (COUCAL_HASH_SIZE == 32)
|
||||
|
||||
/** 32-bit hash key. **/
|
||||
typedef uint32_t coucal_hashkey;
|
||||
|
||||
#elif (COUCAL_HASH_SIZE == 64)
|
||||
|
||||
/** 64-bit hash key. **/
|
||||
typedef uint64_t coucal_hashkey;
|
||||
|
||||
#else
|
||||
#error "Unsupported COUCAL_HASH_SIZE"
|
||||
#endif
|
||||
|
||||
/** Pair of hashes **/
|
||||
typedef struct coucal_hashkeys {
|
||||
coucal_hashkey hash1;
|
||||
coucal_hashkey hash2;
|
||||
} coucal_hashkeys;
|
||||
|
||||
/** NULL pair of hashes. **/
|
||||
#define INTHASH_KEYS_NULL { 0, 0 }
|
||||
|
||||
/** Item holding a value. **/
|
||||
struct coucal_item {
|
||||
/** Key. **/
|
||||
coucal_key name;
|
||||
|
||||
/** Value. **/
|
||||
coucal_value value;
|
||||
|
||||
/** Hashes of the key. **/
|
||||
coucal_hashkeys hashes;
|
||||
};
|
||||
|
||||
/** Log level. **/
|
||||
typedef enum coucal_loglevel {
|
||||
coucal_log_critical,
|
||||
coucal_log_warning,
|
||||
coucal_log_info,
|
||||
coucal_log_debug,
|
||||
coucal_log_trace
|
||||
} coucal_loglevel;
|
||||
|
||||
/** free handler. Only used when values are markes as xxc **/
|
||||
typedef void (*t_coucal_key_freehandler)(coucal_opaque arg,
|
||||
coucal_key key);
|
||||
|
||||
/** Value free handler. Only used when values are markes as xxc **/
|
||||
typedef void (*t_coucal_value_freehandler)(coucal_opaque arg,
|
||||
coucal_value value);
|
||||
|
||||
/** Key dup handler. **/
|
||||
typedef coucal_key (*t_coucal_duphandler)(coucal_opaque arg,
|
||||
coucal_key_const name);
|
||||
|
||||
/** Key hash computation handler. **/
|
||||
typedef coucal_hashkeys (*t_coucal_hasheshandler)(coucal_opaque arg,
|
||||
coucal_key_const name);
|
||||
|
||||
/** Hashtable logging handler. **/
|
||||
typedef void (*t_coucal_loghandler)(coucal_opaque arg, coucal_loglevel level,
|
||||
const char* format, va_list args);
|
||||
|
||||
/** Hashtable fatal assertion failure. **/
|
||||
typedef void (*t_coucal_asserthandler)(coucal_opaque arg, const char* exp,
|
||||
const char* file, int line);
|
||||
|
||||
/** Key printer (debug) **/
|
||||
typedef const char* (*t_coucal_printkeyhandler)(coucal_opaque arg,
|
||||
coucal_key_const name);
|
||||
|
||||
/** Value printer (debug) **/
|
||||
typedef const char* (*t_coucal_printvaluehandler)(coucal_opaque arg,
|
||||
coucal_value_const value);
|
||||
|
||||
/**
|
||||
* Value comparison handler (returns non-zero value if strings are equal).
|
||||
**/
|
||||
typedef int (*t_coucal_cmphandler)(coucal_opaque arg,
|
||||
coucal_key_const a,
|
||||
coucal_key_const b);
|
||||
|
||||
/** Hashtable (opaque structure). **/
|
||||
#ifndef HTS_DEF_FWSTRUCT_struct_coucal
|
||||
#define HTS_DEF_FWSTRUCT_struct_coucal
|
||||
typedef struct struct_coucal struct_coucal, *coucal;
|
||||
#endif
|
||||
|
||||
/** Hashtable enumeration (opaque structure). **/
|
||||
#ifndef HTS_DEF_FWSTRUCT_struct_coucal_enum
|
||||
#define HTS_DEF_FWSTRUCT_struct_coucal_enum
|
||||
typedef struct struct_coucal_enum struct_coucal_enum;
|
||||
#endif
|
||||
|
||||
/** Enumeration. **/
|
||||
struct struct_coucal_enum {
|
||||
coucal table;
|
||||
size_t index;
|
||||
};
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Create a new hashtable, with initial bucket size of 'size'.
|
||||
* If size is 0, use the default minimal bucket size.
|
||||
* Return a non-NULL pointer upon success.
|
||||
*
|
||||
* By default, keys are supposed to be '\0'-terminated strings, which are
|
||||
* duplicated by the library (the passed pointer does not need to be
|
||||
* persistent), and values are opaque pointers (or integers) which are copied
|
||||
* "as is", without further processing. Use coucal_value_set_key_handler()
|
||||
* and coucal_value_set_value_handler() to alter this default behavior.
|
||||
**/
|
||||
COUCAL_EXTERN coucal coucal_new(size_t size);
|
||||
|
||||
/**
|
||||
* Was the hashtable successfully created ?
|
||||
* Return non-zero value if the hashtable is valid.
|
||||
**/
|
||||
COUCAL_EXTERN int coucal_created(coucal hashtable);
|
||||
|
||||
/**
|
||||
* Delete a hashtable, freeing all entries.
|
||||
**/
|
||||
COUCAL_EXTERN void coucal_delete(coucal * hashtable);
|
||||
|
||||
/**
|
||||
* Return the number of items in the hashtable.
|
||||
**/
|
||||
COUCAL_EXTERN size_t coucal_nitems(coucal hashtable);
|
||||
|
||||
/**
|
||||
* Return the memory size taken by the hashtable.
|
||||
* (This does not take account of the possible memory taken by values)
|
||||
**/
|
||||
COUCAL_EXTERN size_t coucal_memory_size(coucal hashtable);
|
||||
|
||||
/**
|
||||
* Return the library hash size compiled.
|
||||
* The returned value MUST match COUCAL_HASH_SIZE.
|
||||
**/
|
||||
COUCAL_EXTERN size_t coucal_hash_size(void);
|
||||
|
||||
/**
|
||||
* If 'flag' is non-zero, calls coucal_value_set_value_handler() with
|
||||
* default system free() handler function, otherwise, free the value handlers.
|
||||
**/
|
||||
COUCAL_EXTERN void coucal_value_is_malloc(coucal hashtable, int flag);
|
||||
|
||||
/**
|
||||
* Set handlers for values.
|
||||
* free: this handler will be called when a value is to be removed from
|
||||
* the hashtable. if NULL, values won't be free'd.
|
||||
* arg: opaque custom argument to be used by functions.
|
||||
* Handler(s) MUST NOT be changed once elements have been added.
|
||||
**/
|
||||
COUCAL_EXTERN void coucal_value_set_value_handler(coucal hashtable,
|
||||
t_coucal_value_freehandler free,
|
||||
coucal_opaque arg);
|
||||
|
||||
/**
|
||||
* Set handlers for keys.
|
||||
* dup: handler called to duplicate a key. if NULL, the internal pool is used.
|
||||
* free: handler called to free a key. if NULL, the internal pool is used.
|
||||
* hash: hashing handler, called to hash a key. if NULL, the default hash
|
||||
* function is used.
|
||||
* equals: comparison handler, returning non-zero value when two keys are
|
||||
* identical. if NULL, the default comparison function is used.
|
||||
* arg: opaque custom argument to be used by functions.
|
||||
* Handler(s) MUST NOT be changed once elements have been added.
|
||||
**/
|
||||
COUCAL_EXTERN void coucal_value_set_key_handler(coucal hashtable,
|
||||
t_coucal_duphandler dup,
|
||||
t_coucal_key_freehandler free,
|
||||
t_coucal_hasheshandler hash,
|
||||
t_coucal_cmphandler equals,
|
||||
coucal_opaque arg);
|
||||
|
||||
/**
|
||||
* Set assertion failure handler.
|
||||
* log: handler called upon serious programming error
|
||||
* fatal: handler called upon serious programming error
|
||||
**/
|
||||
COUCAL_EXTERN void coucal_set_assert_handler(coucal hashtable,
|
||||
t_coucal_loghandler log,
|
||||
t_coucal_asserthandler fatal,
|
||||
coucal_opaque arg);
|
||||
|
||||
/**
|
||||
* Set pretty print loggers (debug). Both handlers must return a string
|
||||
* pointer which shall be valid until the next call. Both key and value
|
||||
* pointers shall be valid at the same time.
|
||||
* name: handler called to print the string representation of the name
|
||||
* value: handler called to print the string representation of the value
|
||||
**/
|
||||
COUCAL_EXTERN void coucal_set_print_handler(coucal hashtable,
|
||||
t_coucal_printkeyhandler key,
|
||||
t_coucal_printvaluehandler value,
|
||||
coucal_opaque arg);
|
||||
|
||||
/**
|
||||
* Set the hashtable name, for degugging purpose.
|
||||
* name: the hashtable name (ASCII or UTF-8)
|
||||
*/
|
||||
COUCAL_EXTERN void coucal_set_name(coucal hashtable, coucal_key_const name);
|
||||
|
||||
/**
|
||||
* Get the hashtable name, for degugging purpose.
|
||||
* Return NULL if no name was defined.
|
||||
**/
|
||||
COUCAL_EXTERN const char* coucal_get_name(coucal hashtable);
|
||||
|
||||
/**
|
||||
* Read an integer entry from the hashtable.
|
||||
* Return non-zero value upon success and sets intvalue.
|
||||
**/
|
||||
COUCAL_EXTERN int coucal_read(coucal hashtable, coucal_key_const name,
|
||||
intptr_t * intvalue);
|
||||
|
||||
/**
|
||||
* Same as coucal_read(), but return 0 is the value was zero.
|
||||
**/
|
||||
COUCAL_EXTERN int coucal_readptr(coucal hashtable, coucal_key_const name,
|
||||
intptr_t * intvalue);
|
||||
|
||||
/**
|
||||
* Read an integer entry from the hashtable.
|
||||
* Return 0 if the entry could not be found.
|
||||
**/
|
||||
COUCAL_EXTERN intptr_t coucal_get_intptr(coucal hashtable,
|
||||
coucal_key_const name);
|
||||
|
||||
/**
|
||||
* Return non-zero value if the given entry exists.
|
||||
**/
|
||||
COUCAL_EXTERN int coucal_exists(coucal hashtable, coucal_key_const name);
|
||||
|
||||
/**
|
||||
* Read an entry from the hashtable.
|
||||
* Return non-zero value upon success and sets value.
|
||||
**/
|
||||
COUCAL_EXTERN int coucal_read_value(coucal hashtable, coucal_key_const name,
|
||||
coucal_value *value);
|
||||
|
||||
/**
|
||||
* Write an entry to the hashtable.
|
||||
* Return non-zero value if the entry was added, zero if it was replaced.
|
||||
**/
|
||||
COUCAL_EXTERN int coucal_write_value(coucal hashtable, coucal_key_const name,
|
||||
coucal_value_const value);
|
||||
|
||||
/**
|
||||
* Read a pointer entry from the hashtable.
|
||||
* Return non-zero value upon success and sets value.
|
||||
**/
|
||||
COUCAL_EXTERN int coucal_read_pvoid(coucal hashtable, coucal_key_const name,
|
||||
void **value);
|
||||
|
||||
/**
|
||||
* Read a pointer entry from the hashtable and returns its value.
|
||||
* Return NULL if the entry could not be found.
|
||||
**/
|
||||
COUCAL_EXTERN void* coucal_get_pvoid(coucal hashtable, coucal_key_const name);
|
||||
|
||||
/**
|
||||
* Write a pointer entry to the hashtable.
|
||||
* Return non-zero value if the entry was added, zero if it was replaced.
|
||||
**/
|
||||
COUCAL_EXTERN int coucal_write_pvoid(coucal hashtable, coucal_key_const name,
|
||||
void *value);
|
||||
|
||||
/**
|
||||
* Alias to coucal_write_pvoid()
|
||||
**/
|
||||
COUCAL_EXTERN void coucal_add_pvoid(coucal hashtable, coucal_key_const name,
|
||||
void *value);
|
||||
|
||||
/**
|
||||
* Write an integer entry to the hashtable.
|
||||
* Return non-zero value if the entry was added, zero if it was replaced.
|
||||
**/
|
||||
COUCAL_EXTERN int coucal_write(coucal hashtable, coucal_key_const name,
|
||||
intptr_t value);
|
||||
|
||||
/**
|
||||
* Alias to coucal_write()
|
||||
**/
|
||||
COUCAL_EXTERN void coucal_add(coucal hashtable, coucal_key_const name,
|
||||
intptr_t value);
|
||||
|
||||
/**
|
||||
* Increment an entry value in the hashtable
|
||||
* (or create a new entry with value 1 if it does not yet exist)
|
||||
* Return non-zero value if the entry was added, zero if it was changed.
|
||||
**/
|
||||
COUCAL_EXTERN int coucal_inc(coucal hashtable, coucal_key_const name);
|
||||
|
||||
/**
|
||||
* Decrement an entry value in the hashtable
|
||||
* (or create a new entry with value -1 if it does not yet exist)
|
||||
* Return non-zero value if the entry was added, zero if it was changed.
|
||||
**/
|
||||
COUCAL_EXTERN int coucal_dec(coucal hashtable, coucal_key_const name);
|
||||
|
||||
/**
|
||||
* Fetch an entry value from the hashtable.
|
||||
* Returns NULL if the entry could not be found.
|
||||
* The returned pointer is only valid until next call to this library, and can
|
||||
* be used for read or write operations.
|
||||
**/
|
||||
COUCAL_EXTERN coucal_value* coucal_fetch_value(coucal hashtable,
|
||||
coucal_key_const name);
|
||||
|
||||
/**
|
||||
* Fetch an entry value from the hashtable, given a name, and its hashes.
|
||||
* Returns NULL if the entry could not be found.
|
||||
* The returned pointer is only valid until next call to this library, and can
|
||||
* be used for read or write operations.
|
||||
* The hashes MUST have been computed using coucal_calc_hashes(), or by
|
||||
* copying an existing hash during an enumeration.
|
||||
* The use of a non-matching hash is safe, but will return NULL.
|
||||
**/
|
||||
COUCAL_EXTERN coucal_value* coucal_fetch_value_hashes(coucal hashtable,
|
||||
coucal_key_const name,
|
||||
const coucal_hashkeys
|
||||
*hashes);
|
||||
|
||||
/**
|
||||
* Remove an entry from the hashtable
|
||||
* Return non-zero value if the entry was removed, zero otherwise.
|
||||
**/
|
||||
COUCAL_EXTERN int coucal_remove(coucal hashtable, coucal_key_const name);
|
||||
|
||||
/**
|
||||
* Return a new enumerator.
|
||||
* Note: deleting entries is safe while enumerating, but adding entries
|
||||
* lead to undefined enumeration behavior (yet safe).
|
||||
**/
|
||||
COUCAL_EXTERN struct_coucal_enum coucal_enum_new(coucal hashtable);
|
||||
|
||||
/**
|
||||
* Enumerate the next entry.
|
||||
**/
|
||||
COUCAL_EXTERN coucal_item *coucal_enum_next(struct_coucal_enum * e);
|
||||
|
||||
/**
|
||||
* Compute a hash of a key for the hashtable 'hashtable'.
|
||||
* The returned hash is suitable for use with coucal_fetch_value_hashes()
|
||||
* Note: the default implementation uses coucal_hash_string()
|
||||
**/
|
||||
COUCAL_EXTERN coucal_hashkeys coucal_calc_hashes(coucal hashtable,
|
||||
coucal_key_const value);
|
||||
|
||||
/**
|
||||
* Compute a hash, given a string. This is the default function used for
|
||||
* hashing keys, which are by default strings. This function uses
|
||||
* coucal_hash_data() as backend.
|
||||
**/
|
||||
COUCAL_EXTERN coucal_hashkeys coucal_hash_string(const char *value);
|
||||
|
||||
/**
|
||||
* Compute a hash, given an opaque buffer.
|
||||
**/
|
||||
COUCAL_EXTERN coucal_hashkeys coucal_hash_data(const void *data, size_t size);
|
||||
|
||||
/**
|
||||
* Set default global assertion failure handler.
|
||||
* The handler will be used if no specific handler was defined in the
|
||||
* hashtable itself.
|
||||
* log: handler called upon serious error log (opaque argument
|
||||
* is the hashtable itself)
|
||||
* fatal: handler called upon serious programming error (opaque argument
|
||||
* is the hashtable itself)
|
||||
**/
|
||||
COUCAL_EXTERN void coucal_set_global_assert_handler(t_coucal_loghandler log,
|
||||
t_coucal_asserthandler fatal);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
@@ -1,7 +1,7 @@
|
||||
/* ------------------------------------------------------------ */
|
||||
/*
|
||||
HTTrack Website Copier, Offline Browser for Windows and Unix
|
||||
Copyright (C) 1998-2013 Xavier Roche and other contributors
|
||||
Copyright (C) 1998-2014 Xavier Roche and other contributors
|
||||
|
||||
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
|
||||
@@ -168,7 +168,7 @@ regen:
|
||||
" <BR>"LF\
|
||||
" <BR>"LF\
|
||||
" <H6 ALIGN=\"RIGHT\">"LF\
|
||||
" <I>Mirror and index made by HTTrack Website Copier [XR&CO'2013]</I>"LF\
|
||||
" <I>Mirror and index made by HTTrack Website Copier [XR&CO'2014]</I>"LF\
|
||||
" </H6>"LF\
|
||||
" %s"LF\
|
||||
" <!-- Thanks for using HTTrack Website Copier! -->"LF\
|
||||
@@ -186,7 +186,7 @@ regen:
|
||||
""LF\
|
||||
"<table width=\"76%%\" border=\"0\" align=\"center\" valign=\"bottom\" cellspacing=\"0\" cellpadding=\"0\">"LF\
|
||||
" <tr>"LF\
|
||||
" <td id=\"footer\"><small>© 2013 Xavier Roche & other contributors - Web Design: Kauler Leto.</small></td>"LF\
|
||||
" <td id=\"footer\"><small>© 2014 Xavier Roche & other contributors - Web Design: Kauler Leto.</small></td>"LF\
|
||||
" </tr>"LF\
|
||||
"</table>"LF\
|
||||
""LF\
|
||||
@@ -317,7 +317,7 @@ regen:
|
||||
" </TABLE>"LF\
|
||||
" <BR>"LF\
|
||||
" <H6 ALIGN=\"RIGHT\">"LF\
|
||||
" <I>Mirror and index made by HTTrack Website Copier [XR&CO'2013]</I>"LF\
|
||||
" <I>Mirror and index made by HTTrack Website Copier [XR&CO'2014]</I>"LF\
|
||||
" </H6>"LF\
|
||||
" %s"LF\
|
||||
" <!-- Thanks for using HTTrack Website Copier! -->"LF\
|
||||
@@ -335,7 +335,7 @@ regen:
|
||||
""LF\
|
||||
"<table width=\"76%%\" border=\"0\" align=\"center\" valign=\"bottom\" cellspacing=\"0\" cellpadding=\"0\">"LF\
|
||||
" <tr>"LF\
|
||||
" <td id=\"footer\"><small>© 2013 Xavier Roche & other contributors - Web Design: Kauler Leto.</small></td>"LF\
|
||||
" <td id=\"footer\"><small>© 2014 Xavier Roche & other contributors - Web Design: Kauler Leto.</small></td>"LF\
|
||||
" </tr>"LF\
|
||||
"</table>"LF\
|
||||
""LF\
|
||||
@@ -475,7 +475,7 @@ regen:
|
||||
""LF\
|
||||
"<table width=\"76%%\" height=\"100%%\" border=\"0\" align=\"center\" valign=\"bottom\" cellspacing=\"0\" cellpadding=\"0\">"LF\
|
||||
" <tr>"LF\
|
||||
" <td id=\"footer\"><small>© 2013 Xavier Roche & other contributors - Web Design: Kauler Leto.</small></td>"LF\
|
||||
" <td id=\"footer\"><small>© 2014 Xavier Roche & other contributors - Web Design: Kauler Leto.</small></td>"LF\
|
||||
" </tr>"LF\
|
||||
"</table>"LF\
|
||||
""LF\
|
||||
@@ -612,7 +612,7 @@ regen:
|
||||
""LF\
|
||||
"<table width=\"76%%\" height=\"100%%\" border=\"0\" align=\"center\" valign=\"bottom\" cellspacing=\"0\" cellpadding=\"0\">"LF\
|
||||
" <tr>"LF\
|
||||
" <td id=\"footer\"><small>© 2013 Xavier Roche & other contributors - Web Design: Kauler Leto.</small></td>"LF\
|
||||
" <td id=\"footer\"><small>© 2014 Xavier Roche & other contributors - Web Design: Kauler Leto.</small></td>"LF\
|
||||
" </tr>"LF\
|
||||
"</table>"LF\
|
||||
""LF\
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/* ------------------------------------------------------------ */
|
||||
/*
|
||||
HTTrack Website Copier, Offline Browser for Windows and Unix
|
||||
Copyright (C) 1998-2013 Xavier Roche and other contributors
|
||||
Copyright (C) 1998-2014 Xavier Roche and other contributors
|
||||
|
||||
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
|
||||
@@ -37,20 +37,9 @@ Please visit our Website: http://www.httrack.com
|
||||
#include "htsbase.h"
|
||||
#include "htsalias.h"
|
||||
#include "htsglobal.h"
|
||||
|
||||
void linput(FILE * fp, char *s, int max);
|
||||
void hts_lowcase(char *s);
|
||||
#include "htslib.h"
|
||||
|
||||
#define _NOT_NULL(a) ( (a!=NULL) ? (a) : "" )
|
||||
// #define is_realspace(c) (strchr(" \x0d\x0a\x09\x0b\x0c",(c))!=NULL)
|
||||
#define is_realspace(c) ( \
|
||||
(c) == ' ' \
|
||||
|| (c) == '\x09' \
|
||||
|| (c) == '\x0a' \
|
||||
|| (c) == '\x0b' \
|
||||
|| (c) == '\x0c' \
|
||||
|| (c) == '\x0d' \
|
||||
)
|
||||
|
||||
// COPY OF cmdl_ins in htsmain.c
|
||||
// Insert a command in the argc/argv
|
||||
@@ -200,10 +189,10 @@ const char *hts_optalias[][4] = {
|
||||
/* Badly documented */
|
||||
{"debug-testfilters", "-#0", "param1", "debug: test filters"},
|
||||
{"advanced-flushlogs", "-#f", "single", ""},
|
||||
{"advanced-maxfilters", "-#F", "param", ""},
|
||||
{"advanced-maxfilters", "-#F", "param", "maximum number of scan rules"},
|
||||
{"version", "-#h", "single", ""},
|
||||
{"debug-scanstdin", "-#K", "single", ""},
|
||||
{"advanced-maxlinks", "-#L", "single", ""},
|
||||
{"advanced-maxlinks", "-#L", "param", "maximum number of links (0 to disable limit)"},
|
||||
{"advanced-progressinfo", "-#p", "single", "deprecated"},
|
||||
{"catch-url", "-#P", "single", "catch complex URL through proxy"},
|
||||
/*{"debug-oldftp","-#R","single",""}, */
|
||||
@@ -528,9 +517,9 @@ int optinclude_file(const char *name, int *argc, char **argv, char *x_argvblk,
|
||||
tmp_argv[1] = _tmp_argv[1];
|
||||
tmp_argv[2] = _tmp_argv[2];
|
||||
tmp_argv[3] = _tmp_argv[3];
|
||||
strcpybuff(tmp_argv[0], "--");
|
||||
strcatbuff(tmp_argv[0], a);
|
||||
strcpybuff(tmp_argv[1], b);
|
||||
strcpybuff(_tmp_argv[0], "--");
|
||||
strcatbuff(_tmp_argv[0], a);
|
||||
strcpybuff(_tmp_argv[1], b);
|
||||
|
||||
result =
|
||||
optalias_check(2, (const char *const *) tmp_argv, 0, &return_argc,
|
||||
@@ -571,8 +560,8 @@ int optinclude_file(const char *name, int *argc, char **argv, char *x_argvblk,
|
||||
|
||||
/* Get home directory, '.' if failed */
|
||||
/* example: /home/smith */
|
||||
char *hts_gethome(void) {
|
||||
char *home = getenv("HOME");
|
||||
const char *hts_gethome(void) {
|
||||
const char *home = getenv("HOME");
|
||||
|
||||
if (home)
|
||||
return home;
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/* ------------------------------------------------------------ */
|
||||
/*
|
||||
HTTrack Website Copier, Offline Browser for Windows and Unix
|
||||
Copyright (C) 1998-2013 Xavier Roche and other contributors
|
||||
Copyright (C) 1998-2014 Xavier Roche and other contributors
|
||||
|
||||
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
|
||||
@@ -48,7 +48,7 @@ const char *optreal_value(int p);
|
||||
const char *optalias_value(int p);
|
||||
const char *opttype_value(int p);
|
||||
const char *opthelp_value(int p);
|
||||
char *hts_gethome(void);
|
||||
const char *hts_gethome(void);
|
||||
void expand_home(String * str);
|
||||
#endif
|
||||
|
||||
|
||||
149
src/htsarrays.h
Normal file
149
src/htsarrays.h
Normal file
@@ -0,0 +1,149 @@
|
||||
/* ------------------------------------------------------------ */
|
||||
/*
|
||||
HTTrack Website Copier, Offline Browser for Windows and Unix
|
||||
Copyright (C) 1998-2014 Xavier Roche and other contributors
|
||||
|
||||
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 <http://www.gnu.org/licenses/>.
|
||||
|
||||
Important notes:
|
||||
|
||||
- We hereby ask people using this source NOT to use it in purpose of grabbing
|
||||
emails addresses, or collecting any other private information on persons.
|
||||
This would disgrace our work, and spoil the many hours we spent on it.
|
||||
|
||||
Please visit our Website: http://www.httrack.com
|
||||
*/
|
||||
|
||||
/* ------------------------------------------------------------ */
|
||||
/* File: Arrays */
|
||||
/* Author: Xavier Roche */
|
||||
/* ------------------------------------------------------------ */
|
||||
|
||||
#ifndef HTS_ARRAYS_DEFSTATIC
|
||||
#define HTS_ARRAYS_DEFSTATIC
|
||||
|
||||
/* System definitions. */
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "htssafe.h"
|
||||
|
||||
/* Memory allocation assertion failure */
|
||||
static void hts_record_assert_memory_failed(const size_t size) {
|
||||
fprintf(stderr, "memory allocation failed (%lu bytes)", \
|
||||
(long int) size); \
|
||||
assertf(! "memory allocation failed"); \
|
||||
}
|
||||
|
||||
/** Dynamic array of T elements. **/
|
||||
#define TypedArray(T) \
|
||||
struct { \
|
||||
/** Elements. **/ \
|
||||
union { \
|
||||
/** Typed. **/ \
|
||||
T* elts; \
|
||||
/** Opaque. **/ \
|
||||
void* ptr; \
|
||||
} data; \
|
||||
/** Count. **/ \
|
||||
size_t size; \
|
||||
/** Capacity. **/ \
|
||||
size_t capa; \
|
||||
}
|
||||
#define EMPTY_TYPED_ARRAY { { NULL }, 0, 0 }
|
||||
|
||||
/** Array size, in elements. **/
|
||||
#define TypedArraySize(A) ((A).size)
|
||||
|
||||
/** Array capacity, in elements. **/
|
||||
#define TypedArrayCapa(A) ((A).capa)
|
||||
|
||||
/**
|
||||
* Remaining free space, in elements.
|
||||
* Macro, first element evaluated multiple times.
|
||||
**/
|
||||
#define TypedArrayRoom(A) ( TypedArrayCapa(A) - TypedArraySize(A) )
|
||||
|
||||
/** Array elements, of type T*. **/
|
||||
#define TypedArrayElts(A) ((A).data.elts)
|
||||
|
||||
/** Array pointer, of type void*. **/
|
||||
#define TypedArrayPtr(A) ((A).data.ptr)
|
||||
|
||||
/** Size of T. **/
|
||||
#define TypedArrayWidth(A) (sizeof(*TypedArrayElts(A)))
|
||||
|
||||
/** Nth element of the array. **/
|
||||
#define TypedArrayNth(A, N) (TypedArrayElts(A)[N])
|
||||
|
||||
/**
|
||||
* Tail of the array (outside the array).
|
||||
* The returned pointer points to the beginning of TypedArrayRoom(A)
|
||||
* free elements.
|
||||
**/
|
||||
#define TypedArrayTail(A) (TypedArrayNth(A, TypedArraySize(A)))
|
||||
|
||||
/**
|
||||
* Ensure at least 'ROOM' elements can be put in the remaining space.
|
||||
* After a call to this macro, TypedArrayRoom(A) is guaranteed to be at
|
||||
* least equal to 'ROOM'.
|
||||
**/
|
||||
#define TypedArrayEnsureRoom(A, ROOM) do { \
|
||||
const size_t room_ = (ROOM); \
|
||||
while (TypedArrayRoom(A) < room_) { \
|
||||
TypedArrayCapa(A) = TypedArrayCapa(A) < 16 ? 16 : TypedArrayCapa(A) * 2; \
|
||||
} \
|
||||
TypedArrayPtr(A) = realloc(TypedArrayPtr(A), \
|
||||
TypedArrayCapa(A)*TypedArrayWidth(A)); \
|
||||
if (TypedArrayPtr(A) == NULL) { \
|
||||
hts_record_assert_memory_failed(TypedArrayCapa(A)*TypedArrayWidth(A)); \
|
||||
} \
|
||||
} while(0)
|
||||
|
||||
/** Add an element. Macro, first element evaluated multiple times. **/
|
||||
#define TypedArrayAdd(A, E) do { \
|
||||
TypedArrayEnsureRoom(A, 1); \
|
||||
assertf(TypedArraySize(A) < TypedArrayCapa(A)); \
|
||||
TypedArrayTail(A) = (E); \
|
||||
TypedArraySize(A)++; \
|
||||
} while(0)
|
||||
|
||||
/**
|
||||
* Add 'COUNT' elements from 'PTR'.
|
||||
* Macro, first element evaluated multiple times.
|
||||
**/
|
||||
#define TypedArrayAppend(A, PTR, COUNT) do { \
|
||||
const size_t count_ = (COUNT); \
|
||||
/* This 1-case is to benefit from type safety. */ \
|
||||
if (count_ == 1) { \
|
||||
TypedArrayAdd(A, *(PTR)); \
|
||||
} else { \
|
||||
const void *const source_ = (PTR); \
|
||||
TypedArrayEnsureRoom(A, count_); \
|
||||
assertf(count_ <= TypedArrayRoom(A)); \
|
||||
memcpy(&TypedArrayTail(A), source_, count_ * TypedArrayWidth(A)); \
|
||||
TypedArraySize(A) += count_; \
|
||||
} \
|
||||
} while(0)
|
||||
|
||||
/** Clear an array, freeing memory and clearing size and capacity. **/
|
||||
#define TypedArrayFree(A) do { \
|
||||
if (TypedArrayPtr(A) != NULL) { \
|
||||
TypedArrayCapa(A) = TypedArraySize(A) = 0; \
|
||||
free(TypedArrayPtr(A)); \
|
||||
TypedArrayPtr(A) = NULL; \
|
||||
} \
|
||||
} while(0)
|
||||
|
||||
#endif
|
||||
202
src/htsback.c
202
src/htsback.c
@@ -1,7 +1,7 @@
|
||||
/* ------------------------------------------------------------ */
|
||||
/*
|
||||
HTTrack Website Copier, Offline Browser for Windows and Unix
|
||||
Copyright (C) 1998-2013 Xavier Roche and other contributors
|
||||
Copyright (C) 1998-2014 Xavier Roche and other contributors
|
||||
|
||||
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
|
||||
@@ -67,15 +67,17 @@ static int slot_can_be_cached_on_disk(const lien_back * back);
|
||||
static int slot_can_be_cleaned(const lien_back * back);
|
||||
static int slot_can_be_finalized(httrackp * opt, const lien_back * back);
|
||||
|
||||
struct_back *back_new(int back_max) {
|
||||
struct_back *back_new(httrackp *opt, int back_max) {
|
||||
int i;
|
||||
struct_back *sback = calloct(1, sizeof(struct_back));
|
||||
|
||||
sback->count = back_max;
|
||||
sback->lnk = (lien_back *) calloct((back_max + 1), sizeof(lien_back));
|
||||
sback->ready = inthash_new(0);
|
||||
sback->ready = coucal_new(0);
|
||||
hts_set_hash_handler(sback->ready, opt);
|
||||
coucal_set_name(sback->ready, "back_new");
|
||||
sback->ready_size_bytes = 0;
|
||||
inthash_value_is_malloc(sback->ready, 1);
|
||||
coucal_value_is_malloc(sback->ready, 1);
|
||||
// init
|
||||
for(i = 0; i < sback->count; i++) {
|
||||
sback->lnk[i].r.location = sback->lnk[i].location_buffer;
|
||||
@@ -92,7 +94,7 @@ void back_free(struct_back ** sback) {
|
||||
(*sback)->lnk = NULL;
|
||||
}
|
||||
if ((*sback)->ready != NULL) {
|
||||
inthash_delete(&(*sback)->ready);
|
||||
coucal_delete(&(*sback)->ready);
|
||||
(*sback)->ready_size_bytes = 0;
|
||||
}
|
||||
freet(*sback);
|
||||
@@ -110,12 +112,12 @@ void back_delete_all(httrackp * opt, cache_back * cache, struct_back * sback) {
|
||||
}
|
||||
// delete stored slots
|
||||
if (sback->ready != NULL) {
|
||||
struct_inthash_enum e = inthash_enum_new(sback->ready);
|
||||
inthash_chain *item;
|
||||
struct_coucal_enum e = coucal_enum_new(sback->ready);
|
||||
coucal_item *item;
|
||||
|
||||
while((item = inthash_enum_next(&e))) {
|
||||
while((item = coucal_enum_next(&e))) {
|
||||
#ifndef HTS_NO_BACK_ON_DISK
|
||||
char *filename = (char *) item->value.ptr;
|
||||
const char *filename = (char *) item->value.ptr;
|
||||
|
||||
if (filename != NULL) {
|
||||
(void) UNLINK(filename);
|
||||
@@ -128,7 +130,7 @@ void back_delete_all(httrackp * opt, cache_back * cache, struct_back * sback) {
|
||||
#endif
|
||||
}
|
||||
/* delete hashtable & content */
|
||||
inthash_delete(&sback->ready);
|
||||
coucal_delete(&sback->ready);
|
||||
sback->ready_size_bytes = 0;
|
||||
}
|
||||
}
|
||||
@@ -137,19 +139,19 @@ void back_delete_all(httrackp * opt, cache_back * cache, struct_back * sback) {
|
||||
// ---
|
||||
// routines de backing
|
||||
|
||||
static int back_index_ready(httrackp * opt, struct_back * sback, char *adr,
|
||||
char *fil, char *sav, int getIndex);
|
||||
static int back_index_fetch(httrackp * opt, struct_back * sback, char *adr,
|
||||
char *fil, char *sav, int getIndex);
|
||||
static int back_index_ready(httrackp * opt, struct_back * sback, const char *adr,
|
||||
const char *fil, const char *sav, int getIndex);
|
||||
static int back_index_fetch(httrackp * opt, struct_back * sback, const char *adr,
|
||||
const char *fil, const char *sav, int getIndex);
|
||||
|
||||
// retourne l'index d'un lien dans un tableau de backing
|
||||
int back_index(httrackp * opt, struct_back * sback, char *adr, char *fil,
|
||||
char *sav) {
|
||||
int back_index(httrackp * opt, struct_back * sback, const char *adr, const char *fil,
|
||||
const char *sav) {
|
||||
return back_index_fetch(opt, sback, adr, fil, sav, 1);
|
||||
}
|
||||
|
||||
static int back_index_fetch(httrackp * opt, struct_back * sback, char *adr,
|
||||
char *fil, char *sav, int getIndex) {
|
||||
static int back_index_fetch(httrackp * opt, struct_back * sback, const char *adr,
|
||||
const char *fil, const char *sav, int getIndex) {
|
||||
lien_back *const back = sback->lnk;
|
||||
const int back_max = sback->count;
|
||||
int index = -1;
|
||||
@@ -175,12 +177,12 @@ static int back_index_fetch(httrackp * opt, struct_back * sback, char *adr,
|
||||
}
|
||||
|
||||
/* resurrect stored entry */
|
||||
static int back_index_ready(httrackp * opt, struct_back * sback, char *adr,
|
||||
char *fil, char *sav, int getIndex) {
|
||||
static int back_index_ready(httrackp * opt, struct_back * sback, const char *adr,
|
||||
const char *fil, const char *sav, int getIndex) {
|
||||
lien_back *const back = sback->lnk;
|
||||
void *ptr = NULL;
|
||||
|
||||
if (inthash_read_pvoid(sback->ready, sav, &ptr)) {
|
||||
if (coucal_read_pvoid(sback->ready, sav, &ptr)) {
|
||||
if (!getIndex) { /* don't "pagefault" the entry */
|
||||
if (ptr != NULL) {
|
||||
return sback->count; /* (invalid but) positive result */
|
||||
@@ -192,10 +194,10 @@ static int back_index_ready(httrackp * opt, struct_back * sback, char *adr,
|
||||
|
||||
#ifndef HTS_NO_BACK_ON_DISK
|
||||
FILE *fp;
|
||||
char *fileback = (char *) ptr;
|
||||
const char *fileback = (char *) ptr;
|
||||
char catbuff[CATBUFF_SIZE];
|
||||
|
||||
if ((fp = FOPEN(fconv(catbuff, fileback), "rb")) != NULL) {
|
||||
if ((fp = FOPEN(fconv(catbuff, sizeof(catbuff), fileback), "rb")) != NULL) {
|
||||
if (back_unserialize(fp, &itemback) != 0) {
|
||||
if (itemback != NULL) {
|
||||
back_clear_entry(itemback);
|
||||
@@ -226,7 +228,7 @@ static int back_index_ready(httrackp * opt, struct_back * sback, char *adr,
|
||||
back_clear_entry(itemback); /* delete entry content */
|
||||
freet(itemback); /* delete item */
|
||||
itemback = NULL;
|
||||
inthash_remove(sback->ready, sav); // delete item
|
||||
coucal_remove(sback->ready, sav); // delete item
|
||||
sback->ready_size_bytes -= back[q].r.size; /* substract for stats */
|
||||
back_set_locked(sback, q); /* locked */
|
||||
return q;
|
||||
@@ -307,7 +309,7 @@ int back_cleanup_background(httrackp * opt, cache_back * cache,
|
||||
/* Create file and serialize slot */
|
||||
if ((fp = filecreate(NULL, filename)) != NULL) {
|
||||
if (back_serialize(fp, &back[i]) == 0) {
|
||||
inthash_add_pvoid(sback->ready, back[i].url_sav, filename);
|
||||
coucal_add_pvoid(sback->ready, back[i].url_sav, filename);
|
||||
filename = NULL;
|
||||
sback->ready_size_bytes += back[i].r.size; /* add for stats */
|
||||
nclean++;
|
||||
@@ -338,7 +340,7 @@ int back_cleanup_background(httrackp * opt, cache_back * cache,
|
||||
#else
|
||||
itemback = calloct(1, sizeof(lien_back));
|
||||
back_move(&back[i], itemback);
|
||||
inthash_add_pvoid(sback->ready, itemback->url_sav, itemback);
|
||||
coucal_add_pvoid(sback->ready, itemback->url_sav, itemback);
|
||||
nclean++;
|
||||
#endif
|
||||
}
|
||||
@@ -347,8 +349,8 @@ int back_cleanup_background(httrackp * opt, cache_back * cache,
|
||||
}
|
||||
|
||||
// nombre d'entrées libres dans le backing
|
||||
int back_available(struct_back * sback) {
|
||||
lien_back *const back = sback->lnk;
|
||||
int back_available(const struct_back * sback) {
|
||||
const lien_back *const back = sback->lnk;
|
||||
const int back_max = sback->count;
|
||||
int i;
|
||||
int nb = 0;
|
||||
@@ -360,8 +362,8 @@ int back_available(struct_back * sback) {
|
||||
}
|
||||
|
||||
// retourne estimation de la taille des html et fichiers stockés en mémoire
|
||||
LLint back_incache(struct_back * sback) {
|
||||
lien_back *const back = sback->lnk;
|
||||
LLint back_incache(const struct_back * sback) {
|
||||
const lien_back *const back = sback->lnk;
|
||||
const int back_max = sback->count;
|
||||
int i;
|
||||
LLint sum = 0;
|
||||
@@ -373,10 +375,10 @@ LLint back_incache(struct_back * sback) {
|
||||
// stored (ready) slots
|
||||
#ifdef HTS_NO_BACK_ON_DISK
|
||||
if (sback->ready != NULL) {
|
||||
struct_inthash_enum e = inthash_enum_new(sback->ready);
|
||||
inthash_chain *item;
|
||||
struct_coucal_enum e = coucal_enum_new(sback->ready);
|
||||
coucal_item *item;
|
||||
|
||||
while((item = inthash_enum_next(&e))) {
|
||||
while((item = coucal_enum_next(&e))) {
|
||||
lien_back *ritem = (lien_back *) item->value.ptr;
|
||||
|
||||
if (ritem->status != -1)
|
||||
@@ -389,8 +391,8 @@ LLint back_incache(struct_back * sback) {
|
||||
}
|
||||
|
||||
// retourne estimation de la taille des html et fichiers stockés en mémoire
|
||||
int back_done_incache(struct_back * sback) {
|
||||
lien_back *const back = sback->lnk;
|
||||
int back_done_incache(const struct_back * sback) {
|
||||
const lien_back *const back = sback->lnk;
|
||||
const int back_max = sback->count;
|
||||
int i;
|
||||
int n = 0;
|
||||
@@ -401,12 +403,12 @@ int back_done_incache(struct_back * sback) {
|
||||
// stored (ready) slots
|
||||
if (sback->ready != NULL) {
|
||||
#ifndef HTS_NO_BACK_ON_DISK
|
||||
n += (int) inthash_nitems(sback->ready);
|
||||
n += (int) coucal_nitems(sback->ready);
|
||||
#else
|
||||
struct_inthash_enum e = inthash_enum_new(sback->ready);
|
||||
inthash_chain *item;
|
||||
struct_coucal_enum e = coucal_enum_new(sback->ready);
|
||||
coucal_item *item;
|
||||
|
||||
while((item = inthash_enum_next(&e))) {
|
||||
while((item = coucal_enum_next(&e))) {
|
||||
lien_back *ritem = (lien_back *) item->value.ptr;
|
||||
|
||||
if (ritem->status == STATUS_READY)
|
||||
@@ -418,14 +420,14 @@ int back_done_incache(struct_back * sback) {
|
||||
}
|
||||
|
||||
// le lien a-t-il été mis en backing?
|
||||
HTS_INLINE int back_exist(struct_back * sback, httrackp * opt, char *adr,
|
||||
char *fil, char *sav) {
|
||||
HTS_INLINE int back_exist(struct_back * sback, httrackp * opt, const char *adr,
|
||||
const char *fil, const char *sav) {
|
||||
return (back_index_fetch(opt, sback, adr, fil, sav, /*don't fetch */ 0) >= 0);
|
||||
}
|
||||
|
||||
// nombre de sockets en tâche de fond
|
||||
int back_nsoc(struct_back * sback) {
|
||||
lien_back *const back = sback->lnk;
|
||||
int back_nsoc(const struct_back * sback) {
|
||||
const lien_back *const back = sback->lnk;
|
||||
const int back_max = sback->count;
|
||||
int n = 0;
|
||||
int i;
|
||||
@@ -436,8 +438,8 @@ int back_nsoc(struct_back * sback) {
|
||||
|
||||
return n;
|
||||
}
|
||||
int back_nsoc_overall(struct_back * sback) {
|
||||
lien_back *const back = sback->lnk;
|
||||
int back_nsoc_overall(const struct_back * sback) {
|
||||
const lien_back *const back = sback->lnk;
|
||||
const int back_max = sback->count;
|
||||
int n = 0;
|
||||
int i;
|
||||
@@ -513,7 +515,7 @@ int back_finalize(httrackp * opt, cache_back * cache, struct_back * sback,
|
||||
&& (back[p].r.statuscode > 0) // not internal error
|
||||
) {
|
||||
if (!back[p].testmode) { // not test mode
|
||||
char *state = "unknown";
|
||||
const char *state = "unknown";
|
||||
|
||||
/* décompression */
|
||||
#if HTS_USEZLIB
|
||||
@@ -526,7 +528,7 @@ int back_finalize(httrackp * opt, cache_back * cache, struct_back * sback,
|
||||
if (!back[p].r.is_write) {
|
||||
// do not use tempnam() but a regular filename
|
||||
if (create_back_tmpfile(opt, &back[p]) == 0) {
|
||||
assert(back[p].tmpfile != NULL);
|
||||
assertf(back[p].tmpfile != NULL);
|
||||
/* note: tmpfile is utf-8 */
|
||||
back[p].r.out = FOPEN(back[p].tmpfile, "wb");
|
||||
if (back[p].r.out) {
|
||||
@@ -624,7 +626,7 @@ int back_finalize(httrackp * opt, cache_back * cache, struct_back * sback,
|
||||
FILE *fp = FOPEN(back[p].url_sav, "rb");
|
||||
|
||||
if (fp) {
|
||||
back[p].r.adr = malloct((int) sz + 2);
|
||||
back[p].r.adr = malloct((size_t) sz + 1);
|
||||
if (back[p].r.adr) {
|
||||
if (fread(back[p].r.adr, 1, sz, fp) == sz) {
|
||||
back[p].r.size = sz;
|
||||
@@ -640,7 +642,7 @@ int back_finalize(httrackp * opt, cache_back * cache, struct_back * sback,
|
||||
fclose(fp);
|
||||
fp = NULL;
|
||||
// remove (temporary) file!
|
||||
UNLINK(fconv(catbuff, back[p].url_sav));
|
||||
UNLINK(fconv(catbuff, sizeof(catbuff), back[p].url_sav));
|
||||
}
|
||||
if (fp)
|
||||
fclose(fp);
|
||||
@@ -664,7 +666,7 @@ int back_finalize(httrackp * opt, cache_back * cache, struct_back * sback,
|
||||
if (A == NULL) {
|
||||
int localtime_returned_null = 0;
|
||||
|
||||
assert(localtime_returned_null);
|
||||
assertf(localtime_returned_null);
|
||||
}
|
||||
strftime(s, 250, "%H:%M:%S", A);
|
||||
|
||||
@@ -765,27 +767,27 @@ int back_finalize(httrackp * opt, cache_back * cache, struct_back * sback,
|
||||
}
|
||||
}
|
||||
if (cache->txt) {
|
||||
#undef ESC_URL
|
||||
#define ESC_URL(S) escape_check_url_addr(S, OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt))
|
||||
fprintf(cache->txt,
|
||||
"%d\t" "%s ('%s')\t" "%s\t" "%s%s\t" "%s%s%s\t%s\t"
|
||||
"(from %s%s%s)" LF, back[p].r.statuscode, state,
|
||||
escape_check_url_addr(OPT_GET_BUFF(opt), back[p].r.msg),
|
||||
escape_check_url_addr(OPT_GET_BUFF(opt),
|
||||
back[p].r.contenttype),
|
||||
((back[p].r.
|
||||
etag[0]) ? "etag:" : ((back[p].r.
|
||||
ESC_URL(back[p].r.msg),
|
||||
ESC_URL(back[p].r.contenttype),
|
||||
((back[p].r.etag[0]) ? "etag:" : ((back[p].r.
|
||||
lastmodified[0]) ? "date:" : "")),
|
||||
escape_check_url_addr(OPT_GET_BUFF(opt),
|
||||
(back[p].r.etag[0]) ? back[p].r.
|
||||
ESC_URL((back[p].r.etag[0]) ? back[p].r.
|
||||
etag : (back[p].r.lastmodified)),
|
||||
(link_has_authority(back[p].url_adr) ? "" : "http://"),
|
||||
escape_check_url_addr(OPT_GET_BUFF(opt), back[p].url_adr),
|
||||
escape_check_url_addr(OPT_GET_BUFF(opt), back[p].url_fil),
|
||||
escape_check_url_addr(OPT_GET_BUFF(opt), back[p].url_sav),
|
||||
ESC_URL(back[p].url_adr),
|
||||
ESC_URL(back[p].url_fil),
|
||||
ESC_URL(back[p].url_sav),
|
||||
(link_has_authority(back[p].referer_adr)
|
||||
|| !back[p].referer_adr[0]) ? "" : "http://",
|
||||
escape_check_url_addr(OPT_GET_BUFF(opt), back[p].referer_adr),
|
||||
escape_check_url_addr(OPT_GET_BUFF(opt), back[p].referer_fil)
|
||||
ESC_URL(back[p].referer_adr),
|
||||
ESC_URL(back[p].referer_fil)
|
||||
);
|
||||
#undef ESC_URL
|
||||
if (opt->flush)
|
||||
fflush(cache->txt);
|
||||
}
|
||||
@@ -969,27 +971,28 @@ int back_unserialize(FILE * fp, lien_back ** dst) {
|
||||
if ((*dst)->r.adr != NULL)
|
||||
freet((*dst)->r.adr);
|
||||
}
|
||||
if (dst != NULL)
|
||||
freet(dst);
|
||||
*dst = NULL;
|
||||
if (dst != NULL) {
|
||||
freet(*dst);
|
||||
*dst = NULL;
|
||||
}
|
||||
return 1; /* error */
|
||||
}
|
||||
|
||||
/* serialize a reference ; used to store references of files being downloaded in case of broken download */
|
||||
/* Note: NOT utf-8 */
|
||||
int back_serialize_ref(httrackp * opt, const lien_back * src) {
|
||||
char *filename =
|
||||
const char *filename =
|
||||
url_savename_refname_fullpath(opt, src->url_adr, src->url_fil);
|
||||
FILE *fp = fopen(filename, "wb");
|
||||
|
||||
if (fp == NULL) {
|
||||
#ifdef _WIN32
|
||||
if (mkdir
|
||||
(fconcat(OPT_GET_BUFF(opt), StringBuff(opt->path_log), CACHE_REFNAME))
|
||||
(fconcat(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log), CACHE_REFNAME))
|
||||
== 0)
|
||||
#else
|
||||
if (mkdir
|
||||
(fconcat(OPT_GET_BUFF(opt), StringBuff(opt->path_log), CACHE_REFNAME),
|
||||
(fconcat(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log), CACHE_REFNAME),
|
||||
S_IRWXU | S_IRWXG | S_IRWXO) == 0)
|
||||
#endif
|
||||
{
|
||||
@@ -1010,7 +1013,7 @@ int back_serialize_ref(httrackp * opt, const lien_back * src) {
|
||||
/* unserialize a reference ; used to store references of files being downloaded in case of broken download */
|
||||
int back_unserialize_ref(httrackp * opt, const char *adr, const char *fil,
|
||||
lien_back ** dst) {
|
||||
char *filename = url_savename_refname_fullpath(opt, adr, fil);
|
||||
const char *filename = url_savename_refname_fullpath(opt, adr, fil);
|
||||
FILE *fp = FOPEN(filename, "rb");
|
||||
|
||||
if (fp != NULL) {
|
||||
@@ -1058,7 +1061,7 @@ int back_maydelete(httrackp * opt, cache_back * cache, struct_back * sback,
|
||||
strcpybuff(back[p].url_adr, tmp.url_adr);
|
||||
back[p].ka_time_start = tmp.ka_time_start;
|
||||
back[p].status = STATUS_ALIVE; // alive & waiting
|
||||
assert(back[p].ka_time_start != 0);
|
||||
assertf(back[p].ka_time_start != 0);
|
||||
hts_log_print(opt, LOG_DEBUG,
|
||||
"(Keep-Alive): successfully saved #%d (%s)",
|
||||
back[p].r.debugid, back[p].url_adr);
|
||||
@@ -1112,7 +1115,7 @@ void back_maydeletehttp(httrackp * opt, cache_back * cache, struct_back * sback,
|
||||
strcpybuff(back[q].url_adr, tmp.url_adr); // address
|
||||
back[q].ka_time_start = tmp.ka_time_start;
|
||||
back[q].status = STATUS_ALIVE; // alive & waiting
|
||||
assert(back[q].ka_time_start != 0);
|
||||
assertf(back[q].ka_time_start != 0);
|
||||
hts_log_print(opt, LOG_DEBUG,
|
||||
"(Keep-Alive): successfully preserved #%d (%s)",
|
||||
back[q].r.debugid, back[q].url_adr);
|
||||
@@ -1146,7 +1149,7 @@ int back_trylive(httrackp * opt, cache_back * cache, struct_back * sback,
|
||||
}
|
||||
|
||||
/* search for a live position, or, if not possible, try to return a new one */
|
||||
int back_searchlive(httrackp * opt, struct_back * sback, char *search_addr) {
|
||||
int back_searchlive(httrackp * opt, struct_back * sback, const char *search_addr) {
|
||||
lien_back *const back = sback->lnk;
|
||||
const int back_max = sback->count;
|
||||
int i;
|
||||
@@ -1398,8 +1401,8 @@ int back_stack_available(struct_back * sback) {
|
||||
|
||||
// ajouter un lien en backing
|
||||
int back_add_if_not_exists(struct_back * sback, httrackp * opt,
|
||||
cache_back * cache, char *adr, char *fil, char *save,
|
||||
char *referer_adr, char *referer_fil, int test) {
|
||||
cache_back * cache, const char *adr, const char *fil, const char *save,
|
||||
const char *referer_adr, const char *referer_fil, int test) {
|
||||
back_clean(opt, cache, sback); /* first cleanup the backlog to ensure that we have some entry left */
|
||||
if (!back_exist(sback, opt, adr, fil, save)) {
|
||||
return back_add(sback, opt, cache, adr, fil, save, referer_adr, referer_fil,
|
||||
@@ -1408,8 +1411,8 @@ int back_add_if_not_exists(struct_back * sback, httrackp * opt,
|
||||
return 0;
|
||||
}
|
||||
|
||||
int back_add(struct_back * sback, httrackp * opt, cache_back * cache, char *adr,
|
||||
char *fil, char *save, char *referer_adr, char *referer_fil,
|
||||
int back_add(struct_back * sback, httrackp * opt, cache_back * cache, const char *adr,
|
||||
const char *fil, const char *save, const char *referer_adr, const char *referer_fil,
|
||||
int test) {
|
||||
lien_back *const back = sback->lnk;
|
||||
const int back_max = sback->count;
|
||||
@@ -1504,7 +1507,8 @@ int back_add(struct_back * sback, httrackp * opt, cache_back * cache, char *adr,
|
||||
if (cache->cached_tests != NULL) {
|
||||
intptr_t ptr = 0;
|
||||
|
||||
if (inthash_read(cache->cached_tests, concat(OPT_GET_BUFF(opt), adr, fil), &ptr)) { // gotcha
|
||||
if (coucal_read(cache->cached_tests,
|
||||
concat(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), adr, fil), &ptr)) { // gotcha
|
||||
if (ptr != 0) {
|
||||
char *text = (char *) ptr;
|
||||
char *lf = strchr(text, '\n');
|
||||
@@ -1541,7 +1545,7 @@ int back_add(struct_back * sback, httrackp * opt, cache_back * cache, char *adr,
|
||||
#if HTS_FAST_CACHE
|
||||
strcpybuff(buff, adr);
|
||||
strcatbuff(buff, fil);
|
||||
hash_pos_return = inthash_read(cache->hashtable, buff, &hash_pos);
|
||||
hash_pos_return = coucal_read(cache->hashtable, buff, &hash_pos);
|
||||
#else
|
||||
buff[0] = '\0';
|
||||
strcatbuff(buff, "\n");
|
||||
@@ -1571,7 +1575,7 @@ int back_add(struct_back * sback, httrackp * opt, cache_back * cache, char *adr,
|
||||
if (pos < 0) { // pas de mise en cache data, vérifier existence
|
||||
#endif
|
||||
/* note: no check with IS_DELAYED_EXT() enabled - postcheck by client please! */
|
||||
if (save[0] != '\0' && !IS_DELAYED_EXT(save) && fsize_utf8(fconv(catbuff, save)) <= 0) { // fichier final n'existe pas ou est vide!
|
||||
if (save[0] != '\0' && !IS_DELAYED_EXT(save) && fsize_utf8(fconv(catbuff, sizeof(catbuff), save)) <= 0) { // fichier final n'existe pas ou est vide!
|
||||
int found = 0;
|
||||
|
||||
/* It is possible that the file has been moved due to changes in build structure */
|
||||
@@ -1589,10 +1593,10 @@ int back_add(struct_back * sback, httrackp * opt, cache_back * cache, char *adr,
|
||||
if (r.is_write && previous_save[0] != '\0') {
|
||||
/* Exists, but with another (old) filename: rename (almost) silently */
|
||||
if (strcmp(previous_save, save) != 0
|
||||
&& fexist_utf8(fconv(catbuff, previous_save))) {
|
||||
rename(fconv(catbuff, previous_save),
|
||||
fconv(catbuff2, save));
|
||||
if (fexist_utf8(fconv(catbuff, save))) {
|
||||
&& fexist_utf8(fconv(catbuff, sizeof(catbuff), previous_save))) {
|
||||
rename(fconv(catbuff, sizeof(catbuff), previous_save),
|
||||
fconv(catbuff2, sizeof(catbuff2), save));
|
||||
if (fexist_utf8(fconv(catbuff, sizeof(catbuff), save))) {
|
||||
found = 1;
|
||||
hts_log_print(opt, LOG_DEBUG,
|
||||
"File '%s' has been renamed since last mirror to '%s' ; applying changes",
|
||||
@@ -1618,8 +1622,8 @@ int back_add(struct_back * sback, httrackp * opt, cache_back * cache, char *adr,
|
||||
// sinon, le fichier est ok à priori, mais on renverra un if-modified-since pour
|
||||
// en être sûr
|
||||
if (opt->norecatch) { // tester norecatch
|
||||
if (!fexist_utf8(fconv(catbuff, save))) { // fichier existe pas mais déclaré: on l'a effacé
|
||||
FILE *fp = FOPEN(fconv(catbuff, save), "wb");
|
||||
if (!fexist_utf8(fconv(catbuff, sizeof(catbuff), save))) { // fichier existe pas mais déclaré: on l'a effacé
|
||||
FILE *fp = FOPEN(fconv(catbuff, sizeof(catbuff), save), "wb");
|
||||
|
||||
if (fp)
|
||||
fclose(fp);
|
||||
@@ -1971,7 +1975,7 @@ int back_add(struct_back * sback, httrackp * opt, cache_back * cache, char *adr,
|
||||
printf("ok, dns cache ready..\n");
|
||||
#endif
|
||||
soc =
|
||||
http_xfopen(opt, 0, 0, 0, back[p].send_too, adr, fil, &(back[p].r));
|
||||
http_xfopen(opt, 0, 0, 0, back[p].send_too, adr, fil, &back[p].r);
|
||||
if (soc == INVALID_SOCKET) {
|
||||
back[p].status = STATUS_READY; // fini, erreur
|
||||
back_set_finished(sback, p);
|
||||
@@ -2128,7 +2132,7 @@ void back_solve(httrackp * opt, lien_back * back) {
|
||||
else
|
||||
a = back->r.req.proxy.name;
|
||||
assertf(a != NULL);
|
||||
a = jump_protocol(a);
|
||||
a = jump_protocol_const(a);
|
||||
if (check_hostname_dns(a)) {
|
||||
hts_log_print(opt, LOG_DEBUG, "resolved: %s", a);
|
||||
} else {
|
||||
@@ -2260,7 +2264,7 @@ void back_clean(httrackp * opt, cache_back * cache, struct_back * sback) {
|
||||
} else if (back[i].r.keep_alive_max < 1) {
|
||||
reason = "keep-alive-max reached";
|
||||
} else if (time_local() >= back[i].ka_time_start + back[i].r.keep_alive_t) {
|
||||
assert(back[i].ka_time_start != 0);
|
||||
assertf(back[i].ka_time_start != 0);
|
||||
snprintf(buffer, sizeof(buffer), "keep-alive timeout = %ds)",
|
||||
(int) back[i].r.keep_alive_t);
|
||||
reason = buffer;
|
||||
@@ -2455,7 +2459,7 @@ void back_wait(struct_back * sback, httrackp * opt, cache_back * cache,
|
||||
#if HTS_WIDE_DEBUG
|
||||
DEBUG_W("select\n");
|
||||
#endif
|
||||
select(nfds, &fds, &fds_c, &fds_e, &tv);
|
||||
select((int) nfds, &fds, &fds_c, &fds_e, &tv);
|
||||
#if HTS_WIDE_DEBUG
|
||||
DEBUG_W("select done\n");
|
||||
#endif
|
||||
@@ -2533,7 +2537,7 @@ void back_wait(struct_back * sback, httrackp * opt, cache_back * cache,
|
||||
back[i].r.ssl_con = SSL_new(openssl_ctx);
|
||||
if (back[i].r.ssl_con) {
|
||||
SSL_clear(back[i].r.ssl_con);
|
||||
if (SSL_set_fd(back[i].r.ssl_con, back[i].r.soc) == 1) {
|
||||
if (SSL_set_fd(back[i].r.ssl_con, (int) back[i].r.soc) == 1) {
|
||||
SSL_set_connect_state(back[i].r.ssl_con);
|
||||
back[i].status = STATUS_SSL_WAIT_HANDSHAKE; /* handshake wait */
|
||||
} else
|
||||
@@ -2777,11 +2781,11 @@ void back_wait(struct_back * sback, httrackp * opt, cache_back * cache,
|
||||
back[i].r.is_write = 1; // écrire
|
||||
if (back[i].r.compressed &&
|
||||
/* .gz are *NOT* depacked!! */
|
||||
(strfield
|
||||
(get_ext(catbuff, back[i].url_sav), "gz") == 0)
|
||||
strfield(get_ext(catbuff, sizeof(catbuff), back[i].url_sav), "gz") == 0
|
||||
&& strfield(get_ext(catbuff, sizeof(catbuff), back[i].url_sav), "tgz") == 0
|
||||
) {
|
||||
if (create_back_tmpfile(opt, &back[i]) == 0) {
|
||||
assert(back[i].tmpfile != NULL);
|
||||
assertf(back[i].tmpfile != NULL);
|
||||
/* note: tmpfile is utf-8 */
|
||||
if ((back[i].r.out =
|
||||
FOPEN(back[i].tmpfile, "wb")) == NULL) {
|
||||
@@ -3237,7 +3241,7 @@ void back_wait(struct_back * sback, httrackp * opt, cache_back * cache,
|
||||
fprintf(ioinfo,
|
||||
"[%d] response for %s%s:\r\ncode=%d\r\n",
|
||||
back[i].r.debugid,
|
||||
jump_identification(back[i].url_adr),
|
||||
jump_identification_const(back[i].url_adr),
|
||||
back[i].url_fil, back[i].r.statuscode);
|
||||
fprintfio(ioinfo, back[i].r.adr, ">>> ");
|
||||
fprintf(ioinfo, "\r\n");
|
||||
@@ -3656,7 +3660,7 @@ void back_wait(struct_back * sback, httrackp * opt, cache_back * cache,
|
||||
file_notify(opt, back[i].url_adr, back[i].url_fil,
|
||||
back[i].url_sav, 0, 1,
|
||||
back[i].r.notmodified);
|
||||
back[i].r.out = FOPEN(fconv(catbuff, back[i].url_sav), "ab"); // append
|
||||
back[i].r.out = FOPEN(fconv(catbuff, sizeof(catbuff), back[i].url_sav), "ab"); // append
|
||||
if (back[i].r.out && opt->cache != 0) {
|
||||
back[i].r.is_write = 1; // écrire
|
||||
back[i].r.size = sz; // déja écrit
|
||||
@@ -3682,7 +3686,7 @@ void back_wait(struct_back * sback, httrackp * opt, cache_back * cache,
|
||||
}
|
||||
} else { // mémoire
|
||||
FILE *fp =
|
||||
FOPEN(fconv(catbuff, back[i].url_sav), "rb");
|
||||
FOPEN(fconv(catbuff, sizeof(catbuff), back[i].url_sav), "rb");
|
||||
if (fp) {
|
||||
LLint alloc_mem = sz + 1;
|
||||
|
||||
@@ -3975,10 +3979,10 @@ LLint back_transferred(LLint nb, struct_back * sback) {
|
||||
#ifndef HTS_NO_BACK_ON_DISK
|
||||
nb += sback->ready_size_bytes;
|
||||
#else
|
||||
struct_inthash_enum e = inthash_enum_new(sback->ready);
|
||||
inthash_chain *item;
|
||||
struct_coucal_enum e = coucal_enum_new(sback->ready);
|
||||
coucal_item *item;
|
||||
|
||||
while((item = inthash_enum_next(&e))) {
|
||||
while((item = coucal_enum_next(&e))) {
|
||||
lien_back *ritem = (lien_back *) item->value.ptr;
|
||||
|
||||
if ((ritem->status > 0) && (ritem->status < 99 || ritem->status >= 1000))
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/* ------------------------------------------------------------ */
|
||||
/*
|
||||
HTTrack Website Copier, Offline Browser for Windows and Unix
|
||||
Copyright (C) 1998-2013 Xavier Roche and other contributors
|
||||
Copyright (C) 1998-2014 Xavier Roche and other contributors
|
||||
|
||||
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
|
||||
@@ -68,27 +68,27 @@ typedef struct htsblk htsblk;
|
||||
#ifdef HTS_INTERNAL_BYTECODE
|
||||
|
||||
// create/destroy
|
||||
struct_back *back_new(int back_max);
|
||||
struct_back *back_new(httrackp *opt, int back_max);
|
||||
void back_free(struct_back ** sback);
|
||||
|
||||
// backing
|
||||
#define BACK_ADD_TEST "(dummy)"
|
||||
#define BACK_ADD_TEST2 "(dummy2)"
|
||||
int back_index(httrackp * opt, struct_back * sback, char *adr, char *fil,
|
||||
char *sav);
|
||||
int back_available(struct_back * sback);
|
||||
LLint back_incache(struct_back * sback);
|
||||
int back_done_incache(struct_back * sback);
|
||||
HTS_INLINE int back_exist(struct_back * sback, httrackp * opt, char *adr,
|
||||
char *fil, char *sav);
|
||||
int back_nsoc(struct_back * sback);
|
||||
int back_nsoc_overall(struct_back * sback);
|
||||
int back_add(struct_back * sback, httrackp * opt, cache_back * cache, char *adr,
|
||||
char *fil, char *save, char *referer_adr, char *referer_fil,
|
||||
int back_index(httrackp * opt, struct_back * sback, const char *adr, const char *fil,
|
||||
const char *sav);
|
||||
int back_available(const struct_back * sback);
|
||||
LLint back_incache(const struct_back * sback);
|
||||
int back_done_incache(const struct_back * sback);
|
||||
HTS_INLINE int back_exist(struct_back * sback, httrackp * opt, const char *adr,
|
||||
const char *fil, const char *sav);
|
||||
int back_nsoc(const struct_back * sback);
|
||||
int back_nsoc_overall(const struct_back * sback);
|
||||
int back_add(struct_back * sback, httrackp * opt, cache_back * cache, const char *adr,
|
||||
const char *fil, const char *save, const char *referer_adr, const char *referer_fil,
|
||||
int test);
|
||||
int back_add_if_not_exists(struct_back * sback, httrackp * opt,
|
||||
cache_back * cache, char *adr, char *fil, char *save,
|
||||
char *referer_adr, char *referer_fil, int test);
|
||||
cache_back * cache, const char *adr, const char *fil, const char *save,
|
||||
const char *referer_adr, const char *referer_fil, int test);
|
||||
int back_stack_available(struct_back * sback);
|
||||
int back_search(httrackp * opt, struct_back * sback);
|
||||
int back_search_quick(struct_back * sback);
|
||||
@@ -99,7 +99,7 @@ void back_wait(struct_back * sback, httrackp * opt, cache_back * cache,
|
||||
TStamp stat_timestart);
|
||||
int back_letlive(httrackp * opt, cache_back * cache, struct_back * sback,
|
||||
const int p);
|
||||
int back_searchlive(httrackp * opt, struct_back * sback, char *search_addr);
|
||||
int back_searchlive(httrackp * opt, struct_back * sback, const char *search_addr);
|
||||
void back_connxfr(htsblk * src, htsblk * dst);
|
||||
void back_move(lien_back * src, lien_back * dst);
|
||||
void back_copy_static(const lien_back * src, lien_back * dst);
|
||||
|
||||
227
src/htsbase.h
227
src/htsbase.h
@@ -1,7 +1,7 @@
|
||||
/* ------------------------------------------------------------ */
|
||||
/*
|
||||
HTTrack Website Copier, Offline Browser for Windows and Unix
|
||||
Copyright (C) 1998-2013 Xavier Roche and other contributors
|
||||
Copyright (C) 1998-2014 Xavier Roche and other contributors
|
||||
|
||||
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
|
||||
@@ -40,6 +40,7 @@ extern "C" {
|
||||
|
||||
#include "htsglobal.h"
|
||||
#include "htsstrings.h"
|
||||
#include "htssafe.h"
|
||||
|
||||
#include <string.h>
|
||||
#include <time.h>
|
||||
@@ -106,230 +107,6 @@ extern "C" {
|
||||
#define DynamicGet(handle, sym) dlsym(handle, sym)
|
||||
#endif
|
||||
|
||||
// emergency log
|
||||
typedef void (*t_abortLog) (char *msg, char *file, int line);
|
||||
extern HTSEXT_API t_abortLog abortLog__;
|
||||
#define abortLog(a) abortLog__(a, __FILE__, __LINE__)
|
||||
#define _ ,
|
||||
#define abortLogFmt(a) do { \
|
||||
FILE* fp = fopen("CRASH.TXT", "wb"); \
|
||||
if (!fp) fp = fopen("/tmp/CRASH.TXT", "wb"); \
|
||||
if (!fp) fp = fopen("C:\\CRASH.TXT", "wb"); \
|
||||
if (!fp) fp = fopen("\\Temp\\CRASH.TXT", "wb"); \
|
||||
if (!fp) fp = fopen("\\CRASH.TXT", "wb"); \
|
||||
if (!fp) fp = fopen("CRASH.TXT", "wb"); \
|
||||
if (fp) { \
|
||||
fprintf(fp, "HTTrack " HTTRACK_VERSIONID " closed at '" __FILE__ "', line %d\r\n", __LINE__); \
|
||||
fprintf(fp, "Reason:\r\n"); \
|
||||
fprintf(fp, a); \
|
||||
fprintf(fp, "\r\n"); \
|
||||
fflush(fp); \
|
||||
fclose(fp); \
|
||||
} \
|
||||
} while(0)
|
||||
|
||||
#define assertf(exp) do { \
|
||||
if (! ( exp ) ) { \
|
||||
abortLog("assert failed: " #exp); \
|
||||
if (htsCallbackErr != NULL) { \
|
||||
htsCallbackErr("assert failed: " #exp, __FILE__ , __LINE__ ); \
|
||||
} \
|
||||
abort(); \
|
||||
} \
|
||||
} while(0)
|
||||
/* non-fatal assert */
|
||||
#define assertnf(exp) do { \
|
||||
if (! ( exp ) ) { \
|
||||
abortLog("assert failed: " #exp); \
|
||||
if (htsCallbackErr != NULL) { \
|
||||
htsCallbackErr("assert failed: " #exp, __FILE__ , __LINE__ ); \
|
||||
} \
|
||||
} \
|
||||
} while(0)
|
||||
|
||||
/* regular malloc's() */
|
||||
#ifndef HTS_TRACE_MALLOC
|
||||
#define malloct(A) malloc(A)
|
||||
#define calloct(A,B) calloc((A), (B))
|
||||
#define freet(A) do { assertnf((A) != NULL); if ((A) != NULL) { free(A); (A) = NULL; } } while(0)
|
||||
#define strdupt(A) strdup(A)
|
||||
#define realloct(A,B) ( ((A) != NULL) ? realloc((A), (B)) : malloc(B) )
|
||||
#define memcpybuff(A, B, N) memcpy((A), (B), (N))
|
||||
#else
|
||||
/* debug version */
|
||||
#define malloct(A) hts_malloc(A)
|
||||
#define calloct(A,B) hts_calloc(A,B)
|
||||
#define strdupt(A) hts_strdup(A)
|
||||
#define freet(A) do { hts_free(A); (A) = NULL; } while(0)
|
||||
#define realloct(A,B) hts_realloc(A,B)
|
||||
void hts_freeall();
|
||||
void *hts_malloc(size_t);
|
||||
void *hts_calloc(size_t, size_t);
|
||||
char *hts_strdup(char *);
|
||||
void *hts_xmalloc(size_t, size_t);
|
||||
void hts_free(void *);
|
||||
void *hts_realloc(void *, size_t);
|
||||
mlink *hts_find(char *adr);
|
||||
/* protected memcpy */
|
||||
#define memcpybuff(A, B, N) do { \
|
||||
mlink* lnk = hts_find((void*)(A)); \
|
||||
if (lnk != NULL) { \
|
||||
assertf(lnk != NULL); \
|
||||
assertf( * ( (t_htsboundary*) ( ((char*) lnk->adr) - sizeof(htsboundary) ) ) == htsboundary ); \
|
||||
assertf( * ( (t_htsboundary*) ( ((char*) lnk->adr) + lnk->len ) ) == htsboundary ); \
|
||||
assertf( ( ((char*)(A)) + (N)) < (char*) (lnk->adr + lnk->len) ); \
|
||||
} \
|
||||
memcpy(A, B, N); \
|
||||
} while(0)
|
||||
|
||||
#endif
|
||||
|
||||
typedef void (*htsErrorCallback) (char *msg, char *file, int line);
|
||||
extern HTSEXT_API htsErrorCallback htsCallbackErr;
|
||||
extern HTSEXT_API int htsMemoryFastXfr;
|
||||
|
||||
/*
|
||||
*/
|
||||
|
||||
#define stringdup()
|
||||
|
||||
#ifdef STRDEBUG
|
||||
|
||||
/* protected strcat, strncat and strcpy - definitely useful */
|
||||
#define strcatbuff(A, B) do { \
|
||||
assertf( (A) != NULL ); \
|
||||
assertf( (B) != NULL ); \
|
||||
if (htsMemoryFastXfr) { \
|
||||
if (sizeof(A) != sizeof(char*)) { \
|
||||
(A)[sizeof(A) - 1] = '\0'; \
|
||||
} \
|
||||
strcat(A, B); \
|
||||
if (sizeof(A) != sizeof(char*)) { \
|
||||
assertf((A)[sizeof(A) - 1] == '\0'); \
|
||||
} \
|
||||
} else { \
|
||||
unsigned int sz = (unsigned int) strlen(A); \
|
||||
unsigned int szf = (unsigned int) strlen(B); \
|
||||
if (sizeof(A) != sizeof(char*)) { \
|
||||
assertf(sz + szf + 1 < sizeof(A)); \
|
||||
if (szf > 0) { \
|
||||
if (sz + szf + 1 < sizeof(A)) { \
|
||||
memcpy((A) + sz, (B), szf + 1); \
|
||||
} \
|
||||
} \
|
||||
} else if (szf > 0) { \
|
||||
memcpybuff((A) + sz, (B), szf + 1); \
|
||||
} \
|
||||
} \
|
||||
} while(0)
|
||||
#define strncatbuff(A, B, N) do { \
|
||||
assertf( (A) != NULL ); \
|
||||
assertf( (B) != NULL ); \
|
||||
if (htsMemoryFastXfr) { \
|
||||
if (sizeof(A) != sizeof(char*)) { \
|
||||
(A)[sizeof(A) - 1] = '\0'; \
|
||||
} \
|
||||
strncat(A, B, N); \
|
||||
if (sizeof(A) != sizeof(char*)) { \
|
||||
assertf((A)[sizeof(A) - 1] == '\0'); \
|
||||
} \
|
||||
} else { \
|
||||
unsigned int sz = (unsigned int) strlen(A); \
|
||||
unsigned int szf = (unsigned int) strlen(B); \
|
||||
if (szf > (unsigned int) (N)) szf = (unsigned int) (N); \
|
||||
if (sizeof(A) != sizeof(char*)) { \
|
||||
assertf(sz + szf + 1 < sizeof(A)); \
|
||||
if (szf > 0) { \
|
||||
if (sz + szf + 1 < sizeof(A)) { \
|
||||
memcpy((A) + sz, (B), szf); \
|
||||
* ( (A) + sz + szf) = '\0'; \
|
||||
} \
|
||||
} \
|
||||
} else if (szf > 0) { \
|
||||
memcpybuff((A) + sz, (B), szf); \
|
||||
* ( (A) + sz + szf) = '\0'; \
|
||||
} \
|
||||
} \
|
||||
} while(0)
|
||||
#define strcpybuff(A, B) do { \
|
||||
assertf( (A) != NULL ); \
|
||||
assertf( (const char*) (B) != NULL ); \
|
||||
if (htsMemoryFastXfr) { \
|
||||
if (sizeof(A) != sizeof(char*)) { \
|
||||
(A)[sizeof(A) - 1] = '\0'; \
|
||||
} \
|
||||
strcpy(A, B); \
|
||||
if (sizeof(A) != sizeof(char*)) { \
|
||||
assertf((A)[sizeof(A) - 1] == '\0'); \
|
||||
} \
|
||||
} else { \
|
||||
unsigned int szf = (unsigned int) strlen(B); \
|
||||
if (sizeof(A) != sizeof(char*)) { \
|
||||
assertf(szf + 1 < sizeof(A)); \
|
||||
if (szf > 0) { \
|
||||
if (szf + 1 < sizeof(A)) { \
|
||||
memcpy((A), (B), szf + 1); \
|
||||
} else { \
|
||||
* (A) = '\0'; \
|
||||
} \
|
||||
} else { \
|
||||
* (A) = '\0'; \
|
||||
} \
|
||||
} else { \
|
||||
memcpybuff((A), (B), szf + 1); \
|
||||
} \
|
||||
} \
|
||||
} while(0)
|
||||
|
||||
#else
|
||||
|
||||
#ifdef STRDEBUGFAST
|
||||
|
||||
/* protected strcat, strncat and strcpy - definitely useful */
|
||||
#define strcatbuff(A, B) do { \
|
||||
assertf( (A) != NULL ); \
|
||||
assertf( (B) != NULL ); \
|
||||
if (sizeof(A) != sizeof(char*)) { \
|
||||
(A)[sizeof(A) - 1] = '\0'; \
|
||||
} \
|
||||
strcat(A, B); \
|
||||
if (sizeof(A) != sizeof(char*)) { \
|
||||
assertf((A)[sizeof(A) - 1] == '\0'); \
|
||||
} \
|
||||
} while(0)
|
||||
#define strncatbuff(A, B, N) do { \
|
||||
assertf( (A) != NULL ); \
|
||||
assertf( (B) != NULL ); \
|
||||
if (sizeof(A) != sizeof(char*)) { \
|
||||
(A)[sizeof(A) - 1] = '\0'; \
|
||||
} \
|
||||
strncat(A, B, N); \
|
||||
if (sizeof(A) != sizeof(char*)) { \
|
||||
assertf((A)[sizeof(A) - 1] == '\0'); \
|
||||
} \
|
||||
} while(0)
|
||||
#define strcpybuff(A, B) do { \
|
||||
assertf( (A) != NULL ); \
|
||||
assertf( (B) != NULL ); \
|
||||
if (sizeof(A) != sizeof(char*)) { \
|
||||
(A)[sizeof(A) - 1] = '\0'; \
|
||||
} \
|
||||
strcpy(A, B); \
|
||||
if (sizeof(A) != sizeof(char*)) { \
|
||||
assertf((A)[sizeof(A) - 1] == '\0'); \
|
||||
} \
|
||||
} while(0)
|
||||
|
||||
#else
|
||||
|
||||
#define strcatbuff strcat
|
||||
#define strncatbuff strncat
|
||||
#define strcpybuff strcpy
|
||||
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/* ------------------------------------------------------------ */
|
||||
/*
|
||||
HTTrack Website Copier, Offline Browser for Windows and Unix
|
||||
Copyright (C) 1998-2013 Xavier Roche and other contributors
|
||||
Copyright (C) 1998-2014 Xavier Roche and other contributors
|
||||
|
||||
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
|
||||
@@ -54,12 +54,13 @@ Please visit our Website: http://www.httrack.com
|
||||
|
||||
#endif
|
||||
|
||||
typedef struct hostent FAR t_hostent;
|
||||
|
||||
#else
|
||||
#define HTS_USESCOPEID
|
||||
#define INVALID_SOCKET -1
|
||||
typedef struct hostent t_hostent;
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#if HTS_USEOPENSSL
|
||||
@@ -157,4 +158,8 @@ typedef enum HTTrackStatus {
|
||||
STATUS_FTP_READY = 1001
|
||||
} HTTrackStatus;
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
HTTrack Website Copier, Offline Browser for Windows and Unix
|
||||
Copyright (C) 1998-2013 Xavier Roche and other contributors
|
||||
Copyright (C) 1998-2014 Xavier Roche and other contributors
|
||||
|
||||
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
|
||||
@@ -38,14 +38,15 @@ Please visit our Website: http://www.httrack.com
|
||||
/* specific definitions */
|
||||
#include "htsglobal.h"
|
||||
#include "htslib.h"
|
||||
#include "htscore.h"
|
||||
|
||||
/* END specific definitions */
|
||||
|
||||
// gestion des cookie
|
||||
// ajoute, dans l'ordre
|
||||
// !=0 : erreur
|
||||
int cookie_add(t_cookie * cookie, char *cook_name, char *cook_value,
|
||||
char *domain, char *path) {
|
||||
int cookie_add(t_cookie * cookie, const char *cook_name, const char *cook_value,
|
||||
const char *domain, const char *path) {
|
||||
char buffer[8192];
|
||||
char *a = cookie->data;
|
||||
char *insert;
|
||||
@@ -53,20 +54,20 @@ int cookie_add(t_cookie * cookie, char *cook_name, char *cook_value,
|
||||
|
||||
// effacer éventuel cookie en double
|
||||
cookie_del(cookie, cook_name, domain, path);
|
||||
if ((int) strlen(cook_value) > 1024)
|
||||
if (strlen(cook_value) > 1024)
|
||||
return -1; // trop long
|
||||
if ((int) strlen(cook_name) > 256)
|
||||
if (strlen(cook_name) > 256)
|
||||
return -1; // trop long
|
||||
if ((int) strlen(domain) > 256)
|
||||
if (strlen(domain) > 256)
|
||||
return -1; // trop long
|
||||
if ((int) strlen(path) > 256)
|
||||
if (strlen(path) > 256)
|
||||
return -1; // trop long
|
||||
if ((int) (strlen(cookie->data)
|
||||
if (strlen(cookie->data)
|
||||
+ strlen(cook_value)
|
||||
+ strlen(cook_name)
|
||||
+ strlen(domain)
|
||||
+ strlen(path)
|
||||
+ 256) > cookie->max_len)
|
||||
+ 256 > cookie->max_len)
|
||||
return -1; // impossible d'ajouter
|
||||
|
||||
insert = a; // insérer ici
|
||||
@@ -99,7 +100,7 @@ int cookie_add(t_cookie * cookie, char *cook_name, char *cook_value,
|
||||
strcatbuff(cook, "\t");
|
||||
strcatbuff(cook, cook_value);
|
||||
strcatbuff(cook, "\n");
|
||||
if (!(((int) strlen(cookie->data) + (int) strlen(cook)) < cookie->max_len))
|
||||
if (!((strlen(cookie->data) + strlen(cook)) < cookie->max_len))
|
||||
return -1; // impossible d'ajouter
|
||||
cookie_insert(insert, cook);
|
||||
#if DEBUG_COOK
|
||||
@@ -111,13 +112,13 @@ int cookie_add(t_cookie * cookie, char *cook_name, char *cook_value,
|
||||
}
|
||||
|
||||
// effacer cookie si existe
|
||||
int cookie_del(t_cookie * cookie, char *cook_name, char *domain, char *path) {
|
||||
int cookie_del(t_cookie * cookie, const char *cook_name, const char *domain, const char *path) {
|
||||
char *a, *b;
|
||||
|
||||
b = cookie_find(cookie->data, cook_name, domain, path);
|
||||
if (b) {
|
||||
a = cookie_nextfield(b);
|
||||
cookie_delete(b, (int) (a - b));
|
||||
cookie_delete(b, a - b);
|
||||
#if DEBUG_COOK
|
||||
printf("deleted old cookie: %s %s %s\n", cook_name, domain, path);
|
||||
#endif
|
||||
@@ -128,11 +129,11 @@ int cookie_del(t_cookie * cookie, char *cook_name, char *domain, char *path) {
|
||||
// Matches wildcard cookie domains that start with a dot
|
||||
// chk_dom: the domain stored in the cookie (potentially wildcard).
|
||||
// domain: query domain
|
||||
static int cookie_cmp_wildcard_domain(char *chk_dom, char *domain) {
|
||||
int n = strlen(chk_dom);
|
||||
int m = strlen(domain);
|
||||
int l = n < m ? n : m;
|
||||
int i;
|
||||
static int cookie_cmp_wildcard_domain(const char *chk_dom, const char *domain) {
|
||||
const size_t n = strlen(chk_dom);
|
||||
const size_t m = strlen(domain);
|
||||
const size_t l = n < m ? n : m;
|
||||
size_t i;
|
||||
for (i = l - 1; i >= 0; i--) {
|
||||
if (chk_dom[n - i - 1] != domain[m - i - 1]) {
|
||||
return 1;
|
||||
@@ -152,7 +153,7 @@ static int cookie_cmp_wildcard_domain(char *chk_dom, char *domain) {
|
||||
// renvoie pointeur sur ligne, ou NULL si introuvable
|
||||
// path est aligné à droite et cook_name peut être vide (chercher alors tout cookie)
|
||||
// .doubleclick.net TRUE / FALSE 1999999999 id A
|
||||
char *cookie_find(char *s, char *cook_name, char *domain, char *path) {
|
||||
char *cookie_find(char *s, const char *cook_name, const char *domain, const char *path) {
|
||||
char buffer[8192];
|
||||
char *a = s;
|
||||
|
||||
@@ -165,15 +166,15 @@ char *cookie_find(char *s, char *cook_name, char *domain, char *path) {
|
||||
t = (strcmp(cookie_get(buffer, a, 5), cook_name) == 0); // tester si même nom
|
||||
if (t) { // même nom ou nom qualconque
|
||||
//
|
||||
char *chk_dom = cookie_get(buffer, a, 0); // domaine concerné par le cookie
|
||||
const char *chk_dom = cookie_get(buffer, a, 0); // domaine concerné par le cookie
|
||||
|
||||
if (((int) strlen(chk_dom) <= (int) strlen(domain) &&
|
||||
if ((strlen(chk_dom) <= strlen(domain) &&
|
||||
strcmp(chk_dom, domain + strlen(domain) - strlen(chk_dom)) == 0) ||
|
||||
!cookie_cmp_wildcard_domain(chk_dom, domain)) { // même domaine
|
||||
//
|
||||
char *chk_path = cookie_get(buffer, a, 2); // chemin concerné par le cookie
|
||||
const char *chk_path = cookie_get(buffer, a, 2); // chemin concerné par le cookie
|
||||
|
||||
if ((int) strlen(chk_path) <= (int) strlen(path)) {
|
||||
if (strlen(chk_path) <= strlen(path)) {
|
||||
if (strncmp(path, chk_path, strlen(chk_path)) == 0) { // même chemin
|
||||
return a;
|
||||
}
|
||||
@@ -222,7 +223,7 @@ int cookie_load(t_cookie * cookie, const char *fpath, const char *name) {
|
||||
do {
|
||||
if (!(find.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
|
||||
if (!(find.dwFileAttributes & FILE_ATTRIBUTE_SYSTEM)) {
|
||||
FILE *fp = fopen(fconcat(catbuff, fpath, find.cFileName), "rb");
|
||||
FILE *fp = fopen(fconcat(catbuff, sizeof(catbuff), fpath, find.cFileName), "rb");
|
||||
|
||||
if (fp) {
|
||||
char cook_name[256];
|
||||
@@ -231,15 +232,14 @@ int cookie_load(t_cookie * cookie, const char *fpath, const char *name) {
|
||||
char dummy[512];
|
||||
|
||||
//
|
||||
char domain[256]; // domaine cookie (.netscape.com)
|
||||
char path[256]; // chemin (/)
|
||||
lien_adrfil af; // chemin (/)
|
||||
int cookie_merged = 0;
|
||||
|
||||
//
|
||||
// Read all cookies
|
||||
while(!feof(fp)) {
|
||||
cook_name[0] = cook_value[0] = domainpathpath[0]
|
||||
= dummy[0] = domain[0] = path[0] = '\0';
|
||||
= dummy[0] = af.adr[0] = af.fil[0] = '\0';
|
||||
linput(fp, cook_name, 250);
|
||||
if (!feof(fp)) {
|
||||
linput(fp, cook_value, 250);
|
||||
@@ -254,8 +254,8 @@ int cookie_load(t_cookie * cookie, const char *fpath, const char *name) {
|
||||
if (strnotempty(cook_name)
|
||||
&& strnotempty(cook_value)
|
||||
&& strnotempty(domainpathpath)) {
|
||||
if (ident_url_absolute(domainpathpath, domain, path) >= 0) {
|
||||
cookie_add(cookie, cook_name, cook_value, domain, path);
|
||||
if (ident_url_absolute(domainpathpath, &af) >= 0) {
|
||||
cookie_add(cookie, cook_name, cook_value, af.adr, af.fil);
|
||||
cookie_merged = 1;
|
||||
}
|
||||
}
|
||||
@@ -264,7 +264,7 @@ int cookie_load(t_cookie * cookie, const char *fpath, const char *name) {
|
||||
}
|
||||
fclose(fp);
|
||||
if (cookie_merged)
|
||||
remove(fconcat(catbuff, fpath, find.cFileName));
|
||||
remove(fconcat(catbuff, sizeof(catbuff), fpath, find.cFileName));
|
||||
} // if fp
|
||||
}
|
||||
} while(FindNextFileA(h, &find));
|
||||
@@ -275,7 +275,7 @@ int cookie_load(t_cookie * cookie, const char *fpath, const char *name) {
|
||||
|
||||
// Ensuite, cookies.txt
|
||||
{
|
||||
FILE *fp = fopen(fconcat(catbuff, fpath, name), "rb");
|
||||
FILE *fp = fopen(fconcat(catbuff, sizeof(catbuff), fpath, name), "rb");
|
||||
|
||||
if (fp) {
|
||||
char BIGSTK line[8192];
|
||||
@@ -311,12 +311,12 @@ int cookie_load(t_cookie * cookie, const char *fpath, const char *name) {
|
||||
|
||||
// écrire cookies.txt
|
||||
// !=0 : erreur
|
||||
int cookie_save(t_cookie * cookie, char *name) {
|
||||
int cookie_save(t_cookie * cookie, const char *name) {
|
||||
char catbuff[CATBUFF_SIZE];
|
||||
|
||||
if (strnotempty(cookie->data)) {
|
||||
char BIGSTK line[8192];
|
||||
FILE *fp = fopen(fconv(catbuff, name), "wb");
|
||||
FILE *fp = fopen(fconv(catbuff, sizeof(catbuff), name), "wb");
|
||||
|
||||
if (fp) {
|
||||
char *a = cookie->data;
|
||||
@@ -337,13 +337,13 @@ int cookie_save(t_cookie * cookie, char *name) {
|
||||
}
|
||||
|
||||
// insertion chaine ins avant s
|
||||
void cookie_insert(char *s, char *ins) {
|
||||
void cookie_insert(char *s, const char *ins) {
|
||||
char *buff;
|
||||
|
||||
if (strnotempty(s) == 0) { // rien à faire, juste concat
|
||||
strcatbuff(s, ins);
|
||||
} else {
|
||||
buff = (char *) malloct(strlen(s) + 2);
|
||||
buff = (char *) malloct(strlen(s) + 1);
|
||||
if (buff) {
|
||||
strcpybuff(buff, s); // copie temporaire
|
||||
strcpybuff(s, ins); // insérer
|
||||
@@ -354,13 +354,13 @@ void cookie_insert(char *s, char *ins) {
|
||||
}
|
||||
|
||||
// destruction chaine dans s position pos
|
||||
void cookie_delete(char *s, int pos) {
|
||||
void cookie_delete(char *s, size_t pos) {
|
||||
char *buff;
|
||||
|
||||
if (strnotempty(s + pos) == 0) { // rien à faire, effacer
|
||||
s[0] = '\0';
|
||||
} else {
|
||||
buff = (char *) malloct(strlen(s + pos) + 2);
|
||||
buff = (char *) malloct(strlen(s + pos) + 1);
|
||||
if (buff) {
|
||||
strcpybuff(buff, s + pos); // copie temporaire
|
||||
strcpybuff(s, buff); // copier
|
||||
@@ -371,8 +371,8 @@ void cookie_delete(char *s, int pos) {
|
||||
|
||||
// renvoie champ param de la chaine cookie_base
|
||||
// ex: cookie_get("ceci est<tab>un<tab>exemple",1) renvoi "un"
|
||||
char *cookie_get(char *buffer, char *cookie_base, int param) {
|
||||
char *limit;
|
||||
const char *cookie_get(char *buffer, const char *cookie_base, int param) {
|
||||
const char *limit;
|
||||
|
||||
while(*cookie_base == '\n')
|
||||
cookie_base++;
|
||||
@@ -393,7 +393,7 @@ char *cookie_get(char *buffer, char *cookie_base, int param) {
|
||||
}
|
||||
if (cookie_base) {
|
||||
if (cookie_base < limit) {
|
||||
char *a = cookie_base;
|
||||
const char *a = cookie_base;
|
||||
|
||||
while((*a) && (*a != '\t') && (*a != '\n'))
|
||||
a++;
|
||||
@@ -413,7 +413,7 @@ char *cookie_get(char *buffer, char *cookie_base, int param) {
|
||||
// -- basic auth --
|
||||
|
||||
/* déclarer un répertoire comme possédant une authentification propre */
|
||||
int bauth_add(t_cookie * cookie, char *adr, char *fil, char *auth) {
|
||||
int bauth_add(t_cookie * cookie, const char *adr, const char *fil, const char *auth) {
|
||||
char buffer[HTS_URLMAXSIZE * 2];
|
||||
|
||||
if (cookie) {
|
||||
@@ -439,7 +439,7 @@ int bauth_add(t_cookie * cookie, char *adr, char *fil, char *auth) {
|
||||
|
||||
/* tester adr et fil, et retourner authentification si nécessaire */
|
||||
/* sinon, retourne NULL */
|
||||
char *bauth_check(t_cookie * cookie, char *adr, char *fil) {
|
||||
char *bauth_check(t_cookie * cookie, const char *adr, const char *fil) {
|
||||
char buffer[HTS_URLMAXSIZE * 2];
|
||||
|
||||
if (cookie) {
|
||||
@@ -458,10 +458,10 @@ char *bauth_check(t_cookie * cookie, char *adr, char *fil) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
char *bauth_prefix(char *prefix, char *adr, char *fil) {
|
||||
char *bauth_prefix(char *prefix, const char *adr, const char *fil) {
|
||||
char *a;
|
||||
|
||||
strcpybuff(prefix, jump_identification(adr));
|
||||
strcpybuff(prefix, jump_identification_const(adr));
|
||||
strcatbuff(prefix, fil);
|
||||
a = strchr(prefix, '?');
|
||||
if (a)
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/* ------------------------------------------------------------ */
|
||||
/*
|
||||
HTTrack Website Copier, Offline Browser for Windows and Unix
|
||||
Copyright (C) 1998-2013 Xavier Roche and other contributors
|
||||
Copyright (C) 1998-2014 Xavier Roche and other contributors
|
||||
|
||||
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
|
||||
@@ -34,6 +34,8 @@ Please visit our Website: http://www.httrack.com
|
||||
#ifndef HTSBAUTH_DEFH
|
||||
#define HTSBAUTH_DEFH
|
||||
|
||||
#include <sys/types.h>
|
||||
|
||||
// robots wizard
|
||||
#ifndef HTS_DEF_FWSTRUCT_bauth_chain
|
||||
#define HTS_DEF_FWSTRUCT_bauth_chain
|
||||
@@ -60,21 +62,21 @@ struct t_cookie {
|
||||
#ifdef HTS_INTERNAL_BYTECODE
|
||||
|
||||
// cookies
|
||||
int cookie_add(t_cookie * cookie, char *cook_name, char *cook_value,
|
||||
char *domain, char *path);
|
||||
int cookie_del(t_cookie * cookie, char *cook_name, char *domain, char *path);
|
||||
int cookie_add(t_cookie * cookie, const char *cook_name, const char *cook_value,
|
||||
const char *domain, const char *path);
|
||||
int cookie_del(t_cookie * cookie, const char *cook_name, const char *domain, const char *path);
|
||||
int cookie_load(t_cookie * cookie, const char *path, const char *name);
|
||||
int cookie_save(t_cookie * cookie, char *name);
|
||||
void cookie_insert(char *s, char *ins);
|
||||
void cookie_delete(char *s, int pos);
|
||||
char *cookie_get(char *buffer, char *cookie_base, int param);
|
||||
char *cookie_find(char *s, char *cook_name, char *domain, char *path);
|
||||
int cookie_save(t_cookie * cookie, const char *name);
|
||||
void cookie_insert(char *s, const char *ins);
|
||||
void cookie_delete(char *s, size_t pos);
|
||||
const char *cookie_get(char *buffer, const char *cookie_base, int param);
|
||||
char *cookie_find(char *s, const char *cook_name, const char *domain, const char *path);
|
||||
char *cookie_nextfield(char *a);
|
||||
|
||||
// basic auth
|
||||
int bauth_add(t_cookie * cookie, char *adr, char *fil, char *auth);
|
||||
char *bauth_check(t_cookie * cookie, char *adr, char *fil);
|
||||
char *bauth_prefix(char *buffer, char *adr, char *fil);
|
||||
int bauth_add(t_cookie * cookie, const char *adr, const char *fil, const char *auth);
|
||||
char *bauth_check(t_cookie * cookie, const char *adr, const char *fil);
|
||||
char *bauth_prefix(char *buffer, const char *adr, const char *fil);
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
226
src/htscache.c
226
src/htscache.c
@@ -1,7 +1,7 @@
|
||||
/* ------------------------------------------------------------ */
|
||||
/*
|
||||
HTTrack Website Copier, Offline Browser for Windows and Unix
|
||||
Copyright (C) 1998-2013 Xavier Roche and other contributors
|
||||
Copyright (C) 1998-2014 Xavier Roche and other contributors
|
||||
|
||||
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
|
||||
@@ -145,9 +145,9 @@ void cache_mayadd(httrackp * opt, cache_back * cache, htsblk * r,
|
||||
// we just store statuscode + location (if any)
|
||||
if (url_save == NULL && r->statuscode / 100 >= 3) {
|
||||
// cached "fast" header doesn't yet exists
|
||||
if (inthash_read
|
||||
if (coucal_read
|
||||
(cache->cached_tests,
|
||||
concat(OPT_GET_BUFF(opt), url_adr, url_fil), NULL) == 0) {
|
||||
concat(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), url_adr, url_fil), NULL) == 0) {
|
||||
char BIGSTK tempo[HTS_URLMAXSIZE * 2];
|
||||
|
||||
sprintf(tempo, "%d", (int) r->statuscode);
|
||||
@@ -158,8 +158,8 @@ void cache_mayadd(httrackp * opt, cache_back * cache, htsblk * r,
|
||||
hts_log_print(opt, LOG_DEBUG,
|
||||
"Cached fast-header response: %s%s is %d",
|
||||
url_adr, url_fil, (int) r->statuscode);
|
||||
inthash_add(cache->cached_tests,
|
||||
concat(OPT_GET_BUFF(opt), url_adr, url_fil),
|
||||
coucal_add(cache->cached_tests,
|
||||
concat(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), url_adr, url_fil),
|
||||
(intptr_t) strdupt(tempo));
|
||||
}
|
||||
}
|
||||
@@ -366,10 +366,10 @@ void cache_add(httrackp * opt, cache_back * cache, const htsblk * r,
|
||||
FILE *fp;
|
||||
|
||||
// On recopie le fichier->.
|
||||
off_t file_size = fsize_utf8(fconv(catbuff, url_save));
|
||||
off_t file_size = fsize_utf8(fconv(catbuff, sizeof(catbuff), url_save));
|
||||
|
||||
if (file_size >= 0) {
|
||||
fp = FOPEN(fconv(catbuff, url_save), "rb");
|
||||
fp = FOPEN(fconv(catbuff, sizeof(catbuff), url_save), "rb");
|
||||
if (fp != NULL) {
|
||||
char BIGSTK buff[32768];
|
||||
size_t nl;
|
||||
@@ -646,7 +646,7 @@ static htsblk cache_readex_new(httrackp * opt, cache_back * cache,
|
||||
strcpybuff(r.location, "");
|
||||
strcpybuff(buff, adr);
|
||||
strcatbuff(buff, fil);
|
||||
hash_pos_return = inthash_read(cache->hashtable, buff, &hash_pos);
|
||||
hash_pos_return = coucal_read(cache->hashtable, buff, &hash_pos);
|
||||
/* avoid errors on data entries */
|
||||
if (adr[0] == '/' && adr[1] == '/' && adr[2] == '[') {
|
||||
#if HTS_FAST_CACHE
|
||||
@@ -751,7 +751,7 @@ static htsblk cache_readex_new(httrackp * opt, cache_back * cache,
|
||||
|
||||
/* Ensure the file is present, because returning a reference to a missing file is useless! */
|
||||
if (!dataincache) { /* Data are supposed to be on disk */
|
||||
if (!fexist_utf8(fconv(catbuff, previous_save))) { // un fichier existe déja
|
||||
if (!fexist_utf8(fconv(catbuff, sizeof(catbuff), previous_save))) { // un fichier existe déja
|
||||
if (!opt->norecatch) {
|
||||
hts_log_print(opt, LOG_DEBUG, "Cache: could not find %s",
|
||||
previous_save);
|
||||
@@ -775,10 +775,10 @@ static htsblk cache_readex_new(httrackp * opt, cache_back * cache,
|
||||
r.msg[0] = '\0';
|
||||
|
||||
// File exists on disk with declared cache name (this is expected!)
|
||||
if (fexist_utf8(fconv(catbuff, previous_save))) { // un fichier existe déja
|
||||
if (fexist_utf8(fconv(catbuff, sizeof(catbuff), previous_save))) { // un fichier existe déja
|
||||
// Expected size ?
|
||||
const size_t fsize =
|
||||
fsize_utf8(fconv(catbuff, previous_save));
|
||||
fsize_utf8(fconv(catbuff, sizeof(catbuff), previous_save));
|
||||
if (fsize == r.size) {
|
||||
// Target name is the previous name, and the file looks good: nothing to do!
|
||||
if (strcmp(previous_save, target_save) == 0) {
|
||||
@@ -790,8 +790,8 @@ static htsblk cache_readex_new(httrackp * opt, cache_back * cache,
|
||||
char catbuff2[CATBUFF_SIZE];
|
||||
|
||||
if (RENAME
|
||||
(fconv(catbuff, previous_save),
|
||||
fconv(catbuff2, target_save)) == 0) {
|
||||
(fconv(catbuff, sizeof(catbuff), previous_save),
|
||||
fconv(catbuff2, sizeof(catbuff2), target_save)) == 0) {
|
||||
// So far so good
|
||||
ok = 1; // plus rien à faire
|
||||
|
||||
@@ -812,9 +812,9 @@ static htsblk cache_readex_new(httrackp * opt, cache_back * cache,
|
||||
}
|
||||
// File exists with the target name and not previous one ?
|
||||
// Suppose a broken mirror, with a file being renamed: OK
|
||||
else if (fexist_utf8(fconv(catbuff, target_save))) {
|
||||
else if (fexist_utf8(fconv(catbuff, sizeof(catbuff), target_save))) {
|
||||
// Expected size ?
|
||||
const size_t fsize = fsize_utf8(fconv(catbuff, target_save));
|
||||
const size_t fsize = fsize_utf8(fconv(catbuff, sizeof(catbuff), target_save));
|
||||
|
||||
if (fsize == r.size) {
|
||||
// So far so good
|
||||
@@ -927,7 +927,7 @@ static htsblk cache_readex_new(httrackp * opt, cache_back * cache,
|
||||
"Previous cache file not found (empty filename)");
|
||||
}
|
||||
} else { /* Read in memory from disk */
|
||||
FILE *const fp = FOPEN(fconv(catbuff, previous_save), "rb");
|
||||
FILE *const fp = FOPEN(fconv(catbuff, sizeof(catbuff), previous_save), "rb");
|
||||
|
||||
if (fp != NULL) {
|
||||
r.adr = (char *) malloct((int) r.size + 4);
|
||||
@@ -1029,7 +1029,7 @@ static htsblk cache_readex_old(httrackp * opt, cache_back * cache,
|
||||
#if HTS_FAST_CACHE
|
||||
strcpybuff(buff, adr);
|
||||
strcatbuff(buff, fil);
|
||||
hash_pos_return = inthash_read(cache->hashtable, buff, &hash_pos);
|
||||
hash_pos_return = coucal_read(cache->hashtable, buff, &hash_pos);
|
||||
#else
|
||||
buff[0] = '\0';
|
||||
strcatbuff(buff, "\n");
|
||||
@@ -1159,7 +1159,7 @@ static htsblk cache_readex_old(httrackp * opt, cache_back * cache,
|
||||
int ok = 0;
|
||||
|
||||
r.is_write = 1; // écrire
|
||||
if (fexist_utf8(fconv(catbuff, save))) { // un fichier existe déja
|
||||
if (fexist_utf8(fconv(catbuff, sizeof(catbuff), save))) { // un fichier existe déja
|
||||
//if (fsize_utf8(fconv(save))==r.size) { // même taille -- NON tant pis (taille mal declaree)
|
||||
ok = 1; // plus rien à faire
|
||||
filenote(&opt->state.strc, save, NULL); // noter comme connu
|
||||
@@ -1229,7 +1229,7 @@ static htsblk cache_readex_old(httrackp * opt, cache_back * cache,
|
||||
strcpybuff(r.msg, "Previous cache file not found (2)");
|
||||
} else { /* Read in memory from cache */
|
||||
if (strnotempty(return_save) && fexist_utf8(return_save)) {
|
||||
FILE *fp = FOPEN(fconv(catbuff, return_save), "rb");
|
||||
FILE *fp = FOPEN(fconv(catbuff, sizeof(catbuff), return_save), "rb");
|
||||
|
||||
if (fp != NULL) {
|
||||
r.adr = (char *) malloct((size_t) r.size + 4);
|
||||
@@ -1349,7 +1349,7 @@ int cache_readdata(cache_back * cache, const char *str1, const char *str2,
|
||||
|
||||
strcpybuff(buff, str1);
|
||||
strcatbuff(buff, str2);
|
||||
if (inthash_read(cache->hashtable, buff, &pos)) {
|
||||
if (coucal_read(cache->hashtable, buff, &pos)) {
|
||||
if (fseek(cache->olddat, (long) ((pos > 0) ? pos : (-pos)), SEEK_SET) ==
|
||||
0) {
|
||||
INTsys len;
|
||||
@@ -1397,7 +1397,7 @@ void cache_init(cache_back * cache, httrackp * opt) {
|
||||
// ---
|
||||
// utilisation du cache: renommer ancien éventuel et charger index
|
||||
hts_log_print(opt, LOG_DEBUG, "Cache: enabled=%d, base=%s, ro=%d",
|
||||
(int) opt->cache, fconcat(OPT_GET_BUFF(opt),
|
||||
(int) opt->cache, fconcat(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt),
|
||||
StringBuff(opt->path_log),
|
||||
"hts-cache/"), (int) cache->ro);
|
||||
if (opt->cache) {
|
||||
@@ -1406,40 +1406,40 @@ void cache_init(cache_back * cache, httrackp * opt) {
|
||||
#endif
|
||||
if (!cache->ro) {
|
||||
#ifdef _WIN32
|
||||
mkdir(fconcat(OPT_GET_BUFF(opt), StringBuff(opt->path_log), "hts-cache"));
|
||||
mkdir(fconcat(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log), "hts-cache"));
|
||||
#else
|
||||
mkdir(fconcat(OPT_GET_BUFF(opt), StringBuff(opt->path_log), "hts-cache"),
|
||||
mkdir(fconcat(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log), "hts-cache"),
|
||||
HTS_PROTECT_FOLDER);
|
||||
#endif
|
||||
if ((fexist(fconcat(OPT_GET_BUFF(opt), StringBuff(opt->path_log), "hts-cache/new.zip")))) { // il existe déja un cache précédent.. renommer
|
||||
if ((fexist(fconcat(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log), "hts-cache/new.zip")))) { // il existe déja un cache précédent.. renommer
|
||||
/* Previous cache from the previous cache version */
|
||||
#if 0
|
||||
/* No.. reuse with old httrack releases! */
|
||||
if (fexist
|
||||
(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log),
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log),
|
||||
"hts-cache/old.dat")))
|
||||
remove(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log),
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log),
|
||||
"hts-cache/old.dat"));
|
||||
if (fexist
|
||||
(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log),
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log),
|
||||
"hts-cache/old.ndx")))
|
||||
remove(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log),
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log),
|
||||
"hts-cache/old.ndx"));
|
||||
#endif
|
||||
/* Previous cache version */
|
||||
if ((fexist(fconcat(OPT_GET_BUFF(opt), StringBuff(opt->path_log), "hts-cache/new.dat"))) && (fexist(fconcat(OPT_GET_BUFF(opt), StringBuff(opt->path_log), "hts-cache/new.ndx")))) { // il existe déja un cache précédent.. renommer
|
||||
if ((fexist(fconcat(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log), "hts-cache/new.dat"))) && (fexist(fconcat(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log), "hts-cache/new.ndx")))) { // il existe déja un cache précédent.. renommer
|
||||
rename(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log),
|
||||
"hts-cache/new.dat"), fconcat(OPT_GET_BUFF(opt),
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log),
|
||||
"hts-cache/new.dat"), fconcat(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt),
|
||||
StringBuff(opt->path_log),
|
||||
"hts-cache/old.dat"));
|
||||
rename(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log),
|
||||
"hts-cache/new.ndx"), fconcat(OPT_GET_BUFF(opt),
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log),
|
||||
"hts-cache/new.ndx"), fconcat(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt),
|
||||
StringBuff(opt->path_log),
|
||||
"hts-cache/old.ndx"));
|
||||
}
|
||||
@@ -1447,11 +1447,11 @@ void cache_init(cache_back * cache, httrackp * opt) {
|
||||
/* Remove OLD cache */
|
||||
if (fexist
|
||||
(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log),
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log),
|
||||
"hts-cache/old.zip"))) {
|
||||
if (remove
|
||||
(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log),
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log),
|
||||
"hts-cache/old.zip")) != 0) {
|
||||
hts_log_print(opt, LOG_WARNING | LOG_ERRNO,
|
||||
"Cache: error while moving previous cache");
|
||||
@@ -1461,8 +1461,8 @@ void cache_init(cache_back * cache, httrackp * opt) {
|
||||
/* Rename */
|
||||
if (hts_rename
|
||||
(opt,
|
||||
fconcat(OPT_GET_BUFF(opt), StringBuff(opt->path_log),
|
||||
"hts-cache/new.zip"), fconcat(OPT_GET_BUFF(opt),
|
||||
fconcat(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log),
|
||||
"hts-cache/new.zip"), fconcat(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt),
|
||||
StringBuff(opt->path_log),
|
||||
"hts-cache/old.zip")) != 0) {
|
||||
hts_log_print(opt, LOG_WARNING | LOG_ERRNO,
|
||||
@@ -1470,33 +1470,33 @@ void cache_init(cache_back * cache, httrackp * opt) {
|
||||
} else {
|
||||
hts_log_print(opt, LOG_DEBUG, "Cache: successfully renamed");
|
||||
}
|
||||
} else if ((fexist(fconcat(OPT_GET_BUFF(opt), StringBuff(opt->path_log), "hts-cache/new.dat"))) && (fexist(fconcat(OPT_GET_BUFF(opt), StringBuff(opt->path_log), "hts-cache/new.ndx")))) { // il existe déja un cache précédent.. renommer
|
||||
} else if ((fexist(fconcat(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log), "hts-cache/new.dat"))) && (fexist(fconcat(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log), "hts-cache/new.ndx")))) { // il existe déja un cache précédent.. renommer
|
||||
#if DEBUGCA
|
||||
printf("work with former cache\n");
|
||||
#endif
|
||||
if (fexist
|
||||
(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log),
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log),
|
||||
"hts-cache/old.dat")))
|
||||
remove(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log),
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log),
|
||||
"hts-cache/old.dat"));
|
||||
if (fexist
|
||||
(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log),
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log),
|
||||
"hts-cache/old.ndx")))
|
||||
remove(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log),
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log),
|
||||
"hts-cache/old.ndx"));
|
||||
|
||||
rename(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log),
|
||||
"hts-cache/new.dat"), fconcat(OPT_GET_BUFF(opt),
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log),
|
||||
"hts-cache/new.dat"), fconcat(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt),
|
||||
StringBuff(opt->path_log),
|
||||
"hts-cache/old.dat"));
|
||||
rename(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log),
|
||||
"hts-cache/new.ndx"), fconcat(OPT_GET_BUFF(opt),
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log),
|
||||
"hts-cache/new.ndx"), fconcat(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt),
|
||||
StringBuff(opt->path_log),
|
||||
"hts-cache/old.ndx"));
|
||||
} else { // un des deux (ou les deux) fichiers cache absents: effacer l'autre éventuel
|
||||
@@ -1505,17 +1505,17 @@ void cache_init(cache_back * cache, httrackp * opt) {
|
||||
#endif
|
||||
if (fexist
|
||||
(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log),
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log),
|
||||
"hts-cache/new.dat")))
|
||||
remove(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log),
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log),
|
||||
"hts-cache/new.dat"));
|
||||
if (fexist
|
||||
(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log),
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log),
|
||||
"hts-cache/new.ndx")))
|
||||
remove(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log),
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log),
|
||||
"hts-cache/new.ndx"));
|
||||
}
|
||||
} else {
|
||||
@@ -1524,30 +1524,30 @@ void cache_init(cache_back * cache, httrackp * opt) {
|
||||
hts_log_print(opt, LOG_DEBUG, "Cache: size %d",
|
||||
(int)
|
||||
fsize(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log),
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log),
|
||||
"hts-cache/old.zip")));
|
||||
|
||||
// charger index cache précédent
|
||||
if ((!cache->ro
|
||||
&&
|
||||
fsize(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log),
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log),
|
||||
"hts-cache/old.zip")) > 0)
|
||||
|| (cache->ro
|
||||
&&
|
||||
fsize(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log),
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log),
|
||||
"hts-cache/new.zip")) > 0)
|
||||
) {
|
||||
if (!cache->ro) {
|
||||
cache->zipInput =
|
||||
unzOpen(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log),
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log),
|
||||
"hts-cache/old.zip"));
|
||||
} else {
|
||||
cache->zipInput =
|
||||
unzOpen(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log),
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log),
|
||||
"hts-cache/new.zip"));
|
||||
}
|
||||
|
||||
@@ -1559,25 +1559,25 @@ void cache_init(cache_back * cache, httrackp * opt) {
|
||||
|
||||
if (!cache->ro) {
|
||||
name =
|
||||
fconcat(OPT_GET_BUFF(opt), StringBuff(opt->path_log),
|
||||
fconcat(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log),
|
||||
"hts-cache/old.zip");
|
||||
} else {
|
||||
name =
|
||||
fconcat(OPT_GET_BUFF(opt), StringBuff(opt->path_log),
|
||||
fconcat(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log),
|
||||
"hts-cache/new.zip");
|
||||
}
|
||||
hts_log_print(opt, LOG_WARNING,
|
||||
"Cache: damaged cache, trying to repair");
|
||||
if (unzRepair
|
||||
(name,
|
||||
fconcat(OPT_GET_BUFF(opt), StringBuff(opt->path_log),
|
||||
"hts-cache/repair.zip"), fconcat(OPT_GET_BUFF(opt),
|
||||
fconcat(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log),
|
||||
"hts-cache/repair.zip"), fconcat(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt),
|
||||
StringBuff(opt->path_log),
|
||||
"hts-cache/repair.tmp"),
|
||||
&repaired, &repairedBytes) == Z_OK) {
|
||||
unlink(name);
|
||||
rename(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log),
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log),
|
||||
"hts-cache/repair.zip"), name);
|
||||
cache->zipInput = unzOpen(name);
|
||||
hts_log_print(opt, LOG_WARNING,
|
||||
@@ -1642,9 +1642,9 @@ void cache_init(cache_back * cache, httrackp * opt) {
|
||||
}
|
||||
}
|
||||
if (dataincache)
|
||||
inthash_add(cache->hashtable, filenameIndex, pos);
|
||||
coucal_add(cache->hashtable, filenameIndex, pos);
|
||||
else
|
||||
inthash_add(cache->hashtable, filenameIndex, -pos);
|
||||
coucal_add(cache->hashtable, filenameIndex, -pos);
|
||||
} else {
|
||||
hts_log_print(opt, LOG_WARNING,
|
||||
"Corrupted cache meta entry #%d",
|
||||
@@ -1679,20 +1679,20 @@ void cache_init(cache_back * cache, httrackp * opt) {
|
||||
if ((!cache->ro
|
||||
&&
|
||||
fsize(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log),
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log),
|
||||
"hts-cache/old.dat")) >= 0
|
||||
&&
|
||||
fsize(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log),
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log),
|
||||
"hts-cache/old.ndx")) > 0)
|
||||
|| (cache->ro
|
||||
&&
|
||||
fsize(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log),
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log),
|
||||
"hts-cache/new.dat")) >= 0
|
||||
&&
|
||||
fsize(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log),
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log),
|
||||
"hts-cache/new.ndx")) > 0)
|
||||
) {
|
||||
FILE *oldndx = NULL;
|
||||
@@ -1703,20 +1703,20 @@ void cache_init(cache_back * cache, httrackp * opt) {
|
||||
if (!cache->ro) {
|
||||
cache->olddat =
|
||||
fopen(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log),
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log),
|
||||
"hts-cache/old.dat"), "rb");
|
||||
oldndx =
|
||||
fopen(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log),
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log),
|
||||
"hts-cache/old.ndx"), "rb");
|
||||
} else {
|
||||
cache->olddat =
|
||||
fopen(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log),
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log),
|
||||
"hts-cache/new.dat"), "rb");
|
||||
oldndx =
|
||||
fopen(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log),
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log),
|
||||
"hts-cache/new.ndx"), "rb");
|
||||
}
|
||||
// les deux doivent être ouvrables
|
||||
@@ -1738,20 +1738,20 @@ void cache_init(cache_back * cache, httrackp * opt) {
|
||||
if (!cache->ro) {
|
||||
buffl =
|
||||
fsize(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log),
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log),
|
||||
"hts-cache/old.ndx"));
|
||||
cache->use =
|
||||
readfile(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log),
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log),
|
||||
"hts-cache/old.ndx"));
|
||||
} else {
|
||||
buffl =
|
||||
fsize(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log),
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log),
|
||||
"hts-cache/new.ndx"));
|
||||
cache->use =
|
||||
readfile(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log),
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log),
|
||||
"hts-cache/new.ndx"));
|
||||
}
|
||||
if (cache->use != NULL) {
|
||||
@@ -1810,7 +1810,7 @@ void cache_init(cache_back * cache, httrackp * opt) {
|
||||
/* read position */
|
||||
a += binput(a, linepos, 200);
|
||||
sscanf(linepos, "%d", &pos);
|
||||
inthash_add(cache->hashtable, line, pos);
|
||||
coucal_add(cache->hashtable, line, pos);
|
||||
}
|
||||
}
|
||||
/* Not needed anymore! */
|
||||
@@ -1822,7 +1822,7 @@ void cache_init(cache_back * cache, httrackp * opt) {
|
||||
}
|
||||
} else {
|
||||
hts_log_print(opt, LOG_DEBUG, "Cache: no cache found in %s",
|
||||
fconcat(OPT_GET_BUFF(opt), StringBuff(opt->path_log),
|
||||
fconcat(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log),
|
||||
"hts-cache/"));
|
||||
}
|
||||
|
||||
@@ -1832,39 +1832,39 @@ void cache_init(cache_back * cache, httrackp * opt) {
|
||||
if (!cache->ro) {
|
||||
// ouvrir caches actuels
|
||||
structcheck(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log), "hts-cache/"));
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log), "hts-cache/"));
|
||||
|
||||
if (1) {
|
||||
/* Create ZIP file cache */
|
||||
cache->zipOutput =
|
||||
(void *)
|
||||
zipOpen(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log),
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log),
|
||||
"hts-cache/new.zip"), 0);
|
||||
|
||||
if (cache->zipOutput != NULL) {
|
||||
// supprimer old.lst
|
||||
if (fexist
|
||||
(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log),
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log),
|
||||
"hts-cache/old.lst")))
|
||||
remove(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log),
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log),
|
||||
"hts-cache/old.lst"));
|
||||
// renommer
|
||||
if (fexist
|
||||
(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log),
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log),
|
||||
"hts-cache/new.lst")))
|
||||
rename(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log),
|
||||
"hts-cache/new.lst"), fconcat(OPT_GET_BUFF(opt),
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log),
|
||||
"hts-cache/new.lst"), fconcat(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt),
|
||||
StringBuff(opt->path_log),
|
||||
"hts-cache/old.lst"));
|
||||
// ouvrir
|
||||
cache->lst =
|
||||
fopen(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log),
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log),
|
||||
"hts-cache/new.lst"), "wb");
|
||||
strcpybuff(opt->state.strc.path, StringBuff(opt->path_html));
|
||||
opt->state.strc.lst = cache->lst;
|
||||
@@ -1878,25 +1878,25 @@ void cache_init(cache_back * cache, httrackp * opt) {
|
||||
// supprimer old.txt
|
||||
if (fexist
|
||||
(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log),
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log),
|
||||
"hts-cache/old.txt")))
|
||||
remove(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log),
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log),
|
||||
"hts-cache/old.txt"));
|
||||
// renommer
|
||||
if (fexist
|
||||
(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log),
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log),
|
||||
"hts-cache/new.txt")))
|
||||
rename(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log),
|
||||
"hts-cache/new.txt"), fconcat(OPT_GET_BUFF(opt),
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log),
|
||||
"hts-cache/new.txt"), fconcat(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt),
|
||||
StringBuff(opt->path_log),
|
||||
"hts-cache/old.txt"));
|
||||
// ouvrir
|
||||
cache->txt =
|
||||
fopen(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log),
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log),
|
||||
"hts-cache/new.txt"), "wb");
|
||||
if (cache->txt) {
|
||||
fprintf(cache->txt,
|
||||
@@ -1909,11 +1909,11 @@ void cache_init(cache_back * cache, httrackp * opt) {
|
||||
} else {
|
||||
cache->dat =
|
||||
fopen(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log),
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log),
|
||||
"hts-cache/new.dat"), "wb");
|
||||
cache->ndx =
|
||||
fopen(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log),
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log),
|
||||
"hts-cache/new.ndx"), "wb");
|
||||
// les deux doivent être ouvrables
|
||||
if ((cache->dat == NULL) && (cache->ndx != NULL)) {
|
||||
@@ -1940,25 +1940,25 @@ void cache_init(cache_back * cache, httrackp * opt) {
|
||||
// supprimer old.lst
|
||||
if (fexist
|
||||
(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log),
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log),
|
||||
"hts-cache/old.lst")))
|
||||
remove(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log),
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log),
|
||||
"hts-cache/old.lst"));
|
||||
// renommer
|
||||
if (fexist
|
||||
(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log),
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log),
|
||||
"hts-cache/new.lst")))
|
||||
rename(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log),
|
||||
"hts-cache/new.lst"), fconcat(OPT_GET_BUFF(opt),
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log),
|
||||
"hts-cache/new.lst"), fconcat(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt),
|
||||
StringBuff(opt->path_log),
|
||||
"hts-cache/old.lst"));
|
||||
// ouvrir
|
||||
cache->lst =
|
||||
fopen(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log),
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log),
|
||||
"hts-cache/new.lst"), "wb");
|
||||
strcpybuff(opt->state.strc.path, StringBuff(opt->path_html));
|
||||
opt->state.strc.lst = cache->lst;
|
||||
@@ -1972,25 +1972,25 @@ void cache_init(cache_back * cache, httrackp * opt) {
|
||||
// supprimer old.txt
|
||||
if (fexist
|
||||
(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log),
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log),
|
||||
"hts-cache/old.txt")))
|
||||
remove(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log),
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log),
|
||||
"hts-cache/old.txt"));
|
||||
// renommer
|
||||
if (fexist
|
||||
(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log),
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log),
|
||||
"hts-cache/new.txt")))
|
||||
rename(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log),
|
||||
"hts-cache/new.txt"), fconcat(OPT_GET_BUFF(opt),
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log),
|
||||
"hts-cache/new.txt"), fconcat(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt),
|
||||
StringBuff(opt->path_log),
|
||||
"hts-cache/old.txt"));
|
||||
// ouvrir
|
||||
cache->txt =
|
||||
fopen(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log),
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log),
|
||||
"hts-cache/new.txt"), "wb");
|
||||
if (cache->txt) {
|
||||
fprintf(cache->txt,
|
||||
@@ -2016,12 +2016,12 @@ void cache_init(cache_back * cache, httrackp * opt) {
|
||||
|
||||
// lire un fichier.. (compatible \0)
|
||||
/* Note: NOT utf-8 */
|
||||
char *readfile(char *fil) {
|
||||
char *readfile(const char *fil) {
|
||||
return readfile2(fil, NULL);
|
||||
}
|
||||
|
||||
/* Note: NOT utf-8 */
|
||||
char *readfile2(char *fil, LLint * size) {
|
||||
char *readfile2(const char *fil, LLint * size) {
|
||||
char *adr = NULL;
|
||||
char catbuff[CATBUFF_SIZE];
|
||||
INTsys len = 0;
|
||||
@@ -2030,7 +2030,7 @@ char *readfile2(char *fil, LLint * size) {
|
||||
if (len >= 0) { // exists
|
||||
FILE *fp;
|
||||
|
||||
fp = fopen(fconv(catbuff, fil), "rb");
|
||||
fp = fopen(fconv(catbuff, sizeof(catbuff), fil), "rb");
|
||||
if (fp != NULL) { // n'existe pas (!)
|
||||
adr = (char *) malloct(len + 1);
|
||||
if (size != NULL)
|
||||
@@ -2049,13 +2049,13 @@ char *readfile2(char *fil, LLint * size) {
|
||||
}
|
||||
|
||||
/* Note: utf-8 */
|
||||
char *readfile_utf8(char *fil) {
|
||||
char *readfile_utf8(const char *fil) {
|
||||
char *adr = NULL;
|
||||
char catbuff[CATBUFF_SIZE];
|
||||
const off_t len = fsize_utf8(fil);
|
||||
|
||||
if (len >= 0) { // exists
|
||||
FILE *const fp = FOPEN(fconv(catbuff, fil), "rb");
|
||||
FILE *const fp = FOPEN(fconv(catbuff, sizeof(catbuff), fil), "rb");
|
||||
|
||||
if (fp != NULL) { // n'existe pas (!)
|
||||
adr = (char *) malloct(len + 1);
|
||||
@@ -2074,18 +2074,18 @@ char *readfile_utf8(char *fil) {
|
||||
}
|
||||
|
||||
/* Note: NOT utf-8 */
|
||||
char *readfile_or(char *fil, char *defaultdata) {
|
||||
char *realfile = fil;
|
||||
char *readfile_or(const char *fil, const char *defaultdata) {
|
||||
const char *realfile = fil;
|
||||
char *ret;
|
||||
char catbuff[CATBUFF_SIZE];
|
||||
|
||||
if (!fexist(fil))
|
||||
realfile = fconcat(catbuff, hts_rootdir(NULL), fil);
|
||||
realfile = fconcat(catbuff, sizeof(catbuff), hts_rootdir(NULL), fil);
|
||||
ret = readfile(realfile);
|
||||
if (ret)
|
||||
return ret;
|
||||
else {
|
||||
char *adr = malloct(strlen(defaultdata) + 2);
|
||||
char *adr = malloct(strlen(defaultdata) + 1);
|
||||
|
||||
if (adr) {
|
||||
strcpybuff(adr, defaultdata);
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/* ------------------------------------------------------------ */
|
||||
/*
|
||||
HTTrack Website Copier, Offline Browser for Windows and Unix
|
||||
Copyright (C) 1998-2013 Xavier Roche and other contributors
|
||||
Copyright (C) 1998-2014 Xavier Roche and other contributors
|
||||
|
||||
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
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/* ------------------------------------------------------------ */
|
||||
/*
|
||||
HTTrack Website Copier, Offline Browser for Windows and Unix
|
||||
Copyright (C) 1998-2013 Xavier Roche and other contributors
|
||||
Copyright (C) 1998-2014 Xavier Roche and other contributors
|
||||
|
||||
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
|
||||
@@ -40,6 +40,7 @@ Please visit our Website: http://www.httrack.com
|
||||
#include "htsbase.h"
|
||||
#include "htsnet.h"
|
||||
#include "htslib.h"
|
||||
#include "htscore.h"
|
||||
#include <fcntl.h>
|
||||
#ifdef _WIN32
|
||||
#else
|
||||
@@ -77,40 +78,25 @@ HTSEXT_API T_SOC catch_url_init_std(int *port_prox, char *adr_prox) {
|
||||
// 1- Init the URL catcher
|
||||
|
||||
// catch_url_init(&port,&return_host);
|
||||
HTSEXT_API T_SOC catch_url_init(int *port, char *adr) {
|
||||
HTSEXT_API T_SOC catch_url_init(int *port, /* 128 bytes */ char *adr) {
|
||||
T_SOC soc = INVALID_SOCKET;
|
||||
char h_loc[256 + 2];
|
||||
char h_loc[256];
|
||||
|
||||
if (gethostname(h_loc, 256) == 0) { // host name
|
||||
if (gethostname(h_loc, sizeof(h_loc)) == 0) { // host name
|
||||
SOCaddr server;
|
||||
int server_size = sizeof(server);
|
||||
t_hostent *hp_loc;
|
||||
t_fullhostent buffer;
|
||||
|
||||
// effacer structure
|
||||
memset(&server, 0, sizeof(server));
|
||||
|
||||
if ((hp_loc = vxgethostbyname(h_loc, &buffer))) { // notre host
|
||||
|
||||
// copie adresse
|
||||
SOCaddr_copyaddr(server, server_size, hp_loc->h_addr_list[0],
|
||||
hp_loc->h_length);
|
||||
|
||||
if (hts_dns_resolve_nocache(h_loc, &server) != NULL) { // notre host
|
||||
if ((soc =
|
||||
(T_SOC) socket(SOCaddr_sinfamily(server), SOCK_STREAM,
|
||||
0)) != INVALID_SOCKET) {
|
||||
SOCaddr_initport(server, *port);
|
||||
if (bind(soc, (struct sockaddr *) &server, server_size) == 0) {
|
||||
if (bind(soc, &SOCaddr_sockaddr(server), SOCaddr_size(server)) == 0) {
|
||||
SOCaddr server2;
|
||||
SOClen len;
|
||||
SOClen len = SOCaddr_capacity(server2);
|
||||
|
||||
len = sizeof(server2);
|
||||
// effacer structure
|
||||
memset(&server2, 0, sizeof(server2));
|
||||
if (getsockname(soc, (struct sockaddr *) &server2, &len) == 0) {
|
||||
if (getsockname(soc, &SOCaddr_sockaddr(server2), &len) == 0) {
|
||||
*port = ntohs(SOCaddr_sinport(server)); // récupérer port
|
||||
if (listen(soc, 10) >= 0) { // au pif le 10
|
||||
SOCaddr_inetntoa(adr, 128, server2, len);
|
||||
if (listen(soc, 1) >= 0) {
|
||||
SOCaddr_inetntoa(adr, 128, server2);
|
||||
} else {
|
||||
#ifdef _WIN32
|
||||
closesocket(soc);
|
||||
@@ -168,15 +154,13 @@ HTSEXT_API int catch_url(T_SOC soc, char *url, char *method, char *data) {
|
||||
/* INFOS */
|
||||
{
|
||||
SOCaddr server2;
|
||||
SOClen len = sizeof(server2);
|
||||
SOClen len = SOCaddr_capacity(server2);
|
||||
|
||||
// effacer structure
|
||||
memset(&server2, 0, sizeof(server2));
|
||||
if (getpeername(soc, (struct sockaddr *) &server2, &len) == 0) {
|
||||
if (getpeername(soc, &SOCaddr_sockaddr(server2), &len) == 0) {
|
||||
char dot[256 + 2];
|
||||
|
||||
SOCaddr_inetntoa(dot, 256, server2, sizeof(server2));
|
||||
sprintf(url, "%s:%d", dot, htons(SOCaddr_sinport(server2)));
|
||||
SOCaddr_inetntoa(dot, sizeof(dot), server2);
|
||||
sprintf(url, "%s:%d", dot, ntohs(SOCaddr_sinport(server2)));
|
||||
}
|
||||
}
|
||||
/* INFOS */
|
||||
@@ -191,21 +175,20 @@ HTSEXT_API int catch_url(T_SOC soc, char *url, char *method, char *data) {
|
||||
socinput(soc, line, 1000);
|
||||
if (strnotempty(line)) {
|
||||
if (sscanf(line, "%s %s %s", method, url, protocol) == 3) {
|
||||
char BIGSTK url_adr[HTS_URLMAXSIZE * 2];
|
||||
char BIGSTK url_fil[HTS_URLMAXSIZE * 2];
|
||||
lien_adrfil af;
|
||||
|
||||
// méthode en majuscule
|
||||
size_t i;
|
||||
int r = 0;
|
||||
|
||||
url_adr[0] = url_fil[0] = '\0';
|
||||
af.adr[0] = af.fil[0] = '\0';
|
||||
//
|
||||
for(i = 0; method[i] != '\0'; i++) {
|
||||
if ((method[i] >= 'a') && (method[i] <= 'z'))
|
||||
method[i] -= ('a' - 'A');
|
||||
}
|
||||
// adresse du lien
|
||||
if (ident_url_absolute(url, url_adr, url_fil) >= 0) {
|
||||
if (ident_url_absolute(url, &af) >= 0) {
|
||||
// Traitement des en-têtes
|
||||
char BIGSTK loc[HTS_URLMAXSIZE * 2];
|
||||
htsblk blkretour;
|
||||
@@ -214,7 +197,7 @@ HTSEXT_API int catch_url(T_SOC soc, char *url, char *method, char *data) {
|
||||
//memset(&blkretour, 0, sizeof(htsblk)); // effacer
|
||||
blkretour.location = loc; // si non nul, contiendra l'adresse véritable en cas de moved xx
|
||||
// Lire en têtes restants
|
||||
sprintf(data, "%s %s %s\r\n", method, url_fil, protocol);
|
||||
sprintf(data, "%s %s %s\r\n", method, af.fil, protocol);
|
||||
while(strnotempty(line)) {
|
||||
socinput(soc, line, 1000);
|
||||
treathead(NULL, NULL, NULL, &blkretour, line); // traiter
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/* ------------------------------------------------------------ */
|
||||
/*
|
||||
HTTrack Website Copier, Offline Browser for Windows and Unix
|
||||
Copyright (C) 1998-2013 Xavier Roche and other contributors
|
||||
Copyright (C) 1998-2014 Xavier Roche and other contributors
|
||||
|
||||
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
|
||||
@@ -43,12 +43,6 @@ Please visit our Website: http://www.httrack.com
|
||||
// Fonctions
|
||||
void socinput(T_SOC soc, char *s, int max);
|
||||
|
||||
#ifndef HTTRACK_DEFLIB
|
||||
HTSEXT_API T_SOC catch_url_init_std(int *port_prox, char *adr_prox);
|
||||
HTSEXT_API T_SOC catch_url_init(int *port, char *adr);
|
||||
HTSEXT_API int catch_url(T_SOC soc, char *url, char *method, char *data);
|
||||
#endif
|
||||
|
||||
#define CATCH_RESPONSE \
|
||||
"HTTP/1.0 200 OK\r\n"\
|
||||
"Content-type: text/html\r\n"\
|
||||
|
||||
119
src/htscharset.c
119
src/htscharset.c
@@ -1,7 +1,7 @@
|
||||
/* ------------------------------------------------------------ */
|
||||
/*
|
||||
HTTrack Website Copier, Offline Browser for Windows and Unix
|
||||
Copyright (C) 1998-2013 Xavier Roche and other contributors
|
||||
Copyright (C) 1998-2014 Xavier Roche and other contributors
|
||||
|
||||
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
|
||||
@@ -33,8 +33,19 @@ Please visit our Website: http://www.httrack.com
|
||||
#include "htscharset.h"
|
||||
#include "htsbase.h"
|
||||
#include "punycode.h"
|
||||
#include "htssafe.h"
|
||||
|
||||
#include <assert.h>
|
||||
#ifdef _WIN32
|
||||
#include <stddef.h>
|
||||
typedef unsigned __int32 uint32_t;
|
||||
typedef unsigned __int64 uint64_t;
|
||||
#elif (defined(SOLARIS) || defined(sun) || defined(HAVE_INTTYPES_H) \
|
||||
|| defined(BSD) || defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__NetBSD__) || defined(__FreeBSD_kernel__))
|
||||
#include <inttypes.h>
|
||||
#else
|
||||
#include <stdint.h>
|
||||
#endif
|
||||
#include <stdarg.h>
|
||||
|
||||
int hts_isStringAscii(const char *s, size_t size) {
|
||||
size_t i;
|
||||
@@ -415,7 +426,7 @@ static char* hts_codepageToUTF8(const char *codepage, const char *s) {
|
||||
if (dest != NULL) {
|
||||
const size_t len = hts_writeUTF8(uc, &dest[k], MAX_UTF);
|
||||
k += len;
|
||||
assert(k < capa);
|
||||
assertf(k < capa);
|
||||
}
|
||||
}
|
||||
dest[k] = '\0';
|
||||
@@ -442,7 +453,7 @@ static char *hts_convertStringCharset(const char *s, size_t size,
|
||||
const iconv_t cp = iconv_open(to, from);
|
||||
|
||||
if (cp != (iconv_t) - 1) {
|
||||
char *inbuf = (char *) s;
|
||||
char *inbuf = (char*) (uintptr_t) s; /* ugly iconv api, sheesh */
|
||||
size_t inbytesleft = size;
|
||||
size_t outbufCapa = 0;
|
||||
char *outbuf = NULL;
|
||||
@@ -724,43 +735,21 @@ static unsigned int nlz8(unsigned char x) {
|
||||
26 U+200000 U+3FFFFFF 5 111110xx
|
||||
31 U+4000000 U+7FFFFFFF 6 1111110x
|
||||
*/
|
||||
#define ADD_SEQ(UC, BITS, EMITTER) do { \
|
||||
/* number of data bits in first octet */ \
|
||||
const int bits = BITS % 6; \
|
||||
/* shift for first octet */ \
|
||||
const int shift0 = BITS - bits; \
|
||||
/* first octet */ \
|
||||
const unsigned char lead = \
|
||||
/* leading bits */ \
|
||||
( 0xff ^ ( ( 1 << ( bits + 1 ) ) - 1 ) ) \
|
||||
/* encoded bits */ \
|
||||
| ( ( (UC) >> shift0 ) & ( ( 1 << ( bits + 1 ) ) - 1 ) ) \
|
||||
; \
|
||||
/* further bytes are encoding 6 bits */ \
|
||||
const unsigned char second = \
|
||||
0x80 | ( ( (UC) >> ( shift0 - 6 ) ) & 0x3f ); \
|
||||
EMITTER(lead); \
|
||||
EMITTER(second); \
|
||||
if (BITS > 6*2) { \
|
||||
const unsigned char next = \
|
||||
0x80 | ( ( (UC) >> ( shift0 - 6*2 ) ) & 0x3f ); \
|
||||
EMITTER(next); \
|
||||
if (BITS > 6*3) { \
|
||||
const unsigned char next = \
|
||||
0x80 | ( ( (UC) >> ( shift0 - 6*3 ) ) & 0x3f ); \
|
||||
EMITTER(next); \
|
||||
if (BITS > 6*4) { \
|
||||
const unsigned char next = \
|
||||
0x80 | ( ( (UC) >> ( shift0 - 6*4 ) ) & 0x3f ); \
|
||||
EMITTER(next); \
|
||||
if (BITS > 6*5) { \
|
||||
const unsigned char next = \
|
||||
0x80 | ( ( (UC) >> ( shift0 - 6*5 ) ) & 0x3f ); \
|
||||
EMITTER(next); \
|
||||
} \
|
||||
} \
|
||||
} \
|
||||
} \
|
||||
#define ADD_FIRST_SEQ(UC, LEN, EMITTER) do { \
|
||||
/* first octet */ \
|
||||
const unsigned char lead = \
|
||||
/* leading bits: LEN "1" bits */ \
|
||||
~ ( ( 1 << (unsigned) ( 8 - LEN ) ) - 1 ) \
|
||||
/* encoded bits */ \
|
||||
| ( (UC) >> (unsigned) ( ( LEN - 1 ) * 6 ) ); \
|
||||
EMITTER(lead); \
|
||||
} while(0)
|
||||
|
||||
#define ADD_NEXT_SEQ(UC, SHIFT, EMITTER) do { \
|
||||
/* further bytes are encoding 6 bits */ \
|
||||
const unsigned char next = \
|
||||
0x80 | ( ( (UC) >> SHIFT ) & 0x3f ); \
|
||||
EMITTER(next); \
|
||||
} while(0)
|
||||
|
||||
/* UC is a constant. EMITTER is a macro function taking an unsigned int. */
|
||||
@@ -768,15 +757,30 @@ static unsigned int nlz8(unsigned char x) {
|
||||
if ((UC) < 0x80) { \
|
||||
EMITTER(((unsigned char) (UC))); \
|
||||
} else if ((UC) < 0x0800) { \
|
||||
ADD_SEQ(UC, 11, EMITTER); \
|
||||
ADD_FIRST_SEQ(UC, 2, EMITTER); \
|
||||
ADD_NEXT_SEQ(UC, 0, EMITTER); \
|
||||
} else if ((UC) < 0x10000) { \
|
||||
ADD_SEQ(UC, 16, EMITTER); \
|
||||
ADD_FIRST_SEQ(UC, 3, EMITTER); \
|
||||
ADD_NEXT_SEQ(UC, 6, EMITTER); \
|
||||
ADD_NEXT_SEQ(UC, 0, EMITTER); \
|
||||
} else if ((UC) < 0x200000) { \
|
||||
ADD_SEQ(UC, 21, EMITTER); \
|
||||
ADD_FIRST_SEQ(UC, 4, EMITTER); \
|
||||
ADD_NEXT_SEQ(UC, 12, EMITTER); \
|
||||
ADD_NEXT_SEQ(UC, 6, EMITTER); \
|
||||
ADD_NEXT_SEQ(UC, 0, EMITTER); \
|
||||
} else if ((UC) < 0x4000000) { \
|
||||
ADD_SEQ(UC, 26, EMITTER); \
|
||||
ADD_FIRST_SEQ(UC, 5, EMITTER); \
|
||||
ADD_NEXT_SEQ(UC, 18, EMITTER); \
|
||||
ADD_NEXT_SEQ(UC, 12, EMITTER); \
|
||||
ADD_NEXT_SEQ(UC, 6, EMITTER); \
|
||||
ADD_NEXT_SEQ(UC, 0, EMITTER); \
|
||||
} else { \
|
||||
ADD_SEQ(UC, 31, EMITTER); \
|
||||
ADD_FIRST_SEQ(UC, 6, EMITTER); \
|
||||
ADD_NEXT_SEQ(UC, 24, EMITTER); \
|
||||
ADD_NEXT_SEQ(UC, 18, EMITTER); \
|
||||
ADD_NEXT_SEQ(UC, 12, EMITTER); \
|
||||
ADD_NEXT_SEQ(UC, 6, EMITTER); \
|
||||
ADD_NEXT_SEQ(UC, 0, EMITTER); \
|
||||
} \
|
||||
} while(0)
|
||||
|
||||
@@ -967,31 +971,36 @@ char *hts_convertStringUTF8ToIDNA(const char *s, size_t size) {
|
||||
if (HTS_IS_LEADING_UTF8(c)) {
|
||||
/* commit sequence ? */
|
||||
if (utfSeq != (size_t) -1) {
|
||||
/* unicode character */
|
||||
punycode_uint uc = 0;
|
||||
|
||||
/* Reader: can read bytes up to j */
|
||||
#define RD ( utfSeq < j ? segData[utfSeq++] : -1 )
|
||||
|
||||
/* Writer: upon error, return FFFD (replacement character) */
|
||||
#define WR(C) uc = C != -1 ? (punycode_uint) C : (punycode_uint) 0xfffd
|
||||
#define WR(C) do { \
|
||||
if ((C) != -1) { \
|
||||
/* copy character */ \
|
||||
assertf(segOutputSize < segSize); \
|
||||
segInt[segOutputSize++] = (C); \
|
||||
} \
|
||||
/* In case of error, abort. */ \
|
||||
else { \
|
||||
FREE_BUFFER(); \
|
||||
return NULL; \
|
||||
} \
|
||||
} while(0)
|
||||
|
||||
/* Read Unicode character. */
|
||||
/* Read/Write Unicode character. */
|
||||
READ_UNICODE(RD, WR);
|
||||
#undef RD
|
||||
#undef WR
|
||||
|
||||
/* copy character */
|
||||
assert(segOutputSize < segSize);
|
||||
segInt[segOutputSize++] = uc;
|
||||
|
||||
/* not anymore in sequence */
|
||||
utfSeq = (size_t) -1;
|
||||
}
|
||||
|
||||
/* ascii ? */
|
||||
if (c < 0x80) {
|
||||
assert(segOutputSize < segSize);
|
||||
assertf(segOutputSize < segSize);
|
||||
segInt[segOutputSize] = c;
|
||||
if (c != 0) {
|
||||
segOutputSize++;
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/* ------------------------------------------------------------ */
|
||||
/*
|
||||
HTTrack Website Copier, Offline Browser for Windows and Unix
|
||||
Copyright (C) 1998-2013 Xavier Roche and other contributors
|
||||
Copyright (C) 1998-2014 Xavier Roche and other contributors
|
||||
|
||||
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
|
||||
|
||||
128
src/htsconcat.c
Normal file
128
src/htsconcat.c
Normal file
@@ -0,0 +1,128 @@
|
||||
/* ------------------------------------------------------------ */
|
||||
/*
|
||||
HTTrack Website Copier, Offline Browser for Windows and Unix
|
||||
Copyright (C) 1998-2013 Xavier Roche and other contributors
|
||||
|
||||
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 <http://www.gnu.org/licenses/>.
|
||||
|
||||
Important notes:
|
||||
|
||||
- We hereby ask people using this source NOT to use it in purpose of grabbing
|
||||
emails addresses, or collecting any other private information on persons.
|
||||
This would disgrace our work, and spoil the many hours we spent on it.
|
||||
|
||||
Please visit our Website: http://www.httrack.com
|
||||
*/
|
||||
|
||||
/* ------------------------------------------------------------ */
|
||||
/* File: Subroutines */
|
||||
/* Author: Xavier Roche */
|
||||
/* ------------------------------------------------------------ */
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "httrack.h"
|
||||
#include "httrack-library.h"
|
||||
|
||||
// concat, concatène deux chaines et renvoi le résultat
|
||||
// permet d'alléger grandement le code
|
||||
#undef concat
|
||||
HTSEXT_API char *concat(char *catbuff, size_t size, const char *a, const char *b) {
|
||||
size_t max = 0;
|
||||
|
||||
RUNTIME_TIME_CHECK_SIZE(size);
|
||||
|
||||
catbuff[0] = '\0';
|
||||
if (a != NULL && a[0] != '\0') {
|
||||
max += strlen(a);
|
||||
if (max + 1 >= size) {
|
||||
return catbuff;
|
||||
}
|
||||
strcat(catbuff, a);
|
||||
}
|
||||
if (b != NULL && b[0] != '\0') {
|
||||
max += strlen(b);
|
||||
if (max + 1 >= size) {
|
||||
return catbuff;
|
||||
}
|
||||
strcat(catbuff, b);
|
||||
}
|
||||
return catbuff;
|
||||
}
|
||||
|
||||
// conversion fichier / -> antislash
|
||||
static char *__fconv(char *a) {
|
||||
#if HTS_DOSNAME
|
||||
int i;
|
||||
|
||||
for(i = 0; a[i] != 0; i++)
|
||||
if (a[i] == '/') // Unix-to-DOS style
|
||||
a[i] = '\\';
|
||||
#endif
|
||||
return a;
|
||||
}
|
||||
|
||||
#undef fconcat
|
||||
#undef concat
|
||||
HTSEXT_API char *fconcat(char *catbuff, size_t size, const char *a, const char *b) {
|
||||
RUNTIME_TIME_CHECK_SIZE(size);
|
||||
return __fconv(concat(catbuff, size, a, b));
|
||||
}
|
||||
|
||||
#undef fconv
|
||||
HTSEXT_API char *fconv(char *catbuff, size_t size, const char *a) {
|
||||
RUNTIME_TIME_CHECK_SIZE(size);
|
||||
return __fconv(concat(catbuff, size, a, ""));
|
||||
}
|
||||
|
||||
/* / et \\ en / */
|
||||
static char *__fslash(char *a) {
|
||||
int i;
|
||||
|
||||
for(i = 0; a[i] != 0; i++)
|
||||
if (a[i] == '\\') // convertir
|
||||
a[i] = '/';
|
||||
return a;
|
||||
}
|
||||
|
||||
#undef fslash
|
||||
char *fslash(char *catbuff, size_t size, const char *a) {
|
||||
RUNTIME_TIME_CHECK_SIZE(size);
|
||||
return __fslash(concat(catbuff, size, a, NULL));
|
||||
}
|
||||
|
||||
// extension : html,gif..
|
||||
HTSEXT_API const char *get_ext(char *catbuff, size_t size, const char *fil) {
|
||||
size_t i, last;
|
||||
|
||||
RUNTIME_TIME_CHECK_SIZE(size);
|
||||
|
||||
for(i = 0, last = 0 ; fil[i] != '\0' && fil[i] != '?' ; i++) {
|
||||
if (fil[i] == '.') {
|
||||
last = i + 1;
|
||||
}
|
||||
}
|
||||
|
||||
if (last != 0 && i > last) {
|
||||
const size_t len = i - last;
|
||||
if (len < size) {
|
||||
catbuff[0] = '\0';
|
||||
strncat(catbuff, &fil[last], size);
|
||||
return catbuff;
|
||||
}
|
||||
}
|
||||
return "";
|
||||
}
|
||||
@@ -1,7 +1,7 @@
|
||||
/* ------------------------------------------------------------ */
|
||||
/*
|
||||
HTTrack Website Copier, Offline Browser for Windows and Unix
|
||||
Copyright (C) 1998-2013 Xavier Roche and other contributors
|
||||
Copyright (C) 1998-2014 Xavier Roche and other contributors
|
||||
|
||||
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
|
||||
|
||||
921
src/htscore.c
921
src/htscore.c
File diff suppressed because it is too large
Load Diff
182
src/htscore.h
182
src/htscore.h
@@ -1,7 +1,7 @@
|
||||
/* ------------------------------------------------------------ */
|
||||
/*
|
||||
HTTrack Website Copier, Offline Browser for Windows and Unix
|
||||
Copyright (C) 1998-2013 Xavier Roche and other contributors
|
||||
Copyright (C) 1998-2014 Xavier Roche and other contributors
|
||||
|
||||
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
|
||||
@@ -123,84 +123,30 @@ typedef struct filecreate_params filecreate_params;
|
||||
|
||||
// gestion hashage
|
||||
#include "htshash.h"
|
||||
#include "htsinthash.h"
|
||||
#include "coucal.h"
|
||||
|
||||
#include "htsdefines.h"
|
||||
|
||||
#include "hts-indextmpl.h"
|
||||
|
||||
// structure d'un lien
|
||||
#ifndef HTS_DEF_FWSTRUCT_lien_url
|
||||
#define HTS_DEF_FWSTRUCT_lien_url
|
||||
typedef struct lien_url lien_url;
|
||||
// adr, fil
|
||||
#ifndef HTS_DEF_FWSTRUCT_lien_adrfil
|
||||
#define HTS_DEF_FWSTRUCT_lien_adrfil
|
||||
typedef struct lien_adrfil lien_adrfil;
|
||||
#endif
|
||||
struct lien_url {
|
||||
char firstblock; // flag 1=premier malloc
|
||||
char link_import; // lien importé à la suite d'un moved - ne pas appliquer les règles classiques up/down
|
||||
int depth; // profondeur autorisée lien ; >0 forte 0=faible
|
||||
int pass2; // traiter après les autres, seconde passe. si == -1, lien traité en background
|
||||
int premier; // pointeur sur le premier lien qui a donné lieu aux autres liens du domaine
|
||||
int precedent; // pointeur sur le lien qui a donné lieu à ce lien précis
|
||||
//int moved; // pointeur sur moved
|
||||
int retry; // nombre de retry restants
|
||||
int testmode; // mode test uniquement, envoyer juste un head!
|
||||
char *adr; // adresse
|
||||
char *fil; // nom du fichier distant
|
||||
char *sav; // nom à sauver sur disque (avec chemin éventuel)
|
||||
char *cod; // chemin codebase éventuel si classe java
|
||||
char *former_adr; // adresse initiale (avant éventuel moved), peut être nulle
|
||||
char *former_fil; // nom du fichier distant initial (avant éventuel moved), peut être nul
|
||||
struct lien_adrfil {
|
||||
char adr[HTS_URLMAXSIZE * 2]; // adresse
|
||||
char fil[HTS_URLMAXSIZE * 2]; // nom du fichier distant
|
||||
};
|
||||
|
||||
// chargement de fichiers en 'arrière plan'
|
||||
#ifndef HTS_DEF_FWSTRUCT_lien_back
|
||||
#define HTS_DEF_FWSTRUCT_lien_back
|
||||
typedef struct lien_back lien_back;
|
||||
#endif
|
||||
struct lien_back {
|
||||
#if DEBUG_CHECKINT
|
||||
char magic;
|
||||
#endif
|
||||
char url_adr[HTS_URLMAXSIZE * 2]; // adresse
|
||||
char url_fil[HTS_URLMAXSIZE * 2]; // nom du fichier distant
|
||||
char url_sav[HTS_URLMAXSIZE * 2]; // nom à sauver sur disque (avec chemin éventuel)
|
||||
char referer_adr[HTS_URLMAXSIZE * 2]; // adresse host page referer
|
||||
char referer_fil[HTS_URLMAXSIZE * 2]; // fichier page referer
|
||||
char location_buffer[HTS_URLMAXSIZE * 2]; // "location" en cas de "moved" (302,..)
|
||||
char *tmpfile; // nom à sauver temporairement (compressé)
|
||||
char tmpfile_buffer[HTS_URLMAXSIZE * 2]; // buffer pour le nom à sauver temporairement
|
||||
char send_too[1024]; // données à envoyer en même temps que le header
|
||||
int status; // status (-1=non utilisé, 0: prêt, >0: opération en cours)
|
||||
int locked; // locked (to be used soon)
|
||||
int testmode; // mode de test
|
||||
int timeout; // gérer des timeouts? (!=0 : nombre de secondes)
|
||||
TStamp timeout_refresh; // si oui, time refresh
|
||||
int rateout; // timeout refresh? (!=0 : taux minimum toléré en octets/s)
|
||||
TStamp rateout_time; // si oui, date de départ
|
||||
LLint maxfile_nonhtml; // taille max d'un fichier non html
|
||||
LLint maxfile_html; // idem pour un ficheir html
|
||||
htsblk r; // structure htsblk de chaque objet en background
|
||||
int is_update; // mode update
|
||||
int head_request; // requète HEAD?
|
||||
LLint range_req_size; // range utilisé
|
||||
TStamp ka_time_start; // refresh time for KA
|
||||
//
|
||||
int http11; // L'en tête doit être signé HTTP/1.1 et non HTTP/1.0
|
||||
int is_chunk; // chunk?
|
||||
char *chunk_adr; // adresse chunk en cours de chargement
|
||||
LLint chunk_size; // taille chunk en cours de chargement
|
||||
LLint chunk_blocksize; // taille data declaree par le chunk
|
||||
LLint compressed_size; // taille compressés (stats uniquement)
|
||||
//
|
||||
//int links_index; // to access liens[links_index]
|
||||
//
|
||||
char info[256]; // éventuel status pour le ftp
|
||||
int stop_ftp; // flag stop pour ftp
|
||||
int finalized; // finalized (optim memory)
|
||||
int early_add; // was added before link heap saw it
|
||||
#if DEBUG_CHECKINT
|
||||
char magic2;
|
||||
// adr, fil, save
|
||||
#ifndef HTS_DEF_FWSTRUCT_lien_adrfilsave
|
||||
#define HTS_DEF_FWSTRUCT_lien_adrfilsave
|
||||
typedef struct lien_adrfilsave lien_adrfilsave;
|
||||
#endif
|
||||
struct lien_adrfilsave {
|
||||
lien_adrfil af;
|
||||
char save[HTS_URLMAXSIZE * 2]; // nom à sauver sur disque (avec chemin éventuel)
|
||||
};
|
||||
|
||||
#ifndef HTS_DEF_FWSTRUCT_struct_back
|
||||
@@ -210,7 +156,7 @@ typedef struct struct_back struct_back;
|
||||
struct struct_back {
|
||||
lien_back *lnk;
|
||||
int count;
|
||||
inthash ready;
|
||||
coucal ready;
|
||||
LLint ready_size_bytes;
|
||||
};
|
||||
|
||||
@@ -232,9 +178,9 @@ struct cache_back {
|
||||
FILE *txt; // liste des fichiers (info)
|
||||
char lastmodified[256];
|
||||
// HASH
|
||||
inthash hashtable;
|
||||
coucal hashtable;
|
||||
// HASH for tests (naming subsystem)
|
||||
inthash cached_tests;
|
||||
coucal cached_tests;
|
||||
// fichiers log optionnels
|
||||
FILE *log;
|
||||
FILE *errlog;
|
||||
@@ -255,13 +201,13 @@ typedef struct hash_struct hash_struct;
|
||||
#endif
|
||||
struct hash_struct {
|
||||
/* Links big array reference */
|
||||
const lien_url **liens;
|
||||
const lien_url *const*const*liens;
|
||||
/* Savename (case insensitive ; lowercased) */
|
||||
inthash sav;
|
||||
coucal sav;
|
||||
/* Address and path */
|
||||
inthash adrfil;
|
||||
coucal adrfil;
|
||||
/* Former address and path */
|
||||
inthash former_adrfil;
|
||||
coucal former_adrfil;
|
||||
/** Buffers **/
|
||||
int normalized;
|
||||
char normfil[HTS_URLMAXSIZE * 2];
|
||||
@@ -278,6 +224,20 @@ struct filecreate_params {
|
||||
char path[HTS_URLMAXSIZE * 2];
|
||||
};
|
||||
|
||||
/* Access macros. */
|
||||
#define heap(N) (opt->liens[N])
|
||||
#define heap_top_index() (opt->lien_tot - 1)
|
||||
#define heap_top() (heap(heap_top_index()))
|
||||
#define urladr() (heap(ptr)->adr)
|
||||
#define urlfil() (heap(ptr)->fil)
|
||||
#define savename() (heap(ptr)->sav)
|
||||
#define parenturladr() (heap(heap(ptr)->precedent)->adr)
|
||||
#define parenturlfil() (heap(heap(ptr)->precedent)->fil)
|
||||
#define parentsavename() (heap(heap(ptr)->precedent)->sav)
|
||||
#define relativeurladr() ((!parent_relative)?urladr():parenturladr())
|
||||
#define relativeurlfil() ((!parent_relative)?urlfil():parenturlfil())
|
||||
#define relativesavename() ((!parent_relative)?savename():parentsavename())
|
||||
|
||||
/* Library internal definictions */
|
||||
#ifdef HTS_INTERNAL_BYTECODE
|
||||
|
||||
@@ -298,31 +258,25 @@ HTS_STATIC int cache_readable(cache_back * cache) {
|
||||
/* Library internal definictions */
|
||||
#ifdef HTS_INTERNAL_BYTECODE
|
||||
|
||||
//
|
||||
#ifndef HTTRACK_DEFLIB
|
||||
HTSEXT_API int hts_is_parsing(httrackp * opt, int flag);
|
||||
HTSEXT_API int hts_is_testing(httrackp * opt);
|
||||
HTSEXT_API int hts_addurl(httrackp * opt, char **url);
|
||||
HTSEXT_API int hts_resetaddurl(httrackp * opt);
|
||||
HTSEXT_API int copy_htsopt(const httrackp * from, httrackp * to);
|
||||
HTSEXT_API char *hts_errmsg(httrackp * opt);
|
||||
HTSEXT_API int hts_setpause(httrackp * opt, int);
|
||||
|
||||
//
|
||||
HTSEXT_API int hts_is_exiting(httrackp * opt);
|
||||
HTSEXT_API int hts_request_stop(httrackp * opt, int force);
|
||||
|
||||
//
|
||||
HTSEXT_API int hts_cancel_file_push(httrackp * opt, const char *url);
|
||||
HTSEXT_API void hts_cancel_test(httrackp * opt);
|
||||
HTSEXT_API void hts_cancel_parsing(httrackp * opt);
|
||||
#endif
|
||||
|
||||
char *hts_cancel_file_pop(httrackp * opt);
|
||||
|
||||
#endif
|
||||
|
||||
//
|
||||
// add a link on the heap
|
||||
int hts_record_link(httrackp * opt,
|
||||
const char *address, const char *file, const char *save,
|
||||
const char *ref_address, const char *ref_file,
|
||||
const char *codebase);
|
||||
|
||||
// index of the latest added link
|
||||
size_t hts_record_link_latest(httrackp *opt);
|
||||
|
||||
// invalidate an entry
|
||||
void hts_invalidate_link(httrackp * opt, int lpos);
|
||||
|
||||
// wipe all records
|
||||
void hts_record_init(httrackp *opt);
|
||||
void hts_record_free(httrackp *opt);
|
||||
|
||||
//int httpmirror(char* url,int level,httrackp opt);
|
||||
int httpmirror(char *url1, httrackp * opt);
|
||||
@@ -332,8 +286,7 @@ int filesave(httrackp * opt, const char *adr, int len, const char *s,
|
||||
char *hts_cancel_file_pop(httrackp * opt);
|
||||
int check_fatal_io_errno(void);
|
||||
int engine_stats(void);
|
||||
void host_ban(httrackp * opt, lien_url ** liens, int ptr, int lien_tot,
|
||||
struct_back * sback, char *host);
|
||||
void host_ban(httrackp * opt, int ptr, struct_back * sback, const char *host);
|
||||
FILE *filecreate(filenote_strc * strct, const char *s);
|
||||
FILE *fileappend(filenote_strc * strct, const char *s);
|
||||
int filecreateempty(filenote_strc * strct, const char *filename);
|
||||
@@ -345,19 +298,14 @@ void usercommand(httrackp * opt, int exe, const char *cmd, const char *file,
|
||||
void usercommand_exe(const char *cmd, const char *file);
|
||||
int filters_init(char ***ptrfilters, int maxfilter, int filterinc);
|
||||
|
||||
#ifndef HTTRACK_DEFLIB
|
||||
HTSEXT_API int structcheck(const char *path);
|
||||
HTSEXT_API int structcheck_utf8(const char *path);
|
||||
HTSEXT_API int dir_exists(const char *path);
|
||||
#endif
|
||||
int fspc(httrackp * opt, FILE * fp, const char *type);
|
||||
char *next_token(char *p, int flag);
|
||||
|
||||
//
|
||||
char *readfile(char *fil);
|
||||
char *readfile2(char *fil, LLint * size);
|
||||
char *readfile_utf8(char *fil);
|
||||
char *readfile_or(char *fil, char *defaultdata);
|
||||
char *readfile(const char *fil);
|
||||
char *readfile2(const char *fil, LLint * size);
|
||||
char *readfile_utf8(const char *fil);
|
||||
char *readfile_or(const char *fil, const char *defaultdata);
|
||||
|
||||
#if 0
|
||||
void check_rate(TStamp stat_timestart, int maxrate);
|
||||
@@ -371,18 +319,11 @@ int liens_record(char *adr, char *fil, char *save, char *former_adr,
|
||||
int back_pluggable_sockets(struct_back * sback, httrackp * opt);
|
||||
int back_pluggable_sockets_strict(struct_back * sback, httrackp * opt);
|
||||
int back_fill(struct_back * sback, httrackp * opt, cache_back * cache,
|
||||
lien_url ** liens, int ptr, int numero_passe, int lien_tot);
|
||||
int backlinks_done(struct_back * sback, lien_url ** liens, int lien_tot,
|
||||
int ptr);
|
||||
int ptr, int numero_passe);
|
||||
int backlinks_done(const struct_back * sback, lien_url ** liens,
|
||||
int lien_tot, int ptr);
|
||||
int back_fillmax(struct_back * sback, httrackp * opt, cache_back * cache,
|
||||
lien_url ** liens, int ptr, int numero_passe, int lien_tot);
|
||||
|
||||
// cancel file
|
||||
#ifndef HTTRACK_DEFLIB
|
||||
HTSEXT_API int hts_cancel_file_push(httrackp * opt, const char *url);
|
||||
HTSEXT_API void hts_cancel_test(httrackp * opt);
|
||||
HTSEXT_API void hts_cancel_parsing(httrackp * opt);
|
||||
#endif
|
||||
int ptr, int numero_passe);
|
||||
|
||||
int ask_continue(httrackp * opt);
|
||||
int nombre_digit(int n);
|
||||
@@ -406,7 +347,6 @@ int htsAddLink(htsmoduleStruct * str, char *link);
|
||||
|
||||
// Void
|
||||
void voidf(void);
|
||||
|
||||
#define HTS_TOPINDEX "TOP_INDEX_HTTRACK"
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/* ------------------------------------------------------------ */
|
||||
/*
|
||||
HTTrack Website Copier, Offline Browser for Windows and Unix
|
||||
Copyright (C) 1998-2013 Xavier Roche and other contributors
|
||||
Copyright (C) 1998-2014 Xavier Roche and other contributors
|
||||
|
||||
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
|
||||
@@ -45,6 +45,7 @@ Please visit our Website: http://www.httrack.com
|
||||
#include "htszlib.h"
|
||||
#include "htscharset.h"
|
||||
#include "htsencoding.h"
|
||||
#include "htsmd5.h"
|
||||
|
||||
#include <ctype.h>
|
||||
#if USE_BEGINTHREAD
|
||||
@@ -85,7 +86,11 @@ extern int IPV6_resolver;
|
||||
ptr += (int) (strlen(argv[0])+2); \
|
||||
argc++
|
||||
|
||||
#define htsmain_free() do { if (url != NULL) { free(url); } } while(0)
|
||||
#define htsmain_free() do { \
|
||||
if (url != NULL) { \
|
||||
free(url); \
|
||||
} \
|
||||
} while(0)
|
||||
|
||||
#define ensureUrlCapacity(url, urlsize, size) do { \
|
||||
if (urlsize < size || url == NULL) { \
|
||||
@@ -125,8 +130,28 @@ HTSEXT_API int hts_main(int argc, char **argv) {
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int hts_main_internal(int argc, char **argv, httrackp * opt);
|
||||
|
||||
// Main, récupère les paramètres et appelle le robot
|
||||
HTSEXT_API int hts_main2(int argc, char **argv, httrackp * opt) {
|
||||
int code;
|
||||
|
||||
// Set ended state (3.48-14)
|
||||
hts_mutexlock(&opt->state.lock);
|
||||
opt->state.is_ended = 0;
|
||||
hts_mutexrelease(&opt->state.lock);
|
||||
|
||||
code = hts_main_internal(argc, argv, opt);
|
||||
|
||||
// Set ended state (3.48-14)
|
||||
hts_mutexlock(&opt->state.lock);
|
||||
opt->state.is_ended = 1;
|
||||
hts_mutexrelease(&opt->state.lock);
|
||||
|
||||
return code;
|
||||
}
|
||||
|
||||
static int hts_main_internal(int argc, char **argv, httrackp * opt) {
|
||||
char **x_argv = NULL; // Patch pour argv et argc: en cas de récupération de ligne de commande
|
||||
char *x_argvblk = NULL; // (reprise ou update)
|
||||
int x_ptr = 0; // offset
|
||||
@@ -180,7 +205,7 @@ HTSEXT_API int hts_main2(int argc, char **argv, httrackp * opt) {
|
||||
#ifndef HTS_HTTRACKDIR
|
||||
{
|
||||
char catbuff[CATBUFF_SIZE];
|
||||
char *path = fslash(catbuff, argv[0]);
|
||||
char *path = fslash(catbuff, sizeof(catbuff), argv[0]);
|
||||
char *a;
|
||||
|
||||
if ((a = strrchr(path, '/'))) {
|
||||
@@ -451,15 +476,18 @@ HTSEXT_API int hts_main2(int argc, char **argv, httrackp * opt) {
|
||||
else {
|
||||
if ((!fexist
|
||||
(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log),
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt),
|
||||
StringBuff(opt->path_log),
|
||||
"hts-cache/doit.log"))) || (argv_url > 0)) {
|
||||
if (!optinclude_file
|
||||
(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log), HTS_HTTRACKRC),
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt),
|
||||
StringBuff(opt->path_log), HTS_HTTRACKRC),
|
||||
&argc, argv, x_argvblk, &x_ptr))
|
||||
if (!optinclude_file(HTS_HTTRACKRC, &argc, argv, x_argvblk, &x_ptr)) {
|
||||
if (!optinclude_file
|
||||
(fconcat(OPT_GET_BUFF(opt), hts_gethome(), "/" HTS_HTTRACKRC),
|
||||
(fconcat(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt),
|
||||
hts_gethome(), "/" HTS_HTTRACKRC),
|
||||
&argc, argv, x_argvblk, &x_ptr)) {
|
||||
#ifdef HTS_HTTRACKCNF
|
||||
optinclude_file(HTS_HTTRACKCNF, &argc, argv, x_argvblk, &x_ptr);
|
||||
@@ -478,11 +506,13 @@ HTSEXT_API int hts_main2(int argc, char **argv, httrackp * opt) {
|
||||
/* load doit.log and insert in current command line */
|
||||
if (fexist
|
||||
(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log), "hts-cache/doit.log"))
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt),
|
||||
StringBuff(opt->path_log), "hts-cache/doit.log"))
|
||||
&& (argv_url <= 0)) {
|
||||
FILE *fp =
|
||||
fopen(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log),
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt),
|
||||
StringBuff(opt->path_log),
|
||||
"hts-cache/doit.log"), "rb");
|
||||
if (fp) {
|
||||
int insert_after = 1; /* insérer après nom au début */
|
||||
@@ -529,48 +559,58 @@ HTSEXT_API int hts_main2(int argc, char **argv, httrackp * opt) {
|
||||
#endif
|
||||
if (!fexist
|
||||
(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log), "hts-cache/new.zip"))) {
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt),
|
||||
StringBuff(opt->path_log), "hts-cache/new.zip"))) {
|
||||
if (fexist
|
||||
(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log), "hts-cache/old.zip"))) {
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt),
|
||||
StringBuff(opt->path_log), "hts-cache/old.zip"))) {
|
||||
rename(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log),
|
||||
"hts-cache/old.zip"), fconcat(OPT_GET_BUFF(opt),
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt),
|
||||
StringBuff(opt->path_log),
|
||||
"hts-cache/old.zip"), fconcat(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt),
|
||||
StringBuff(opt->path_log),
|
||||
"hts-cache/new.zip"));
|
||||
}
|
||||
} else
|
||||
if ((!fexist
|
||||
(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log), "hts-cache/new.dat")))
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt),
|
||||
StringBuff(opt->path_log), "hts-cache/new.dat")))
|
||||
||
|
||||
(!fexist
|
||||
(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log),
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt),
|
||||
StringBuff(opt->path_log),
|
||||
"hts-cache/new.ndx")))) {
|
||||
if ((fexist
|
||||
(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log), "hts-cache/old.dat")))
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt),
|
||||
StringBuff(opt->path_log), "hts-cache/old.dat")))
|
||||
&&
|
||||
(fexist
|
||||
(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log),
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt),
|
||||
StringBuff(opt->path_log),
|
||||
"hts-cache/old.ndx")))) {
|
||||
remove(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log),
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt),
|
||||
StringBuff(opt->path_log),
|
||||
"hts-cache/new.dat"));
|
||||
remove(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log),
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt),
|
||||
StringBuff(opt->path_log),
|
||||
"hts-cache/new.ndx"));
|
||||
//remove(fconcat(StringBuff(opt->path_log),"hts-cache/new.lst"));
|
||||
rename(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log),
|
||||
"hts-cache/old.dat"), fconcat(OPT_GET_BUFF(opt),
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt),
|
||||
StringBuff(opt->path_log),
|
||||
"hts-cache/old.dat"), fconcat(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt),
|
||||
StringBuff(opt->path_log),
|
||||
"hts-cache/new.dat"));
|
||||
rename(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log),
|
||||
"hts-cache/old.ndx"), fconcat(OPT_GET_BUFF(opt),
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log),
|
||||
"hts-cache/old.ndx"), fconcat(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt),
|
||||
StringBuff(opt->path_log),
|
||||
"hts-cache/new.ndx"));
|
||||
//rename(fconcat(StringBuff(opt->path_log),"hts-cache/old.lst"),fconcat(StringBuff(opt->path_log),"hts-cache/new.lst"));
|
||||
@@ -581,17 +621,20 @@ HTSEXT_API int hts_main2(int argc, char **argv, httrackp * opt) {
|
||||
if (!opt->quiet) {
|
||||
if (fexist
|
||||
(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log),
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt),
|
||||
StringBuff(opt->path_log),
|
||||
"hts-in_progress.lock"))) {
|
||||
/* Old cache */
|
||||
if ((fexist
|
||||
(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log),
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt),
|
||||
StringBuff(opt->path_log),
|
||||
"hts-cache/old.dat")))
|
||||
&&
|
||||
(fexist
|
||||
(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log),
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt),
|
||||
StringBuff(opt->path_log),
|
||||
"hts-cache/old.ndx")))) {
|
||||
if (opt->log != NULL) {
|
||||
fprintf(opt->log, "Warning!\n");
|
||||
@@ -623,109 +666,109 @@ HTSEXT_API int hts_main2(int argc, char **argv, httrackp * opt) {
|
||||
strcpybuff(argv[i] + 1, "");
|
||||
if (fexist
|
||||
(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log), "hts-log.txt")))
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log), "hts-log.txt")))
|
||||
remove(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log),
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log),
|
||||
"hts-log.txt"));
|
||||
if (fexist
|
||||
(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log), "hts-err.txt")))
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log), "hts-err.txt")))
|
||||
remove(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log),
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log),
|
||||
"hts-err.txt"));
|
||||
if (fexist
|
||||
(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_html), "index.html")))
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_html), "index.html")))
|
||||
remove(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_html),
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_html),
|
||||
"index.html"));
|
||||
/* */
|
||||
if (fexist
|
||||
(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log),
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log),
|
||||
"hts-cache/new.zip")))
|
||||
remove(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log),
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log),
|
||||
"hts-cache/new.zip"));
|
||||
if (fexist
|
||||
(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log),
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log),
|
||||
"hts-cache/old.zip")))
|
||||
remove(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log),
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log),
|
||||
"hts-cache/old.zip"));
|
||||
if (fexist
|
||||
(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log),
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log),
|
||||
"hts-cache/new.dat")))
|
||||
remove(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log),
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log),
|
||||
"hts-cache/new.dat"));
|
||||
if (fexist
|
||||
(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log),
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log),
|
||||
"hts-cache/new.ndx")))
|
||||
remove(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log),
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log),
|
||||
"hts-cache/new.ndx"));
|
||||
if (fexist
|
||||
(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log),
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log),
|
||||
"hts-cache/old.dat")))
|
||||
remove(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log),
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log),
|
||||
"hts-cache/old.dat"));
|
||||
if (fexist
|
||||
(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log),
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log),
|
||||
"hts-cache/old.ndx")))
|
||||
remove(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log),
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log),
|
||||
"hts-cache/old.ndx"));
|
||||
if (fexist
|
||||
(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log),
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log),
|
||||
"hts-cache/new.lst")))
|
||||
remove(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log),
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log),
|
||||
"hts-cache/new.lst"));
|
||||
if (fexist
|
||||
(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log),
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log),
|
||||
"hts-cache/old.lst")))
|
||||
remove(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log),
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log),
|
||||
"hts-cache/old.lst"));
|
||||
if (fexist
|
||||
(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log),
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log),
|
||||
"hts-cache/new.txt")))
|
||||
remove(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log),
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log),
|
||||
"hts-cache/new.txt"));
|
||||
if (fexist
|
||||
(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log),
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log),
|
||||
"hts-cache/old.txt")))
|
||||
remove(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log),
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log),
|
||||
"hts-cache/old.txt"));
|
||||
if (fexist
|
||||
(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log),
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log),
|
||||
"hts-cache/doit.log")))
|
||||
remove(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log),
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log),
|
||||
"hts-cache/doit.log"));
|
||||
if (fexist
|
||||
(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log),
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log),
|
||||
"hts-in_progress.lock")))
|
||||
remove(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log),
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log),
|
||||
"hts-in_progress.lock"));
|
||||
rmdir(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log), "hts-cache"));
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log), "hts-cache"));
|
||||
//
|
||||
} else if (strfield2(argv[i] + 2, "catchurl")) { // capture d'URL via proxy temporaire!
|
||||
argv_url = 1; // forcer a passer les parametres
|
||||
@@ -879,22 +922,27 @@ HTSEXT_API int hts_main2(int argc, char **argv, httrackp * opt) {
|
||||
// Présence d'un cache, que faire?..
|
||||
if ((fexist
|
||||
(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log), "hts-cache/new.zip")))
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt),
|
||||
StringBuff(opt->path_log), "hts-cache/new.zip")))
|
||||
||
|
||||
(fexist
|
||||
(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log), "hts-cache/new.dat"))
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt),
|
||||
StringBuff(opt->path_log), "hts-cache/new.dat"))
|
||||
&&
|
||||
fexist(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log),
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt),
|
||||
StringBuff(opt->path_log),
|
||||
"hts-cache/new.ndx")))
|
||||
) { // il existe déja un cache précédent.. renommer
|
||||
if (fexist(fconcat(OPT_GET_BUFF(opt), StringBuff(opt->path_log), "hts-cache/doit.log"))) { // un cache est présent
|
||||
if (fexist(fconcat(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt),
|
||||
StringBuff(opt->path_log), "hts-cache/doit.log"))) { // un cache est présent
|
||||
if (x_argvblk != NULL) {
|
||||
int m;
|
||||
|
||||
// établir mode - mode cache: 1 (cache valide) 2 (cache à vérifier)
|
||||
if (fexist(fconcat(OPT_GET_BUFF(opt), StringBuff(opt->path_log), "hts-in_progress.lock"))) { // cache prioritaire
|
||||
if (fexist(fconcat(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt),
|
||||
StringBuff(opt->path_log), "hts-in_progress.lock"))) { // cache prioritaire
|
||||
m = 1;
|
||||
} else {
|
||||
m = 2;
|
||||
@@ -952,23 +1000,24 @@ HTSEXT_API int hts_main2(int argc, char **argv, httrackp * opt) {
|
||||
}
|
||||
} else { // plus de 2 paramètres
|
||||
// un fichier log existe?
|
||||
if (fexist(fconcat(OPT_GET_BUFF(opt), StringBuff(opt->path_log), "hts-in_progress.lock"))) { // fichier lock?
|
||||
if (fexist(fconcat(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt),
|
||||
StringBuff(opt->path_log), "hts-in_progress.lock"))) { // fichier lock?
|
||||
//char s[32];
|
||||
|
||||
opt->cache = 1; // cache prioritaire
|
||||
if (opt->quiet == 0) {
|
||||
if ((fexist
|
||||
(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log),
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log),
|
||||
"hts-cache/new.zip")))
|
||||
||
|
||||
(fexist
|
||||
(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log),
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log),
|
||||
"hts-cache/new.dat"))
|
||||
&&
|
||||
fexist(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log),
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log),
|
||||
"hts-cache/new.ndx")))
|
||||
) {
|
||||
HT_REQUEST_START;
|
||||
@@ -987,22 +1036,22 @@ HTSEXT_API int hts_main2(int argc, char **argv, httrackp * opt) {
|
||||
} else
|
||||
if (fexist
|
||||
(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_html), "index.html"))) {
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_html), "index.html"))) {
|
||||
//char s[32];
|
||||
opt->cache = 2; // cache vient après test de validité
|
||||
if (opt->quiet == 0) {
|
||||
if ((fexist
|
||||
(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log),
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log),
|
||||
"hts-cache/new.zip")))
|
||||
||
|
||||
(fexist
|
||||
(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log),
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log),
|
||||
"hts-cache/new.dat"))
|
||||
&&
|
||||
fexist(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log),
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log),
|
||||
"hts-cache/new.ndx")))
|
||||
) {
|
||||
HT_REQUEST_START;
|
||||
@@ -1959,8 +2008,7 @@ HTSEXT_API int hts_main2(int argc, char **argv, httrackp * opt) {
|
||||
int found = 0;
|
||||
char *filter = NULL;
|
||||
cache_back cache;
|
||||
inthash cache_hashtable = inthash_new(0);
|
||||
int backupXFR = htsMemoryFastXfr;
|
||||
coucal cache_hashtable = coucal_new(0);
|
||||
int sendb = 0;
|
||||
|
||||
if (isdigit((unsigned char) *(com + 1))) {
|
||||
@@ -1974,7 +2022,6 @@ HTSEXT_API int hts_main2(int argc, char **argv, httrackp * opt) {
|
||||
hasFilter = 1;
|
||||
filter = argv[na];
|
||||
}
|
||||
htsMemoryFastXfr = 1; /* fast load */
|
||||
|
||||
memset(&cache, 0, sizeof(cache_back));
|
||||
cache.type = 1; // cache?
|
||||
@@ -1984,14 +2031,13 @@ HTSEXT_API int hts_main2(int argc, char **argv, httrackp * opt) {
|
||||
cache.hashtable = (void *) cache_hashtable; /* copy backcache hash */
|
||||
cache.ro = 1; /* read only */
|
||||
if (cache.hashtable) {
|
||||
char BIGSTK adr[HTS_URLMAXSIZE * 2];
|
||||
char BIGSTK fil[HTS_URLMAXSIZE * 2];
|
||||
lien_adrfilsave afs;
|
||||
char BIGSTK url[HTS_URLMAXSIZE * 2];
|
||||
char linepos[256];
|
||||
int pos;
|
||||
char *cacheNdx =
|
||||
readfile(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log),
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log),
|
||||
"hts-cache/new.ndx"));
|
||||
cache_init(&cache, opt); /* load cache */
|
||||
if (cacheNdx != NULL) {
|
||||
@@ -2008,52 +2054,50 @@ HTSEXT_API int hts_main2(int argc, char **argv, httrackp * opt) {
|
||||
/* */
|
||||
a++;
|
||||
/* read "host/file" */
|
||||
a += binput(a, adr, HTS_URLMAXSIZE);
|
||||
a += binput(a, fil, HTS_URLMAXSIZE);
|
||||
a += binput(a, afs.af.adr, HTS_URLMAXSIZE);
|
||||
a += binput(a, afs.af.fil, HTS_URLMAXSIZE);
|
||||
url[0] = '\0';
|
||||
if (!link_has_authority(adr))
|
||||
if (!link_has_authority(afs.af.adr))
|
||||
strcatbuff(url, "http://");
|
||||
strcatbuff(url, adr);
|
||||
strcatbuff(url, fil);
|
||||
strcatbuff(url, afs.af.adr);
|
||||
strcatbuff(url, afs.af.fil);
|
||||
/* read position */
|
||||
a += binput(a, linepos, 200);
|
||||
sscanf(linepos, "%d", &pos);
|
||||
if (!hasFilter
|
||||
|| (strjoker(url, filter, NULL, NULL) != NULL)
|
||||
) {
|
||||
r = cache_read_ro(opt, &cache, adr, fil, "", NULL); // lire entrée cache + data
|
||||
r = cache_read_ro(opt, &cache, afs.af.adr, afs.af.fil, "", NULL); // lire entrée cache + data
|
||||
if (r.statuscode != -1) { // No errors
|
||||
found++;
|
||||
if (!hasFilter) {
|
||||
fprintf(stdout, "%s%s%s\r\n",
|
||||
(link_has_authority(adr)) ? "" :
|
||||
"http://", adr, fil);
|
||||
(link_has_authority(afs.af.adr)) ? "" :
|
||||
"http://", afs.af.adr, afs.af.fil);
|
||||
} else {
|
||||
char msg[256], cdate[256];
|
||||
char BIGSTK sav[HTS_URLMAXSIZE * 2];
|
||||
|
||||
infostatuscode(msg, r.statuscode);
|
||||
time_gmt_rfc822(cdate);
|
||||
|
||||
fprintf(stdout, "HTTP/1.1 %d %s\r\n",
|
||||
r.statuscode, r.msg[0] ? r.msg : msg);
|
||||
fprintf(stdout, "X-Host: %s\r\n", adr);
|
||||
fprintf(stdout, "X-File: %s\r\n", fil);
|
||||
fprintf(stdout, "X-Host: %s\r\n", afs.af.adr);
|
||||
fprintf(stdout, "X-File: %s\r\n", afs.af.fil);
|
||||
fprintf(stdout, "X-URL: %s%s%s\r\n",
|
||||
(link_has_authority(adr)) ? "" :
|
||||
"http://", adr, fil);
|
||||
(link_has_authority(afs.af.adr)) ? "" :
|
||||
"http://", afs.af.adr, afs.af.fil);
|
||||
if (url_savename
|
||||
(adr, fil, sav, /*former_adr */ NULL,
|
||||
/*former_fil */ NULL, /*referer_adr */
|
||||
(&afs, /*former */ NULL,
|
||||
/*referer_adr */
|
||||
NULL, /*referer_fil */ NULL,
|
||||
/*opt */ opt, /*liens */ NULL,
|
||||
/*lien_tot */ 0, /*sback */ NULL,
|
||||
/*opt */ opt, /*sback */ NULL,
|
||||
/*cache */ &cache, /*hash */ NULL, /*ptr */
|
||||
0, /*numero_passe */ 0, /*mime_type */
|
||||
NULL) != -1) {
|
||||
if (fexist(sav)) {
|
||||
if (fexist(afs.save)) {
|
||||
fprintf(stdout, "Content-location: %s\r\n",
|
||||
sav);
|
||||
afs.save);
|
||||
}
|
||||
}
|
||||
fprintf(stdout, "Date: %s\r\n", cdate);
|
||||
@@ -2126,7 +2170,6 @@ HTSEXT_API int hts_main2(int argc, char **argv, httrackp * opt) {
|
||||
(hasFilter) ? " for '" : "",
|
||||
(hasFilter) ? filter : "", (hasFilter) ? "'" : "");
|
||||
}
|
||||
htsMemoryFastXfr = backupXFR;
|
||||
return 0;
|
||||
}
|
||||
break;
|
||||
@@ -2139,13 +2182,8 @@ HTSEXT_API int hts_main2(int argc, char **argv, httrackp * opt) {
|
||||
return 0;
|
||||
break;
|
||||
case 'X':
|
||||
#ifndef STRDEBUG
|
||||
fprintf(stderr,
|
||||
"warning: no string debugging support built, option has no effect\n");
|
||||
#endif
|
||||
htsMemoryFastXfr = 1;
|
||||
fprintf(stderr, "warning: option has no effect\n");
|
||||
if (*(com + 1) == '0') {
|
||||
htsMemoryFastXfr = 0;
|
||||
com++;
|
||||
}
|
||||
break;
|
||||
@@ -2157,22 +2195,22 @@ HTSEXT_API int hts_main2(int argc, char **argv, httrackp * opt) {
|
||||
|
||||
if (fexist
|
||||
(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log),
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log),
|
||||
"hts-cache/new.zip"))) {
|
||||
name =
|
||||
fconcat(OPT_GET_BUFF(opt), StringBuff(opt->path_log),
|
||||
fconcat(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log),
|
||||
"hts-cache/new.zip");
|
||||
} else
|
||||
if (fexist
|
||||
(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log),
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log),
|
||||
"hts-cache/old.zip"))) {
|
||||
name =
|
||||
fconcat(OPT_GET_BUFF(opt), StringBuff(opt->path_log),
|
||||
fconcat(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log),
|
||||
"hts-cache/old.zip");
|
||||
} else {
|
||||
fprintf(stderr, "* error: no cache found in %s\n",
|
||||
fconcat(OPT_GET_BUFF(opt),
|
||||
fconcat(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt),
|
||||
StringBuff(opt->path_log),
|
||||
"hts-cache/new.zip"));
|
||||
return 1;
|
||||
@@ -2180,14 +2218,14 @@ HTSEXT_API int hts_main2(int argc, char **argv, httrackp * opt) {
|
||||
fprintf(stderr, "Cache: trying to repair %s\n", name);
|
||||
if (unzRepair
|
||||
(name,
|
||||
fconcat(OPT_GET_BUFF(opt), StringBuff(opt->path_log),
|
||||
fconcat(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log),
|
||||
"hts-cache/repair.zip"),
|
||||
fconcat(OPT_GET_BUFF(opt), StringBuff(opt->path_log),
|
||||
fconcat(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log),
|
||||
"hts-cache/repair.tmp"), &repaired,
|
||||
&repairedBytes) == Z_OK) {
|
||||
unlink(name);
|
||||
rename(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log),
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log),
|
||||
"hts-cache/repair.zip"), name);
|
||||
fprintf(stderr,
|
||||
"Cache: %d bytes successfully recovered in %d entries\n",
|
||||
@@ -2394,6 +2432,7 @@ HTSEXT_API int hts_main2(int argc, char **argv, httrackp * opt) {
|
||||
return 0;
|
||||
break;
|
||||
case '7': // hashtable selftest: httrack -#7 nb_entries
|
||||
md5selftest();
|
||||
if (++na < argc) {
|
||||
char *const snum = strdup(argv[na]);
|
||||
unsigned long count = 0;
|
||||
@@ -2487,7 +2526,7 @@ HTSEXT_API int hts_main2(int argc, char **argv, httrackp * opt) {
|
||||
} else {
|
||||
capa <<= 1;
|
||||
}
|
||||
strings = realloc(strings, capa*sizeof(char*));
|
||||
strings = (const char **) realloc((void*) strings, capa*sizeof(char*));
|
||||
}
|
||||
strings[count++] = &buff[last];
|
||||
last = i + 1;
|
||||
@@ -2500,7 +2539,7 @@ HTSEXT_API int hts_main2(int argc, char **argv, httrackp * opt) {
|
||||
|
||||
/* successfully read */
|
||||
if (count > 0) {
|
||||
inthash hashtable = inthash_new(0);
|
||||
coucal hashtable = coucal_new(0);
|
||||
size_t loop;
|
||||
for(loop = 0 ; bench[loop].type != DO_END ; loop++) {
|
||||
size_t i;
|
||||
@@ -2510,7 +2549,11 @@ HTSEXT_API int hts_main2(int argc, char **argv, httrackp * opt) {
|
||||
FMT();
|
||||
if (bench[loop].type == DO_ADD
|
||||
|| bench[loop].type == DO_DRY_ADD) {
|
||||
result = inthash_write(hashtable, name, (uintptr_t) expected);
|
||||
size_t k;
|
||||
result = coucal_write(hashtable, name, (uintptr_t) expected);
|
||||
for(k = 0 ; k < /* stash_size*2 */ 32 ; k++) {
|
||||
(void) coucal_write(hashtable, name, (uintptr_t) expected);
|
||||
}
|
||||
/* revert logic */
|
||||
if (bench[loop].type == DO_DRY_ADD) {
|
||||
result = result ? 0 : 1;
|
||||
@@ -2518,7 +2561,11 @@ HTSEXT_API int hts_main2(int argc, char **argv, httrackp * opt) {
|
||||
}
|
||||
else if (bench[loop].type == DO_DEL
|
||||
|| bench[loop].type == DO_DRY_DEL) {
|
||||
result = inthash_remove(hashtable, name);
|
||||
size_t k;
|
||||
result = coucal_remove(hashtable, name);
|
||||
for(k = 0 ; k < /* stash_size*2 */ 32 ; k++) {
|
||||
(void) coucal_remove(hashtable, name);
|
||||
}
|
||||
/* revert logic */
|
||||
if (bench[loop].type == DO_DRY_DEL) {
|
||||
result = result ? 0 : 1;
|
||||
@@ -2527,7 +2574,7 @@ HTSEXT_API int hts_main2(int argc, char **argv, httrackp * opt) {
|
||||
else if (bench[loop].type == TEST_ADD
|
||||
|| bench[loop].type == TEST_DEL) {
|
||||
intptr_t value = -1;
|
||||
result = inthash_readptr(hashtable, name, &value);
|
||||
result = coucal_readptr(hashtable, name, &value);
|
||||
if (bench[loop].type == TEST_ADD && result
|
||||
&& value != expected) {
|
||||
fprintf(stderr, "value failed for %s (expected %ld, got %ld)\n",
|
||||
@@ -2550,10 +2597,10 @@ HTSEXT_API int hts_main2(int argc, char **argv, httrackp * opt) {
|
||||
}
|
||||
}
|
||||
}
|
||||
inthash_delete(&hashtable);
|
||||
coucal_delete(&hashtable);
|
||||
fprintf(stderr, "all hashtable tests were successful!\n");
|
||||
} else {
|
||||
fprintf(stderr, "Malformed number");
|
||||
fprintf(stderr, "Malformed number\n");
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
#undef FMT
|
||||
@@ -2684,7 +2731,6 @@ HTSEXT_API int hts_main2(int argc, char **argv, httrackp * opt) {
|
||||
|
||||
} else { // URL/filters
|
||||
char catbuff[CATBUFF_SIZE];
|
||||
char BIGSTK tempo[CATBUFF_SIZE];
|
||||
const int urlSize = (int) strlen(argv[na]);
|
||||
const int capa = (int) (strlen(url) + urlSize + 32);
|
||||
|
||||
@@ -2693,9 +2739,7 @@ HTSEXT_API int hts_main2(int argc, char **argv, httrackp * opt) {
|
||||
ensureUrlCapacity(url, url_sz, capa);
|
||||
if (strnotempty(url))
|
||||
strcatbuff(url, " "); // espace de séparation
|
||||
strcpybuff(tempo, unescape_http_unharm(catbuff, argv[na], 1));
|
||||
escape_spc_url(tempo);
|
||||
strcatbuff(url, tempo);
|
||||
append_escape_spc_url(unescape_http_unharm(catbuff, sizeof(catbuff), argv[na], 1), url, url_sz);
|
||||
}
|
||||
} // if argv=- etc.
|
||||
|
||||
@@ -2737,37 +2781,37 @@ HTSEXT_API int hts_main2(int argc, char **argv, httrackp * opt) {
|
||||
// en cas de présence des deux versions, garder la version la plus avancée,
|
||||
// cad la version contenant le plus de fichiers
|
||||
if (opt->cache) {
|
||||
if (fexist(fconcat(OPT_GET_BUFF(opt), StringBuff(opt->path_log), "hts-in_progress.lock"))) { // problemes..
|
||||
if (fexist(fconcat(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log), "hts-in_progress.lock"))) { // problemes..
|
||||
if (fexist
|
||||
(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log),
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log),
|
||||
"hts-cache/new.dat"))) {
|
||||
if (fexist
|
||||
(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log),
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log),
|
||||
"hts-cache/old.zip"))) {
|
||||
if (fsize
|
||||
(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log),
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log),
|
||||
"hts-cache/new.zip")) < 32768) {
|
||||
if (fsize
|
||||
(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log),
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log),
|
||||
"hts-cache/old.zip")) > 65536) {
|
||||
if (fsize
|
||||
(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log),
|
||||
"hts-cache/old.zip")) > fsize(fconcat(OPT_GET_BUFF(opt),
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log),
|
||||
"hts-cache/old.zip")) > fsize(fconcat(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt),
|
||||
StringBuff(opt->
|
||||
path_log),
|
||||
"hts-cache/new.zip")))
|
||||
{
|
||||
remove(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log),
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log),
|
||||
"hts-cache/new.zip"));
|
||||
rename(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log),
|
||||
"hts-cache/old.zip"), fconcat(OPT_GET_BUFF(opt),
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log),
|
||||
"hts-cache/old.zip"), fconcat(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt),
|
||||
StringBuff(opt->path_log),
|
||||
"hts-cache/new.zip"));
|
||||
}
|
||||
@@ -2777,53 +2821,53 @@ HTSEXT_API int hts_main2(int argc, char **argv, httrackp * opt) {
|
||||
} else
|
||||
if (fexist
|
||||
(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log),
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log),
|
||||
"hts-cache/new.dat"))
|
||||
&&
|
||||
fexist(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log),
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log),
|
||||
"hts-cache/new.ndx"))) {
|
||||
if (fexist
|
||||
(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log),
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log),
|
||||
"hts-cache/old.dat"))
|
||||
&&
|
||||
fexist(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log),
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log),
|
||||
"hts-cache/old.ndx"))) {
|
||||
// switcher si new<32Ko et old>65Ko (tailles arbitraires) ?
|
||||
// ce cas est peut être une erreur ou un crash d'un miroir ancien, prendre
|
||||
// alors l'ancien cache
|
||||
if (fsize
|
||||
(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log),
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log),
|
||||
"hts-cache/new.dat")) < 32768) {
|
||||
if (fsize
|
||||
(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log),
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log),
|
||||
"hts-cache/old.dat")) > 65536) {
|
||||
if (fsize
|
||||
(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log),
|
||||
"hts-cache/old.dat")) > fsize(fconcat(OPT_GET_BUFF(opt),
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log),
|
||||
"hts-cache/old.dat")) > fsize(fconcat(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt),
|
||||
StringBuff(opt->
|
||||
path_log),
|
||||
"hts-cache/new.dat")))
|
||||
{
|
||||
remove(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log),
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log),
|
||||
"hts-cache/new.dat"));
|
||||
remove(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log),
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log),
|
||||
"hts-cache/new.ndx"));
|
||||
rename(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log),
|
||||
"hts-cache/old.dat"), fconcat(OPT_GET_BUFF(opt),
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log),
|
||||
"hts-cache/old.dat"), fconcat(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt),
|
||||
StringBuff(opt->path_log),
|
||||
"hts-cache/new.dat"));
|
||||
rename(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log),
|
||||
"hts-cache/old.ndx"), fconcat(OPT_GET_BUFF(opt),
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log),
|
||||
"hts-cache/old.ndx"), fconcat(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt),
|
||||
StringBuff(opt->path_log),
|
||||
"hts-cache/new.ndx"));
|
||||
//} else { // ne rien faire
|
||||
@@ -2840,7 +2884,7 @@ HTSEXT_API int hts_main2(int argc, char **argv, httrackp * opt) {
|
||||
if (_DEBUG_HEAD) {
|
||||
ioinfo =
|
||||
fopen(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log), "hts-ioinfo.txt"),
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log), "hts-ioinfo.txt"),
|
||||
"wb");
|
||||
}
|
||||
|
||||
@@ -2857,26 +2901,26 @@ HTSEXT_API int hts_main2(int argc, char **argv, httrackp * opt) {
|
||||
structcheck(StringBuff(opt->path_log));
|
||||
if (fexist
|
||||
(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log), "hts-log.txt")))
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log), "hts-log.txt")))
|
||||
remove(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log), "hts-log.txt"));
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log), "hts-log.txt"));
|
||||
if (fexist
|
||||
(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log), "hts-err.txt")))
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log), "hts-err.txt")))
|
||||
remove(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log), "hts-err.txt"));
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log), "hts-err.txt"));
|
||||
|
||||
/* Check FS directory structure created */
|
||||
structcheck(StringBuff(opt->path_log));
|
||||
|
||||
opt->log =
|
||||
fopen(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log), "hts-log.txt"),
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log), "hts-log.txt"),
|
||||
"w");
|
||||
if (httrack_logmode == 2)
|
||||
opt->errlog =
|
||||
fopen(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log), "hts-err.txt"),
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log), "hts-err.txt"),
|
||||
"w");
|
||||
else
|
||||
opt->errlog = opt->log;
|
||||
@@ -2884,7 +2928,7 @@ HTSEXT_API int hts_main2(int argc, char **argv, httrackp * opt) {
|
||||
char s[HTS_CDLMAXSIZE + 256];
|
||||
|
||||
sprintf(s, "Unable to create log file %s",
|
||||
fconcat(OPT_GET_BUFF(opt), StringBuff(opt->path_log),
|
||||
fconcat(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log),
|
||||
"hts-log.txt"));
|
||||
HTS_PANIC_PRINTF(s);
|
||||
htsmain_free();
|
||||
@@ -2893,7 +2937,7 @@ HTSEXT_API int hts_main2(int argc, char **argv, httrackp * opt) {
|
||||
char s[HTS_CDLMAXSIZE + 256];
|
||||
|
||||
sprintf(s, "Unable to create log file %s",
|
||||
fconcat(OPT_GET_BUFF(opt), StringBuff(opt->path_log),
|
||||
fconcat(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log),
|
||||
"hts-err.txt"));
|
||||
HTS_PANIC_PRINTF(s);
|
||||
htsmain_free();
|
||||
@@ -2918,7 +2962,7 @@ HTSEXT_API int hts_main2(int argc, char **argv, httrackp * opt) {
|
||||
{
|
||||
FILE *fp =
|
||||
fopen(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log),
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log),
|
||||
"hts-cache/readme.txt"), "wb");
|
||||
if (fp) {
|
||||
fprintf(fp, "What's in this folder?" LF);
|
||||
@@ -2943,7 +2987,7 @@ HTSEXT_API int hts_main2(int argc, char **argv, httrackp * opt) {
|
||||
}
|
||||
|
||||
strcpy(n_lock,
|
||||
fconcat(OPT_GET_BUFF(opt), StringBuff(opt->path_log),
|
||||
fconcat(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log),
|
||||
"hts-in_progress.lock"));
|
||||
//sprintf(n_lock,fconcat(OPT_GET_BUFF(opt), StringBuff(opt->path_log),"hts-in_progress.lock"),n);
|
||||
/*do {
|
||||
@@ -2960,8 +3004,8 @@ HTSEXT_API int hts_main2(int argc, char **argv, httrackp * opt) {
|
||||
} */
|
||||
|
||||
// vérifier existence de la structure
|
||||
structcheck(fconcat(OPT_GET_BUFF(opt), StringBuff(opt->path_html), "/"));
|
||||
structcheck(fconcat(OPT_GET_BUFF(opt), StringBuff(opt->path_log), "/"));
|
||||
structcheck(fconcat(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_html), "/"));
|
||||
structcheck(fconcat(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log), "/"));
|
||||
|
||||
// reprise/update
|
||||
if (opt->cache) {
|
||||
@@ -2970,15 +3014,15 @@ HTSEXT_API int hts_main2(int argc, char **argv, httrackp * opt) {
|
||||
|
||||
#ifdef _WIN32
|
||||
mkdir(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log), "hts-cache"));
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log), "hts-cache"));
|
||||
#else
|
||||
mkdir(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log), "hts-cache"),
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log), "hts-cache"),
|
||||
HTS_PROTECT_FOLDER);
|
||||
#endif
|
||||
fp =
|
||||
fopen(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log),
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log),
|
||||
"hts-cache/doit.log"), "wb");
|
||||
if (fp) {
|
||||
for(i = 0 + 1; i < argc; i++) {
|
||||
@@ -3189,7 +3233,7 @@ HTSEXT_API int hts_main2(int argc, char **argv, httrackp * opt) {
|
||||
|
||||
for(dir =
|
||||
opendir(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log),
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log),
|
||||
CACHE_REFNAME));
|
||||
dir != NULL && (entry = readdir(dir)) != NULL;) {
|
||||
if (entry->d_name[0] != '\0' && entry->d_name[0] != '.') {
|
||||
@@ -3197,7 +3241,7 @@ HTSEXT_API int hts_main2(int argc, char **argv, httrackp * opt) {
|
||||
|
||||
sprintf(f, "%s/%s", CACHE_REFNAME, entry->d_name);
|
||||
(void)
|
||||
unlink(fconcat(OPT_GET_BUFF(opt), StringBuff(opt->path_log), f));
|
||||
unlink(fconcat(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log), f));
|
||||
}
|
||||
}
|
||||
if (dir != NULL) {
|
||||
@@ -3205,7 +3249,7 @@ HTSEXT_API int hts_main2(int argc, char **argv, httrackp * opt) {
|
||||
}
|
||||
(void)
|
||||
rmdir(fconcat
|
||||
(OPT_GET_BUFF(opt), StringBuff(opt->path_log), CACHE_REFNAME));
|
||||
(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), StringBuff(opt->path_log), CACHE_REFNAME));
|
||||
}
|
||||
|
||||
/* Info for wrappers */
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/* ------------------------------------------------------------ */
|
||||
/*
|
||||
HTTrack Website Copier, Offline Browser for Windows and Unix
|
||||
Copyright (C) 1998-2013 Xavier Roche and other contributors
|
||||
Copyright (C) 1998-2014 Xavier Roche and other contributors
|
||||
|
||||
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
|
||||
@@ -43,11 +43,6 @@ Please visit our Website: http://www.httrack.com
|
||||
|
||||
/* Library internal definictions */
|
||||
#ifdef HTS_INTERNAL_BYTECODE
|
||||
// Main, récupère les paramètres et appelle le robot
|
||||
#ifndef HTTRACK_DEFLIB
|
||||
HTSEXT_API int hts_main(int argc, char **argv);
|
||||
HTSEXT_API int hts_main2(int argc, char **argv, httrackp * opt);
|
||||
#endif
|
||||
|
||||
int cmdl_opt(char *s);
|
||||
int check_path(String * s, char *defaultname);
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/* ------------------------------------------------------------ */
|
||||
/*
|
||||
HTTrack Website Copier, Offline Browser for Windows and Unix
|
||||
Copyright (C) 1998-2013 Xavier Roche and other contributors
|
||||
Copyright (C) 1998-2014 Xavier Roche and other contributors
|
||||
|
||||
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
|
||||
@@ -231,8 +231,15 @@ struct t_hts_callback_ref {
|
||||
size_t offset;
|
||||
};
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
extern const t_hts_htmlcheck_callbacks default_callbacks;
|
||||
extern const t_hts_callback_ref default_callbacks_ref[];
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#define HT_PRINT(A) strcatbuff(opt->state.HTbuff,A);
|
||||
#define HT_REQUEST_START opt->state.HTbuff[0]='\0';
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/* ------------------------------------------------------------ */
|
||||
/*
|
||||
HTTrack Website Copier, Offline Browser for Windows and Unix
|
||||
Copyright (C) 1998-2013 Xavier Roche and other contributors
|
||||
Copyright (C) 1998-2014 Xavier Roche and other contributors
|
||||
|
||||
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
|
||||
@@ -30,10 +30,9 @@ Please visit our Website: http://www.httrack.com
|
||||
/* Author: Xavier Roche */
|
||||
/* ------------------------------------------------------------ */
|
||||
|
||||
#include <assert.h>
|
||||
|
||||
#include "htscharset.h"
|
||||
#include "htsencoding.h"
|
||||
#include "htssafe.h"
|
||||
|
||||
/* static int decode_entity(const unsigned int hash, const size_t len);
|
||||
*/
|
||||
@@ -67,7 +66,7 @@ int hts_unescapeEntitiesWithCharset(const char *src, char *dest, const size_t ma
|
||||
int hex;
|
||||
unsigned int hash;
|
||||
|
||||
assert(max != 0);
|
||||
assertf(max != 0);
|
||||
for(i = 0, j = 0, ampStart = (size_t) -1, ampStartDest = 0,
|
||||
uc = -1, hex = 0, hash = 0 ; src[i] != '\0' ; i++) {
|
||||
/* start of entity */
|
||||
@@ -209,8 +208,8 @@ int hts_unescapeUrlSpecial(const char *src, char *dest, const size_t max,
|
||||
int seenQuery = 0;
|
||||
char utfBuffer[32];
|
||||
|
||||
assert(src != dest);
|
||||
assert(max != 0);
|
||||
assertf(src != dest);
|
||||
assertf(max != 0);
|
||||
|
||||
for(i = 0, j = 0, k = 0, utfBufferJ = 0, utfBufferSize = 0,
|
||||
lastI = (size_t) -1, lastJ = (size_t) -1
|
||||
@@ -271,7 +270,7 @@ int hts_unescapeUrlSpecial(const char *src, char *dest, const size_t max,
|
||||
/* First character */
|
||||
if (k == 0) {
|
||||
/* New destination-centric offset of utf-8 buffer beginning */
|
||||
if (i == lastI + 2) { /* just read a %xx */
|
||||
if (lastI != (size_t) -1 && i == lastI + 2) { /* just read a %xx */
|
||||
utfBufferJ = lastJ; /* position of % */
|
||||
} else {
|
||||
utfBufferJ = j; /* current position otherwise */
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/* ------------------------------------------------------------ */
|
||||
/*
|
||||
HTTrack Website Copier, Offline Browser for Windows and Unix
|
||||
Copyright (C) 1998-2013 Xavier Roche and other contributors
|
||||
Copyright (C) 1998-2014 Xavier Roche and other contributors
|
||||
|
||||
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
|
||||
@@ -86,8 +86,7 @@ extern int hts_unescapeUrl(const char *src, char *dest, const size_t max);
|
||||
* Note: source and destination MUST NOT be the same.
|
||||
* Returns 0 upon success, -1 upon overflow or error.
|
||||
**/
|
||||
extern int hts_unescapeUrlSpecial(const char *src,
|
||||
char *dest, const size_t max,
|
||||
int flags);
|
||||
extern int hts_unescapeUrlSpecial(const char *src, char *dest, const size_t max,
|
||||
const int flags);
|
||||
|
||||
#endif
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -56,7 +56,7 @@ EOF
|
||||
i=$[${i}+1]
|
||||
done
|
||||
echo -e " /* $A */"
|
||||
echo -e " case ${hash}:"
|
||||
echo -e " case ${hash}u:"
|
||||
echo -e " if (len == ${#ent} /* && strncmp(ent, \"${ent}\") == 0 */) {"
|
||||
echo -e " return ${code};"
|
||||
echo -e " }"
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/* ------------------------------------------------------------ */
|
||||
/*
|
||||
HTTrack Website Copier, Offline Browser for Windows and Unix
|
||||
Copyright (C) 1998-2013 Xavier Roche and other contributors
|
||||
Copyright (C) 1998-2014 Xavier Roche and other contributors
|
||||
|
||||
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
|
||||
@@ -54,7 +54,7 @@ Please visit our Website: http://www.httrack.com
|
||||
// optionnel: taille à contrôller (ou numéro, etc) en pointeur
|
||||
// (en de détection de *size, la taille limite est écrite par dessus *size)
|
||||
// exemple: +-*.gif*[<5] == supprimer GIF si <5KB
|
||||
int fa_strjoker(int type, char **filters, int nfil, char *nom, LLint * size,
|
||||
int fa_strjoker(int type, char **filters, int nfil, const char *nom, LLint * size,
|
||||
int *size_flag, int *depth) {
|
||||
int verdict = 0; // on sait pas
|
||||
int i;
|
||||
@@ -101,7 +101,7 @@ int fa_strjoker(int type, char **filters, int nfil, char *nom, LLint * size,
|
||||
// cet algo est 'un peu' récursif mais ne consomme pas trop de tm
|
||||
// * = toute lettre
|
||||
// --?-- : spécifique à HTTrack et aux ?
|
||||
HTS_INLINE char *strjoker(char *chaine, char *joker, LLint * size,
|
||||
HTS_INLINE const char *strjoker(const char *chaine, const char *joker, LLint * size,
|
||||
int *size_flag) {
|
||||
//int err=0;
|
||||
if (strnotempty(joker) == 0) { // fin de chaine joker
|
||||
@@ -262,7 +262,7 @@ HTS_INLINE char *strjoker(char *chaine, char *joker, LLint * size,
|
||||
|
||||
{
|
||||
int i, max;
|
||||
char *adr;
|
||||
const char *adr;
|
||||
|
||||
// la chaine doit se terminer exactement
|
||||
if (cut) {
|
||||
@@ -335,8 +335,8 @@ HTS_INLINE char *strjoker(char *chaine, char *joker, LLint * size,
|
||||
// exemple: find dans un texte de strcpybuff(*[A-Z,a-z],"*[0-9]"); va rechercher la première occurence
|
||||
// d'un strcpy sur une variable ayant un nom en lettres et copiant une chaine de chiffres
|
||||
// ATTENTION!! Eviter les jokers en début, où gare au temps machine!
|
||||
char *strjokerfind(char *chaine, char *joker) {
|
||||
char *adr;
|
||||
const char *strjokerfind(const char *chaine, const char *joker) {
|
||||
const char *adr;
|
||||
|
||||
while(*chaine) {
|
||||
if ((adr = strjoker(chaine, joker, NULL, NULL))) { // ok trouvé
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/* ------------------------------------------------------------ */
|
||||
/*
|
||||
HTTrack Website Copier, Offline Browser for Windows and Unix
|
||||
Copyright (C) 1998-2013 Xavier Roche and other contributors
|
||||
Copyright (C) 1998-2014 Xavier Roche and other contributors
|
||||
|
||||
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
|
||||
@@ -39,11 +39,11 @@ Please visit our Website: http://www.httrack.com
|
||||
|
||||
#include "htsbase.h"
|
||||
|
||||
int fa_strjoker(int type, char **filters, int nfil, char *nom, LLint * size,
|
||||
int fa_strjoker(int type, char **filters, int nfil, const char *nom, LLint * size,
|
||||
int *size_flag, int *depth);
|
||||
HTS_INLINE char *strjoker(char *chaine, char *joker, LLint * size,
|
||||
HTS_INLINE const char *strjoker(const char *chaine, const char *joker, LLint * size,
|
||||
int *size_flag);
|
||||
char *strjokerfind(char *chaine, char *joker);
|
||||
const char *strjokerfind(const char *chaine, const char *joker);
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
90
src/htsftp.c
90
src/htsftp.c
@@ -1,7 +1,7 @@
|
||||
/* ------------------------------------------------------------ */
|
||||
/*
|
||||
HTTrack Website Copier, Offline Browser for Windows and Unix
|
||||
Copyright (C) 1998-2013 Xavier Roche and other contributors
|
||||
Copyright (C) 1998-2014 Xavier Roche and other contributors
|
||||
|
||||
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
|
||||
@@ -142,21 +142,17 @@ int run_launch_ftp(FTPDownloadStruct * pStruct) {
|
||||
#endif
|
||||
char BIGSTK adr_ip[1024];
|
||||
char *adr, *real_adr;
|
||||
char *ftp_filename = "";
|
||||
const char *ftp_filename = "";
|
||||
int timeout = 300; // timeout
|
||||
int timeout_onfly = 8; // attente réponse supplémentaire
|
||||
int transfer_list = 0; // directory
|
||||
int rest_understood = 0; // rest command understood
|
||||
t_fullhostent fullhostent_buffer; // buffer pour resolver
|
||||
|
||||
//
|
||||
T_SOC soc_ctl = INVALID_SOCKET;
|
||||
T_SOC soc_servdat = INVALID_SOCKET;
|
||||
T_SOC soc_dat = INVALID_SOCKET;
|
||||
|
||||
//
|
||||
SOCaddr server_data;
|
||||
int server_data_size = sizeof(server_data);
|
||||
|
||||
//
|
||||
line_retr[0] = adr_ip[0] = '\0';
|
||||
@@ -217,7 +213,7 @@ int run_launch_ftp(FTPDownloadStruct * pStruct) {
|
||||
ftp_filename = a;
|
||||
if (strnotempty(a)) {
|
||||
char catbuff[CATBUFF_SIZE];
|
||||
char *ua = unescape_http(catbuff, a);
|
||||
char *ua = unescape_http(catbuff, sizeof(catbuff), a);
|
||||
int len_a = (int) strlen(ua);
|
||||
|
||||
if (len_a > 0 && ua[len_a - 1] == '/') { /* obviously a directory listing */
|
||||
@@ -249,8 +245,6 @@ int run_launch_ftp(FTPDownloadStruct * pStruct) {
|
||||
// connexion
|
||||
{
|
||||
SOCaddr server;
|
||||
int server_size = sizeof(server);
|
||||
t_hostent *hp;
|
||||
char *a;
|
||||
char _adr[256];
|
||||
const char *error = "unknown error";
|
||||
@@ -270,8 +264,7 @@ int run_launch_ftp(FTPDownloadStruct * pStruct) {
|
||||
|
||||
// récupérer adresse résolue
|
||||
strcpybuff(back->info, "host name");
|
||||
hp = hts_gethostbyname2(opt, _adr, &fullhostent_buffer, &error);
|
||||
if (hp == NULL) {
|
||||
if (hts_dns_resolve2(opt, _adr, &server, &error) == NULL) {
|
||||
snprintf(back->r.msg, sizeof(back->r.msg),
|
||||
"Unable to get server's address: %s", error);
|
||||
// back->status=STATUS_FTP_READY; // fini
|
||||
@@ -280,12 +273,8 @@ int run_launch_ftp(FTPDownloadStruct * pStruct) {
|
||||
}
|
||||
_CHECK_HALT_FTP;
|
||||
|
||||
// copie adresse
|
||||
SOCaddr_copyaddr(server, server_size, hp->h_addr_list[0], hp->h_length);
|
||||
// copie adresse pour cnx data
|
||||
SOCaddr_copyaddr(server_data, server_data_size, hp->h_addr_list[0],
|
||||
hp->h_length);
|
||||
// memcpy(&server.sin_addr, hp->h_addr, hp->h_length);
|
||||
SOCaddr_copy_SOCaddr(server_data, server);
|
||||
|
||||
// créer ("attachement") une socket (point d'accès) internet,en flot
|
||||
soc_ctl = (T_SOC) socket(SOCaddr_sinfamily(server), SOCK_STREAM, 0);
|
||||
@@ -302,12 +291,7 @@ int run_launch_ftp(FTPDownloadStruct * pStruct) {
|
||||
// connexion (bloquante, on est en thread)
|
||||
strcpybuff(back->info, "connect");
|
||||
|
||||
#ifdef _WIN32
|
||||
if (connect(soc_ctl, (const struct sockaddr FAR *) &server, server_size) !=
|
||||
0) {
|
||||
#else
|
||||
if (connect(soc_ctl, (struct sockaddr *) &server, server_size) == -1) {
|
||||
#endif
|
||||
if (connect(soc_ctl, &SOCaddr_sockaddr(server), SOCaddr_size(server)) != 0) {
|
||||
strcpybuff(back->r.msg, "Unable to connect to the server");
|
||||
// back->status=STATUS_FTP_READY; // fini
|
||||
back->r.statuscode = STATUSCODE_INVALID;
|
||||
@@ -419,7 +403,7 @@ int run_launch_ftp(FTPDownloadStruct * pStruct) {
|
||||
// Pré-REST
|
||||
//
|
||||
#if FTP_PASV
|
||||
if (SOCaddr_getproto(server, server_size) == '1') {
|
||||
if (SOCaddr_getproto(server) == '1') {
|
||||
strcpybuff(back->info, "pasv");
|
||||
snprintf(line, sizeof(line), "PASV");
|
||||
send_line(soc_ctl, line);
|
||||
@@ -528,7 +512,7 @@ int run_launch_ftp(FTPDownloadStruct * pStruct) {
|
||||
if (back->r.statuscode != -1) {
|
||||
if (!transfer_list) {
|
||||
char catbuff[CATBUFF_SIZE];
|
||||
char *ua = unescape_http(catbuff, ftp_filename);
|
||||
char *ua = unescape_http(catbuff, sizeof(catbuff), ftp_filename);
|
||||
|
||||
if ((strchr(ua, ' '))
|
||||
|| (strchr(ua, '\"'))
|
||||
@@ -581,7 +565,6 @@ int run_launch_ftp(FTPDownloadStruct * pStruct) {
|
||||
if (port_pasv) {
|
||||
SOCaddr server;
|
||||
int server_size = sizeof(server);
|
||||
t_hostent *hp;
|
||||
const char *error = "unknown error";
|
||||
|
||||
// effacer structure
|
||||
@@ -592,16 +575,9 @@ int run_launch_ftp(FTPDownloadStruct * pStruct) {
|
||||
|
||||
// résoudre
|
||||
if (adr_ip[0]) {
|
||||
hp = hts_gethostbyname2(opt, adr_ip, &fullhostent_buffer, &error);
|
||||
if (hp) {
|
||||
SOCaddr_copyaddr(server, server_size, hp->h_addr_list[0],
|
||||
hp->h_length);
|
||||
} else {
|
||||
server_size = 0;
|
||||
}
|
||||
hts_dns_resolve2(opt, adr_ip, &server, &error);
|
||||
} else {
|
||||
memcpy(&server, &server_data, sizeof(server_data));
|
||||
server_size = server_data_size;
|
||||
SOCaddr_copy_SOCaddr(server, server_data);
|
||||
}
|
||||
|
||||
// infos
|
||||
@@ -615,15 +591,7 @@ int run_launch_ftp(FTPDownloadStruct * pStruct) {
|
||||
if (soc_dat != INVALID_SOCKET) {
|
||||
// structure: connexion au domaine internet, port 80 (ou autre)
|
||||
SOCaddr_initport(server, port_pasv);
|
||||
// server.sin_port = htons((unsigned short int) port_pasv);
|
||||
#ifdef _WIN32
|
||||
if (connect
|
||||
(soc_dat, (const struct sockaddr FAR *) &server,
|
||||
server_size) == 0) {
|
||||
#else
|
||||
if (connect(soc_dat, (struct sockaddr *) &server, server_size) !=
|
||||
-1) {
|
||||
#endif
|
||||
if (connect(soc_dat, &SOCaddr_sockaddr(server), SOCaddr_size(server)) == 0) {
|
||||
strcpybuff(back->info, "retr");
|
||||
strcpybuff(line, line_retr);
|
||||
send_line(soc_ctl, line);
|
||||
@@ -856,33 +824,19 @@ T_SOC get_datasocket(char *to_send, size_t to_send_size) {
|
||||
to_send[0] = '\0';
|
||||
if (gethostname(h_loc, 256) == 0) { // host name
|
||||
SOCaddr server;
|
||||
int server_size = sizeof(server);
|
||||
t_hostent *hp_loc;
|
||||
t_fullhostent buffer;
|
||||
|
||||
// effacer structure
|
||||
memset(&server, 0, sizeof(server));
|
||||
|
||||
if ((hp_loc = vxgethostbyname(h_loc, &buffer))) { // notre host
|
||||
|
||||
// copie adresse
|
||||
SOCaddr_copyaddr(server, server_size, hp_loc->h_addr_list[0],
|
||||
hp_loc->h_length);
|
||||
|
||||
if (hts_dns_resolve_nocache(h_loc, &server) != NULL) { // notre host
|
||||
if ((soc =
|
||||
(T_SOC) socket(SOCaddr_sinfamily(server), SOCK_STREAM,
|
||||
0)) != INVALID_SOCKET) {
|
||||
|
||||
if (bind(soc, (struct sockaddr *) &server, server_size) == 0) {
|
||||
if (bind(soc, &SOCaddr_sockaddr(server), SOCaddr_size(server)) == 0) {
|
||||
SOCaddr server2;
|
||||
SOClen len;
|
||||
SOClen len = SOCaddr_capacity(server2);
|
||||
|
||||
len = sizeof(server2);
|
||||
// effacer structure
|
||||
memset(&server2, 0, sizeof(server2));
|
||||
if (getsockname(soc, (struct sockaddr *) &server2, &len) == 0) {
|
||||
if (getsockname(soc, &SOCaddr_sockaddr(server2), &len) == 0) {
|
||||
// *port=ntohs(server.sin_port); // récupérer port
|
||||
if (listen(soc, 10) >= 0) { // au pif le 10
|
||||
if (listen(soc, 1) >= 0) {
|
||||
#if HTS_INET6==0
|
||||
unsigned short int a, n1, n2;
|
||||
|
||||
@@ -895,7 +849,7 @@ T_SOC get_datasocket(char *to_send, size_t to_send_size) {
|
||||
char dot[256 + 2];
|
||||
char *a;
|
||||
|
||||
SOCaddr_inetntoa(dot, 256, server2, sizeof(server2));
|
||||
SOCaddr_inetntoa(dot, 256, server2);
|
||||
//
|
||||
dots[0] = '\0';
|
||||
strncatbuff(dots, dot, 128);
|
||||
@@ -913,9 +867,9 @@ T_SOC get_datasocket(char *to_send, size_t to_send_size) {
|
||||
{
|
||||
char dot[256 + 2];
|
||||
|
||||
SOCaddr_inetntoa(dot, 256, server2, len);
|
||||
SOCaddr_inetntoa(dot, 256, server2);
|
||||
snprintf(to_send, to_send_size, "EPRT |%c|%s|%d|",
|
||||
SOCaddr_getproto(server2, len), dot,
|
||||
SOCaddr_getproto(server2), dot,
|
||||
SOCaddr_sinport(server2));
|
||||
}
|
||||
#endif
|
||||
@@ -959,7 +913,7 @@ FILE *dd = NULL;
|
||||
|
||||
// routines de réception/émission
|
||||
// 0 = ERROR
|
||||
int send_line(T_SOC soc, char *data) {
|
||||
int send_line(T_SOC soc, const char *data) {
|
||||
char BIGSTK line[1024];
|
||||
|
||||
if (_DEBUG_HEAD) {
|
||||
@@ -1093,7 +1047,7 @@ int check_socket(T_SOC soc) {
|
||||
tv.tv_sec = 0;
|
||||
tv.tv_usec = 0;
|
||||
// poll!
|
||||
select(soc + 1, &fds, NULL, &fds_e, &tv);
|
||||
select((int) soc + 1, &fds, NULL, &fds_e, &tv);
|
||||
if (FD_ISSET(soc, &fds_e)) { // error detected
|
||||
return -1;
|
||||
} else if (FD_ISSET(soc, &fds)) {
|
||||
@@ -1116,7 +1070,7 @@ int check_socket_connect(T_SOC soc) {
|
||||
tv.tv_sec = 0;
|
||||
tv.tv_usec = 0;
|
||||
// poll!
|
||||
select(soc + 1, NULL, &fds, &fds_e, &tv);
|
||||
select((int) soc + 1, NULL, &fds, &fds_e, &tv);
|
||||
if (FD_ISSET(soc, &fds_e)) { // error detected
|
||||
return -1;
|
||||
} else if (FD_ISSET(soc, &fds)) {
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/* ------------------------------------------------------------ */
|
||||
/*
|
||||
HTTrack Website Copier, Offline Browser for Windows and Unix
|
||||
Copyright (C) 1998-2013 Xavier Roche and other contributors
|
||||
Copyright (C) 1998-2014 Xavier Roche and other contributors
|
||||
|
||||
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
|
||||
@@ -68,7 +68,7 @@ int back_launch_ftp(FTPDownloadStruct * params);
|
||||
#endif
|
||||
|
||||
int run_launch_ftp(FTPDownloadStruct * params);
|
||||
int send_line(T_SOC soc, char *data);
|
||||
int send_line(T_SOC soc, const char *data);
|
||||
int get_ftp_line(T_SOC soc, char *line, size_t line_size, int timeout);
|
||||
T_SOC get_datasocket(char *to_send, size_t to_send_size);
|
||||
int stop_ftp(lien_back * back);
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/* ------------------------------------------------------------ */
|
||||
/*
|
||||
HTTrack Website Copier, Offline Browser for Windows and Unix
|
||||
Copyright (C) 1998-2013 Xavier Roche and other contributors
|
||||
Copyright (C) 1998-2014 Xavier Roche and other contributors
|
||||
|
||||
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
|
||||
@@ -36,8 +36,8 @@ Please visit our Website: http://www.httrack.com
|
||||
#define HTTRACK_GLOBAL_DEFH
|
||||
|
||||
// Version (also check external version information)
|
||||
#define HTTRACK_VERSION "3.48-3"
|
||||
#define HTTRACK_VERSIONID "3.48.3"
|
||||
#define HTTRACK_VERSION "3.48-16"
|
||||
#define HTTRACK_VERSIONID "3.48.16"
|
||||
#define HTTRACK_AFF_VERSION "3.x"
|
||||
#define HTTRACK_LIB_VERSION "2.0"
|
||||
|
||||
@@ -57,6 +57,19 @@ Please visit our Website: http://www.httrack.com
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/* GCC extension */
|
||||
#ifndef HTS_UNUSED
|
||||
#ifdef __GNUC__
|
||||
#define HTS_UNUSED __attribute__ ((unused))
|
||||
#define HTS_STATIC static __attribute__ ((unused))
|
||||
#define HTS_PRINTF_FUN(fmt, arg) __attribute__ ((format (printf, fmt, arg)))
|
||||
#else
|
||||
#define HTS_UNUSED
|
||||
#define HTS_STATIC static
|
||||
#define HTS_PRINTF_FUN(fmt, arg)
|
||||
#endif
|
||||
#endif
|
||||
|
||||
// config.h
|
||||
#ifdef _WIN32
|
||||
|
||||
@@ -119,11 +132,6 @@ Please visit our Website: http://www.httrack.com
|
||||
|
||||
#endif
|
||||
|
||||
// don't spare memory usage by default
|
||||
#ifndef HTS_SPARE_MEMORY
|
||||
#define HTS_SPARE_MEMORY 0
|
||||
#endif
|
||||
|
||||
#ifndef BIGSTK
|
||||
#define BIGSTK
|
||||
#endif
|
||||
@@ -193,20 +201,13 @@ Please visit our Website: http://www.httrack.com
|
||||
|
||||
#endif
|
||||
|
||||
#if HTS_SPARE_MEMORY==0
|
||||
/* Taille max d'une URL */
|
||||
#define HTS_URLMAXSIZE 1024
|
||||
/* Taille max ligne de commande (>=HTS_URLMAXSIZE*2) */
|
||||
#define HTS_CDLMAXSIZE 1024
|
||||
#else
|
||||
/* Taille max d'une URL */
|
||||
#define HTS_URLMAXSIZE 256
|
||||
/* Taille max ligne de commande (>=HTS_URLMAXSIZE*2) */
|
||||
#define HTS_CDLMAXSIZE 1024
|
||||
#endif
|
||||
|
||||
/* Copyright (C) 1998-2013 Xavier Roche and other contributors */
|
||||
#define HTTRACK_AFF_AUTHORS "[XR&CO'2013]"
|
||||
/* Copyright (C) 1998-2014 Xavier Roche and other contributors */
|
||||
#define HTTRACK_AFF_AUTHORS "[XR&CO'2014]"
|
||||
#define HTS_DEFAULT_FOOTER "<!-- Mirrored from %s%s by HTTrack Website Copier/"HTTRACK_AFF_VERSION" "HTTRACK_AFF_AUTHORS", %s -->"
|
||||
#define HTTRACK_WEB "http://www.httrack.com"
|
||||
#define HTS_UPDATE_WEBSITE "http://www.httrack.com/update.php3?Product=HTTrack&Version="HTTRACK_VERSIONID"&VersionStr="HTTRACK_VERSION"&Platform=%d&Language=%s"
|
||||
@@ -244,8 +245,14 @@ Please visit our Website: http://www.httrack.com
|
||||
#define HTSEXT_API __declspec(dllimport)
|
||||
#endif
|
||||
#else
|
||||
/* See <http://gcc.gnu.org/wiki/Visibility> */
|
||||
#if ( ( defined(__GNUC__) && ( __GNUC__ >= 4 ) ) \
|
||||
|| ( defined(HAVE_VISIBILITY) && HAVE_VISIBILITY ) )
|
||||
#define HTSEXT_API __attribute__ ((visibility ("default")))
|
||||
#else
|
||||
#define HTSEXT_API
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef HTS_LONGLONG
|
||||
#ifdef HTS_NO_64_BIT
|
||||
@@ -316,11 +323,6 @@ typedef unsigned __int32 T_SOC;
|
||||
typedef int T_SOC;
|
||||
#endif
|
||||
|
||||
/* Default alignement */
|
||||
#ifndef HTS_ALIGN
|
||||
#define HTS_ALIGN (sizeof(void*))
|
||||
#endif
|
||||
|
||||
/* IPV4, IPV6 and various unified structures */
|
||||
#define HTS_MAXADDRLEN 64
|
||||
|
||||
@@ -365,11 +367,7 @@ typedef int T_SOC;
|
||||
#define LOCAL_SOCKET_ID -2
|
||||
|
||||
// taille de chaque buffer (10 sockets 650 ko)
|
||||
#if HTS_SPARE_MEMORY==0
|
||||
#define TAILLE_BUFFER 65536
|
||||
#else
|
||||
#define TAILLE_BUFFER 8192
|
||||
#endif
|
||||
|
||||
#ifdef HTS_DO_NOT_USE_PTHREAD
|
||||
#error needs threads support
|
||||
|
||||
157
src/htshash.c
157
src/htshash.c
@@ -1,7 +1,7 @@
|
||||
/* ------------------------------------------------------------ */
|
||||
/*
|
||||
HTTrack Website Copier, Offline Browser for Windows and Unix
|
||||
Copyright (C) 1998-2013 Xavier Roche and other contributors
|
||||
Copyright (C) 1998-2014 Xavier Roche and other contributors
|
||||
|
||||
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
|
||||
@@ -34,15 +34,15 @@ Please visit our Website: http://www.httrack.com
|
||||
/* Internal engine bytecode */
|
||||
#define HTS_INTERNAL_BYTECODE
|
||||
|
||||
#include "htsopt.h"
|
||||
#include "htshash.h"
|
||||
|
||||
/* specific definitions */
|
||||
#include "htsbase.h"
|
||||
#include "htsopt.h"
|
||||
#include "htsglobal.h"
|
||||
#include "htsmd5.h"
|
||||
#include "htscore.h"
|
||||
#include "htsinthash.h"
|
||||
#include "coucal.h"
|
||||
/* END specific definitions */
|
||||
|
||||
/* Specific macros */
|
||||
@@ -60,40 +60,55 @@ Please visit our Website: http://www.httrack.com
|
||||
// recherche dans la table selon nom1,nom2 et le no d'enregistrement
|
||||
|
||||
/* Key free handler (NOOP) ; addresses are kept */
|
||||
static void key_freehandler(void *arg, void *value) {
|
||||
static void key_freehandler(void *arg, coucal_key value) {
|
||||
}
|
||||
|
||||
/* Key strdup (pointer copy) */
|
||||
static char* key_duphandler(void *arg, const char *name) {
|
||||
static coucal_key key_duphandler(void *arg, coucal_key_const name) {
|
||||
union {
|
||||
const char *roname;
|
||||
char *name;
|
||||
coucal_key_const roname;
|
||||
coucal_key name;
|
||||
} u;
|
||||
u.roname = name;
|
||||
return u.name;
|
||||
}
|
||||
|
||||
/* Key sav hashes are using case-insensitive version */
|
||||
static inthash_keys key_sav_hashes(void *arg, const char *value) {
|
||||
static coucal_hashkeys key_sav_hashes(void *arg, coucal_key_const key) {
|
||||
hash_struct *const hash = (hash_struct*) arg;
|
||||
convtolower(hash->catbuff, value);
|
||||
return inthash_hash_value(hash->catbuff);
|
||||
convtolower(hash->catbuff, (const char*) key);
|
||||
return coucal_hash_string(hash->catbuff);
|
||||
}
|
||||
|
||||
/* Key sav comparison is case-insensitive */
|
||||
static int key_sav_equals(void *arg, const char *a, const char *b) {
|
||||
static int key_sav_equals(void *arg,
|
||||
coucal_key_const a_,
|
||||
coucal_key_const b_) {
|
||||
const char *const a = (const char*) a_;
|
||||
const char *const b = (const char*) b_;
|
||||
return strcasecmp(a, b) == 0;
|
||||
}
|
||||
|
||||
static const char* key_sav_debug_print(void *arg,
|
||||
coucal_key_const a) {
|
||||
return (const char*) a;
|
||||
}
|
||||
|
||||
static const char* value_sav_debug_print(void *arg, coucal_value_const a) {
|
||||
return (char*) a.ptr;
|
||||
}
|
||||
|
||||
/* Pseudo-key (lien_url structure) hash function */
|
||||
static inthash_keys key_adrfil_hashes_generic(void *arg, const char *value_,
|
||||
static coucal_hashkeys key_adrfil_hashes_generic(void *arg,
|
||||
coucal_key_const value,
|
||||
const int former) {
|
||||
hash_struct *const hash = (hash_struct*) arg;
|
||||
const lien_url*const lien = (lien_url*) value_;
|
||||
const lien_url*const lien = (const lien_url*) value;
|
||||
const char *const adr = !former ? lien->adr : lien->former_adr;
|
||||
const char *const fil = !former ? lien->fil : lien->former_fil;
|
||||
const char *const adr_norm = adr != NULL ?
|
||||
( hash->normalized ? jump_normalized(adr) : jump_identification(adr) )
|
||||
( hash->normalized ? jump_normalized_const(adr)
|
||||
: jump_identification_const(adr) )
|
||||
: NULL;
|
||||
|
||||
// copy address
|
||||
@@ -109,16 +124,18 @@ static inthash_keys key_adrfil_hashes_generic(void *arg, const char *value_,
|
||||
}
|
||||
|
||||
// hash
|
||||
return inthash_hash_value(hash->normfil);
|
||||
return coucal_hash_string(hash->normfil);
|
||||
}
|
||||
|
||||
/* Pseudo-key (lien_url structure) comparison function */
|
||||
static int key_adrfil_equals_generic(void *arg, const char *a_, const char *b_,
|
||||
static int key_adrfil_equals_generic(void *arg,
|
||||
coucal_key_const a_,
|
||||
coucal_key_const b_,
|
||||
const int former) {
|
||||
hash_struct *const hash = (hash_struct*) arg;
|
||||
const int normalized = hash->normalized;
|
||||
const lien_url*const a = (lien_url*) a_;
|
||||
const lien_url*const b = (lien_url*) b_;
|
||||
const lien_url*const a = (const lien_url*) a_;
|
||||
const lien_url*const b = (const lien_url*) b_;
|
||||
const char *const a_adr = !former ? a->adr : a->former_adr;
|
||||
const char *const b_adr = !former ? b->adr : b->former_adr;
|
||||
const char *const a_fil = !former ? a->fil : a->former_fil;
|
||||
@@ -133,8 +150,10 @@ static int key_adrfil_equals_generic(void *arg, const char *a_, const char *b_,
|
||||
assertf(b_fil != NULL);
|
||||
|
||||
// skip scheme and authentication to the domain (possibly without www.)
|
||||
ja = normalized ? jump_normalized(a_adr) : jump_identification(a_adr);
|
||||
jb = normalized ? jump_normalized(b_adr) : jump_identification(b_adr);
|
||||
ja = normalized
|
||||
? jump_normalized_const(a_adr) : jump_identification_const(a_adr);
|
||||
jb = normalized
|
||||
? jump_normalized_const(b_adr) : jump_identification_const(b_adr);
|
||||
assertf(ja != NULL);
|
||||
assertf(jb != NULL);
|
||||
if (strcasecmp(ja, jb) != 0) {
|
||||
@@ -151,34 +170,74 @@ static int key_adrfil_equals_generic(void *arg, const char *a_, const char *b_,
|
||||
}
|
||||
}
|
||||
|
||||
static const char* key_adrfil_debug_print_(void *arg,
|
||||
coucal_key_const a_,
|
||||
const int former) {
|
||||
hash_struct *const hash = (hash_struct*) arg;
|
||||
const lien_url*const a = (const lien_url*) a_;
|
||||
const char *const a_adr = !former ? a->adr : a->former_adr;
|
||||
const char *const a_fil = !former ? a->fil : a->former_fil;
|
||||
snprintf(hash->normfil, sizeof(hash->normfil), "%s%s", a_adr, a_fil);
|
||||
return hash->normfil;
|
||||
}
|
||||
|
||||
static const char* key_adrfil_debug_print(void *arg,
|
||||
coucal_key_const a_) {
|
||||
return key_adrfil_debug_print_(arg, a_, 0);
|
||||
}
|
||||
|
||||
static const char* key_former_adrfil_debug_print(void *arg,
|
||||
coucal_key_const a_) {
|
||||
return key_adrfil_debug_print_(arg, a_, 1);
|
||||
}
|
||||
|
||||
static const char* value_adrfil_debug_print(void *arg,
|
||||
coucal_value_const value) {
|
||||
hash_struct *const hash = (hash_struct*) arg;
|
||||
snprintf(hash->normfil2, sizeof(hash->normfil2), "%d", (int) value.intg);
|
||||
return hash->normfil2;
|
||||
}
|
||||
|
||||
/* "adr"/"fil" lien_url structure members hashing function */
|
||||
static inthash_keys key_adrfil_hashes(void *arg, const char *value_) {
|
||||
static coucal_hashkeys key_adrfil_hashes(void *arg, coucal_key_const value_) {
|
||||
return key_adrfil_hashes_generic(arg, value_, 0);
|
||||
}
|
||||
|
||||
/* "adr"/"fil" lien_url structure members comparison function */
|
||||
static int key_adrfil_equals(void *arg, const char *a, const char *b) {
|
||||
static int key_adrfil_equals(void *arg,
|
||||
coucal_key_const a,
|
||||
coucal_key_const b) {
|
||||
return key_adrfil_equals_generic(arg, a, b, 0);
|
||||
}
|
||||
|
||||
/* "former_adr"/"former_fil" lien_url structure members hashing function */
|
||||
static inthash_keys key_former_adrfil_hashes(void *arg, const char *value_) {
|
||||
static coucal_hashkeys key_former_adrfil_hashes(void *arg, coucal_key_const value_) {
|
||||
return key_adrfil_hashes_generic(arg, value_, 1);
|
||||
}
|
||||
|
||||
/* "former_adr"/"former_fil" lien_url structure members comparison function */
|
||||
static int key_former_adrfil_equals(void *arg, const char *a, const char *b) {
|
||||
static int key_former_adrfil_equals(void *arg,
|
||||
coucal_key_const a,
|
||||
coucal_key_const b) {
|
||||
return key_adrfil_equals_generic(arg, a, b, 1);
|
||||
}
|
||||
|
||||
void hash_init(hash_struct * hash, int normalized) {
|
||||
hash->sav = inthash_new(0);
|
||||
hash->adrfil = inthash_new(0);
|
||||
hash->former_adrfil = inthash_new(0);
|
||||
void hash_init(httrackp *opt, hash_struct * hash, int normalized) {
|
||||
hash->sav = coucal_new(0);
|
||||
hash->adrfil = coucal_new(0);
|
||||
hash->former_adrfil = coucal_new(0);
|
||||
hash->normalized = normalized;
|
||||
|
||||
hts_set_hash_handler(hash->sav, opt);
|
||||
hts_set_hash_handler(hash->adrfil, opt);
|
||||
hts_set_hash_handler(hash->former_adrfil, opt);
|
||||
|
||||
coucal_set_name(hash->sav, "hash->sav");
|
||||
coucal_set_name(hash->adrfil, "hash->adrfil");
|
||||
coucal_set_name(hash->former_adrfil, "hash->former_adrfil");
|
||||
|
||||
/* Case-insensitive comparison ; keys are direct char* filenames */
|
||||
inthash_value_set_key_handler(hash->sav,
|
||||
coucal_value_set_key_handler(hash->sav,
|
||||
key_duphandler,
|
||||
key_freehandler,
|
||||
key_sav_hashes,
|
||||
@@ -187,25 +246,39 @@ void hash_init(hash_struct * hash, int normalized) {
|
||||
|
||||
/* URL-style comparison ; keys are lien_url structure pointers casted
|
||||
to char* */
|
||||
inthash_value_set_key_handler(hash->adrfil,
|
||||
coucal_value_set_key_handler(hash->adrfil,
|
||||
key_duphandler,
|
||||
key_freehandler,
|
||||
key_adrfil_hashes,
|
||||
key_adrfil_equals,
|
||||
hash);
|
||||
inthash_value_set_key_handler(hash->former_adrfil,
|
||||
coucal_value_set_key_handler(hash->former_adrfil,
|
||||
key_duphandler,
|
||||
key_freehandler,
|
||||
key_former_adrfil_hashes,
|
||||
key_former_adrfil_equals,
|
||||
hash);
|
||||
|
||||
/* pretty-printing */
|
||||
coucal_set_print_handler(hash->sav,
|
||||
key_sav_debug_print,
|
||||
value_sav_debug_print,
|
||||
NULL);
|
||||
coucal_set_print_handler(hash->adrfil,
|
||||
key_adrfil_debug_print,
|
||||
value_adrfil_debug_print,
|
||||
hash);
|
||||
coucal_set_print_handler(hash->former_adrfil,
|
||||
key_former_adrfil_debug_print,
|
||||
value_adrfil_debug_print,
|
||||
hash);
|
||||
}
|
||||
|
||||
void hash_free(hash_struct *hash) {
|
||||
if (hash != NULL) {
|
||||
inthash_delete(&hash->sav);
|
||||
inthash_delete(&hash->adrfil);
|
||||
inthash_delete(&hash->former_adrfil);
|
||||
coucal_delete(&hash->sav);
|
||||
coucal_delete(&hash->adrfil);
|
||||
coucal_delete(&hash->former_adrfil);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -218,7 +291,7 @@ int hash_read(const hash_struct * hash, const char *nom1, const char *nom2,
|
||||
/* read */
|
||||
switch(type) {
|
||||
case HASH_STRUCT_FILENAME:
|
||||
if (inthash_read(hash->sav, nom1, &intvalue)) {
|
||||
if (coucal_read(hash->sav, nom1, &intvalue)) {
|
||||
return (int) intvalue;
|
||||
} else {
|
||||
return -1;
|
||||
@@ -228,7 +301,7 @@ int hash_read(const hash_struct * hash, const char *nom1, const char *nom2,
|
||||
memset(&lien, 0, sizeof(lien));
|
||||
lien.adr = key_duphandler(NULL, nom1);
|
||||
lien.fil = key_duphandler(NULL, nom2);
|
||||
if (inthash_read(hash->adrfil, (char*) &lien, &intvalue)) {
|
||||
if (coucal_read(hash->adrfil, (char*) &lien, &intvalue)) {
|
||||
return (int) intvalue;
|
||||
} else {
|
||||
return -1;
|
||||
@@ -238,7 +311,7 @@ int hash_read(const hash_struct * hash, const char *nom1, const char *nom2,
|
||||
memset(&lien, 0, sizeof(lien));
|
||||
lien.former_adr = key_duphandler(NULL, nom1);
|
||||
lien.former_fil = key_duphandler(NULL, nom2);
|
||||
if (inthash_read(hash->former_adrfil, (char*) &lien, &intvalue)) {
|
||||
if (coucal_read(hash->former_adrfil, (char*) &lien, &intvalue)) {
|
||||
return (int) intvalue;
|
||||
} else {
|
||||
return -1;
|
||||
@@ -252,15 +325,15 @@ int hash_read(const hash_struct * hash, const char *nom1, const char *nom2,
|
||||
}
|
||||
|
||||
// enregistrement lien lpos dans les 3 tables hash1..3
|
||||
void hash_write(hash_struct * hash, int lpos) {
|
||||
void hash_write(hash_struct * hash, size_t lpos) {
|
||||
/* first entry: destination filename (lowercased) */
|
||||
inthash_write(hash->sav, hash->liens[lpos]->sav, lpos);
|
||||
coucal_write(hash->sav, (*hash->liens)[lpos]->sav, lpos);
|
||||
|
||||
/* second entry: URL address and path */
|
||||
inthash_write(hash->adrfil, (char*) hash->liens[lpos], lpos);
|
||||
coucal_write(hash->adrfil, (*hash->liens)[lpos], lpos);
|
||||
|
||||
/* third entry: URL address and path before redirect */
|
||||
if (hash->liens[lpos]->former_adr) { // former_adr existe?
|
||||
inthash_write(hash->former_adrfil, (char*) hash->liens[lpos], lpos);
|
||||
if ((*hash->liens)[lpos]->former_adr) { // former_adr existe?
|
||||
coucal_write(hash->former_adrfil, (*hash->liens)[lpos], lpos);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/* ------------------------------------------------------------ */
|
||||
/*
|
||||
HTTrack Website Copier, Offline Browser for Windows and Unix
|
||||
Copyright (C) 1998-2013 Xavier Roche and other contributors
|
||||
Copyright (C) 1998-2014 Xavier Roche and other contributors
|
||||
|
||||
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
|
||||
@@ -51,11 +51,11 @@ typedef enum hash_struct_type {
|
||||
} hash_struct_type;
|
||||
|
||||
// tables de hachage
|
||||
void hash_init(hash_struct *hash, int normalized);
|
||||
void hash_init(httrackp *opt, hash_struct *hash, int normalized);
|
||||
void hash_free(hash_struct *hash);
|
||||
int hash_read(const hash_struct * hash, const char *nom1, const char *nom2,
|
||||
hash_struct_type type);
|
||||
void hash_write(hash_struct * hash, int lpos);
|
||||
void hash_write(hash_struct * hash, size_t lpos);
|
||||
int *hash_calc_chaine(hash_struct * hash, hash_struct_type type, int pos);
|
||||
unsigned long int hash_cle(const char *nom1, const char *nom2);
|
||||
#endif
|
||||
|
||||
101
src/htshelp.c
101
src/htshelp.c
@@ -1,7 +1,7 @@
|
||||
/* ------------------------------------------------------------ */
|
||||
/*
|
||||
HTTrack Website Copier, Offline Browser for Windows and Unix
|
||||
Copyright (C) 1998-2013 Xavier Roche and other contributors
|
||||
Copyright (C) 1998-2014 Xavier Roche and other contributors
|
||||
|
||||
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
|
||||
@@ -52,7 +52,7 @@ Please visit our Website: http://www.httrack.com
|
||||
/* END specific definitions */
|
||||
|
||||
#define waitkey if (more) { char s[4]; printf("\nMORE.. q to quit\n"); linput(stdin,s,4); if (strcmp(s,"q")==0) quit=1; else printf("Page %d\n\n",++m); }
|
||||
void infomsg(char *msg) {
|
||||
void infomsg(const char *msg) {
|
||||
int l = 0;
|
||||
int m = 0;
|
||||
int more = 0;
|
||||
@@ -116,16 +116,51 @@ void infomsg(char *msg) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
typedef struct help_wizard_buffers {
|
||||
char urls[HTS_URLMAXSIZE * 2];
|
||||
char mainpath[256];
|
||||
char projname[256];
|
||||
char stropt[2048]; // options
|
||||
char stropt2[2048]; // options longues
|
||||
char strwild[2048]; // wildcards
|
||||
char cmd[4096];
|
||||
char str[256];
|
||||
char *argv[256];
|
||||
} help_wizard_buffers;
|
||||
|
||||
void help_wizard(httrackp * opt) {
|
||||
char *urls = (char *) malloct(HTS_URLMAXSIZE * 2);
|
||||
char *mainpath = (char *) malloct(256);
|
||||
char *projname = (char *) malloct(256);
|
||||
char *stropt = (char *) malloct(2048); // options
|
||||
char *stropt2 = (char *) malloct(2048); // options longues
|
||||
char *strwild = (char *) malloct(2048); // wildcards
|
||||
char *cmd = (char *) malloct(4096);
|
||||
char *str = (char *) malloct(256);
|
||||
char **argv = (char **) malloct(256 * sizeof(char *));
|
||||
help_wizard_buffers *buffers = malloct(sizeof(help_wizard_buffers));
|
||||
|
||||
#undef urls
|
||||
#undef mainpath
|
||||
#undef projname
|
||||
#undef stropt
|
||||
#undef stropt2
|
||||
#undef strwild
|
||||
#undef cmd
|
||||
#undef str
|
||||
#undef argv
|
||||
|
||||
#define urls (buffers->urls)
|
||||
#define mainpath (buffers->mainpath)
|
||||
#define projname (buffers->projname)
|
||||
#define stropt (buffers->stropt)
|
||||
#define stropt2 (buffers->stropt2)
|
||||
#define strwild (buffers->strwild)
|
||||
#define cmd (buffers->cmd)
|
||||
#define str (buffers->str)
|
||||
#define argv (buffers->argv)
|
||||
|
||||
//char *urls = (char *) malloct(HTS_URLMAXSIZE * 2);
|
||||
//char *mainpath = (char *) malloct(256);
|
||||
//char *projname = (char *) malloct(256);
|
||||
//char *stropt = (char *) malloct(2048); // options
|
||||
//char *stropt2 = (char *) malloct(2048); // options longues
|
||||
//char *strwild = (char *) malloct(2048); // wildcards
|
||||
//char *cmd = (char *) malloct(4096);
|
||||
//char *str = (char *) malloct(256);
|
||||
//char **argv = (char **) malloct(256 * sizeof(char *));
|
||||
|
||||
//
|
||||
char *a;
|
||||
@@ -147,7 +182,7 @@ void help_wizard(httrackp * opt) {
|
||||
printf("\n");
|
||||
printf("Welcome to HTTrack Website Copier (Offline Browser) " HTTRACK_VERSION
|
||||
"%s\n", hts_get_version_info(opt));
|
||||
printf("Copyright (C) 1998-2013 Xavier Roche and other contributors\n");
|
||||
printf("Copyright (C) 1998-2014 Xavier Roche and other contributors\n");
|
||||
#ifdef _WIN32
|
||||
printf("Note: You are running the commandline version,\n");
|
||||
printf("run 'WinHTTrack.exe' to get the GUI version.\n");
|
||||
@@ -237,7 +272,7 @@ void help_wizard(httrackp * opt) {
|
||||
if (strnotempty(str)) {
|
||||
while((a = strchr(str, ' ')))
|
||||
*a = ':'; // port
|
||||
if (!strchr(jump_identification(str), ':')) {
|
||||
if (!strchr(jump_identification_const(str), ':')) {
|
||||
char str2[256];
|
||||
|
||||
printf("\nProxy port (return=8080) :");
|
||||
@@ -297,7 +332,7 @@ void help_wizard(httrackp * opt) {
|
||||
printf("\n");
|
||||
|
||||
// couper en morceaux
|
||||
argv[0] = "winhttrack";
|
||||
argv[0] = strdup("winhttrack");
|
||||
argv[1] = cmd;
|
||||
argc++;
|
||||
while(cmd[i]) {
|
||||
@@ -318,24 +353,26 @@ void help_wizard(httrackp * opt) {
|
||||
}
|
||||
|
||||
/* Free buffers */
|
||||
freet(urls);
|
||||
freet(mainpath);
|
||||
freet(projname);
|
||||
freet(stropt);
|
||||
freet(stropt2);
|
||||
freet(strwild);
|
||||
freet(cmd);
|
||||
freet(str);
|
||||
free(buffers);
|
||||
#undef urls
|
||||
#undef mainpath
|
||||
#undef projname
|
||||
#undef stropt
|
||||
#undef stropt2
|
||||
#undef strwild
|
||||
#undef cmd
|
||||
#undef str
|
||||
#undef argv
|
||||
}
|
||||
int help_query(char *list, int def) {
|
||||
int help_query(const char *list, int def) {
|
||||
char s[256];
|
||||
char *a;
|
||||
const char *a;
|
||||
int opt;
|
||||
int n = 1;
|
||||
|
||||
a = list;
|
||||
while(strnotempty(a)) {
|
||||
char *b = strchr(a, '|');
|
||||
const char *b = strchr(a, '|');
|
||||
|
||||
if (b) {
|
||||
char str[256];
|
||||
@@ -401,7 +438,7 @@ void help_catchurl(const char *dest_path) {
|
||||
{
|
||||
char BIGSTK finalurl[HTS_URLMAXSIZE * 2];
|
||||
|
||||
escape_check_url(dest);
|
||||
inplace_escape_check_url(dest, sizeof(dest));
|
||||
sprintf(finalurl, "%s" POSTTOK "file:%s", url, dest);
|
||||
printf("\nThe URL is: \"%s\"\n", finalurl);
|
||||
printf("You can capture it through: httrack \"%s\"\n", finalurl);
|
||||
@@ -418,7 +455,7 @@ void help_catchurl(const char *dest_path) {
|
||||
}
|
||||
|
||||
// Créer un index.html vide
|
||||
void make_empty_index(char *str) {
|
||||
void make_empty_index(const char *str) {
|
||||
#if 0
|
||||
if (!fexist(fconcat(str, "index.html"))) {
|
||||
FILE *fp = fopen(fconcat(str, "index.html"), "wb");
|
||||
@@ -436,7 +473,7 @@ void make_empty_index(char *str) {
|
||||
|
||||
// mini-aide (h: help)
|
||||
// y
|
||||
void help(char *app, int more) {
|
||||
void help(const char *app, int more) {
|
||||
char info[2048];
|
||||
|
||||
infomsg("");
|
||||
@@ -444,7 +481,7 @@ void help(char *app, int more) {
|
||||
infomsg("1");
|
||||
if (more != 2) {
|
||||
sprintf(info,
|
||||
"HTTrack version " HTTRACK_VERSION "%s (compiled " __DATE__ ")",
|
||||
"HTTrack version " HTTRACK_VERSION "%s",
|
||||
hts_is_available());
|
||||
infomsg(info);
|
||||
#ifdef HTTRACK_AFF_WARNING
|
||||
@@ -568,7 +605,7 @@ void help(char *app, int more) {
|
||||
infomsg
|
||||
(" %F footer string in Html code (-%F \"Mirrored [from host %s [file %s [at %s]]]\"");
|
||||
infomsg(" %l preffered language (-%l \"fr, en, jp, *\"");
|
||||
infomsg(" %a accepted formats (-%l \"text/html,image/png,image/jpeg,image/gif;q=0.9,*/*;q=0.1\"");
|
||||
infomsg(" %a accepted formats (-%a \"text/html,image/png;q=0.9,*/*;q=0.1\"");
|
||||
infomsg(" %X additional HTTP header line (-%X \"X-Magic: 42\"");
|
||||
infomsg("");
|
||||
infomsg("Log, index, cache");
|
||||
@@ -755,10 +792,10 @@ void help(char *app, int more) {
|
||||
infomsg("example: httrack --continue");
|
||||
infomsg("continues a mirror in the current folder");
|
||||
infomsg("");
|
||||
sprintf(info, "HTTrack version " HTTRACK_VERSION "%s (compiled " __DATE__ ")",
|
||||
sprintf(info, "HTTrack version " HTTRACK_VERSION "%s",
|
||||
hts_is_available());
|
||||
infomsg(info);
|
||||
infomsg("Copyright (C) 1998-2013 Xavier Roche and other contributors");
|
||||
infomsg("Copyright (C) 1998-2014 Xavier Roche and other contributors");
|
||||
#ifdef HTS_PLATFORM_NAME
|
||||
infomsg("[compiled: " HTS_PLATFORM_NAME "]");
|
||||
#endif
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/* ------------------------------------------------------------ */
|
||||
/*
|
||||
HTTrack Website Copier, Offline Browser for Windows and Unix
|
||||
Copyright (C) 1998-2013 Xavier Roche and other contributors
|
||||
Copyright (C) 1998-2014 Xavier Roche and other contributors
|
||||
|
||||
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
|
||||
@@ -43,11 +43,11 @@ Please visit our Website: http://www.httrack.com
|
||||
typedef struct httrackp httrackp;
|
||||
#endif
|
||||
|
||||
void infomsg(char *msg);
|
||||
void help(char *app, int more);
|
||||
void make_empty_index(char *str);
|
||||
void infomsg(const char *msg);
|
||||
void help(const char *app, int more);
|
||||
void make_empty_index(const char *str);
|
||||
void help_wizard(httrackp * opt);
|
||||
int help_query(char *list, int def);
|
||||
int help_query(const char *list, int def);
|
||||
void help_catchurl(const char *dest_path);
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/* ------------------------------------------------------------ */
|
||||
/*
|
||||
HTTrack Website Copier, Offline Browser for Windows and Unix
|
||||
Copyright (C) 1998-2013 Xavier Roche and other contributors
|
||||
Copyright (C) 1998-2014 Xavier Roche and other contributors
|
||||
|
||||
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
|
||||
@@ -40,7 +40,7 @@ Please visit our Website: http://www.httrack.com
|
||||
|
||||
#if HTS_MAKE_KEYWORD_INDEX
|
||||
#include "htshash.h"
|
||||
#include "htsinthash.h"
|
||||
#include "coucal.h"
|
||||
|
||||
/* Keyword Indexer Parameters */
|
||||
|
||||
@@ -103,7 +103,7 @@ Please visit our Website: http://www.httrack.com
|
||||
|
||||
/* End of Keyword Indexer Parameters */
|
||||
|
||||
int strcpos(char *adr, char c);
|
||||
int strcpos(const char *adr, char c);
|
||||
int mystrcmp(const void *_e1, const void *_e2);
|
||||
|
||||
// Global variables
|
||||
@@ -144,7 +144,7 @@ int index_keyword(const char *html_data, LLint size, const char *mime,
|
||||
|
||||
//
|
||||
//int WordIndexSize = 1024;
|
||||
inthash WordIndexHash = NULL;
|
||||
coucal WordIndexHash = NULL;
|
||||
FILE *tmpfp = NULL;
|
||||
|
||||
//
|
||||
@@ -161,8 +161,8 @@ int index_keyword(const char *html_data, LLint size, const char *mime,
|
||||
|
||||
// Init ?
|
||||
if (hts_index_init) {
|
||||
UNLINK(concat(catbuff, indexpath, "index.txt"));
|
||||
UNLINK(concat(catbuff, indexpath, "sindex.html"));
|
||||
UNLINK(concat(catbuff, sizeof(catbuff), indexpath, "index.txt"));
|
||||
UNLINK(concat(catbuff, sizeof(catbuff), indexpath, "sindex.html"));
|
||||
hts_index_init = 0;
|
||||
}
|
||||
// Check MIME type
|
||||
@@ -190,7 +190,7 @@ int index_keyword(const char *html_data, LLint size, const char *mime,
|
||||
|
||||
// Create hash structure
|
||||
// Hash tables rulez da world!
|
||||
WordIndexHash = inthash_new(0);
|
||||
WordIndexHash = coucal_new(0);
|
||||
if (!WordIndexHash)
|
||||
return 0;
|
||||
|
||||
@@ -252,7 +252,7 @@ int index_keyword(const char *html_data, LLint size, const char *mime,
|
||||
/* Store it ? */
|
||||
if (len >= KEYW_MIN_LEN) {
|
||||
hts_primindex_words++;
|
||||
if (inthash_inc(WordIndexHash, keyword)) { /* added new */
|
||||
if (coucal_inc(WordIndexHash, keyword)) { /* added new */
|
||||
fprintf(tmpfp, "%s\n", keyword);
|
||||
}
|
||||
}
|
||||
@@ -285,13 +285,13 @@ int index_keyword(const char *html_data, LLint size, const char *mime,
|
||||
if (strnotempty(line)) {
|
||||
intptr_t e = 0;
|
||||
|
||||
if (inthash_read(WordIndexHash, line, &e)) {
|
||||
if (coucal_read(WordIndexHash, line, &e)) {
|
||||
//if (e) {
|
||||
char BIGSTK savelst[HTS_URLMAXSIZE * 2];
|
||||
|
||||
e++; /* 0 means "once" */
|
||||
|
||||
if (strncmp((const char *) fslash(catbuff, (char *) indexpath), filename, strlen(indexpath)) == 0) // couper
|
||||
if (strncmp((const char *) fslash(catbuff, sizeof(catbuff), (const char *) indexpath), filename, strlen(indexpath)) == 0) // couper
|
||||
strcpybuff(savelst, filename + strlen(indexpath));
|
||||
else
|
||||
strcpybuff(savelst, filename);
|
||||
@@ -313,7 +313,7 @@ int index_keyword(const char *html_data, LLint size, const char *mime,
|
||||
tmpfp = NULL;
|
||||
|
||||
// Clear hash table
|
||||
inthash_delete(&WordIndexHash);
|
||||
coucal_delete(&WordIndexHash);
|
||||
#endif
|
||||
return 1;
|
||||
}
|
||||
@@ -358,9 +358,9 @@ void index_finish(const char *indexpath, int mode) {
|
||||
|
||||
// Write new file
|
||||
if (mode == 1) // TEXT
|
||||
fp = fopen(concat(catbuff, indexpath, "index.txt"), "wb");
|
||||
fp = fopen(concat(catbuff, sizeof(catbuff), indexpath, "index.txt"), "wb");
|
||||
else // HTML
|
||||
fp = fopen(concat(catbuff, indexpath, "sindex.html"), "wb");
|
||||
fp = fopen(concat(catbuff, sizeof(catbuff), indexpath, "sindex.html"), "wb");
|
||||
if (fp) {
|
||||
char current_word[KEYW_LEN + 32];
|
||||
char word[KEYW_LEN + 32];
|
||||
@@ -468,8 +468,8 @@ void index_finish(const char *indexpath, int mode) {
|
||||
/* Subroutines */
|
||||
|
||||
#if HTS_MAKE_KEYWORD_INDEX
|
||||
int strcpos(char *adr, char c) {
|
||||
char *apos = strchr(adr, c);
|
||||
int strcpos(const char *adr, char c) {
|
||||
const char *apos = strchr(adr, c);
|
||||
|
||||
if (apos)
|
||||
return (int) (apos - adr);
|
||||
@@ -478,8 +478,8 @@ int strcpos(char *adr, char c) {
|
||||
}
|
||||
|
||||
int mystrcmp(const void *_e1, const void *_e2) {
|
||||
char **e1 = (char **) _e1;
|
||||
char **e2 = (char **) _e2;
|
||||
const char *const*const e1 = (const char *const*) _e1;
|
||||
const char *const*const e2 = (const char *const*) _e2;
|
||||
|
||||
return strcmp(*e1, *e2);
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/* ------------------------------------------------------------ */
|
||||
/*
|
||||
HTTrack Website Copier, Offline Browser for Windows and Unix
|
||||
Copyright (C) 1998-2013 Xavier Roche and other contributors
|
||||
Copyright (C) 1998-2014 Xavier Roche and other contributors
|
||||
|
||||
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
|
||||
|
||||
1263
src/htsinthash.c
1263
src/htsinthash.c
File diff suppressed because it is too large
Load Diff
314
src/htsinthash.h
314
src/htsinthash.h
@@ -1,314 +0,0 @@
|
||||
/* ------------------------------------------------------------ */
|
||||
/*
|
||||
HTTrack Website Copier, Offline Browser for Windows and Unix
|
||||
Copyright (C) 1998-2013 Xavier Roche and other contributors
|
||||
|
||||
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 <http://www.gnu.org/licenses/>.
|
||||
|
||||
Important notes:
|
||||
|
||||
- We hereby ask people using this source NOT to use it in purpose of grabbing
|
||||
emails addresses, or collecting any other private information on persons.
|
||||
This would disgrace our work, and spoil the many hours we spent on it.
|
||||
|
||||
Please visit our Website: http://www.httrack.com
|
||||
*/
|
||||
|
||||
/* ------------------------------------------------------------ */
|
||||
/* File: httrack.c subroutines: */
|
||||
/* hash table system (fast index) */
|
||||
/* Author: Xavier Roche */
|
||||
/* ------------------------------------------------------------ */
|
||||
|
||||
/**
|
||||
* Library notes:
|
||||
* This small hashtable library provides key/value hashtable, with a string
|
||||
* key, and integer/pointer value (with an associated optional allocator)
|
||||
* It features O(1) average insertion, O(1) lookup, and O(1) delete.
|
||||
*
|
||||
* Implementation notes:
|
||||
* Implementation is auto-rehashable, and uses cuckoo hashing of size 2**n
|
||||
* with a MD5 or FNV-1 hash function, with one additional auxiliary hash
|
||||
* function.
|
||||
* It also uses a small stash area to handle rare cases of collisions.
|
||||
* Enumeration of all key/values is possible, deletion is also possible, but
|
||||
* currently without any auto-shrinking (ie. table will never shrink).
|
||||
* Overall, two main blocks are allocated: one for the items, and one for
|
||||
* the keys (pool).
|
||||
*
|
||||
* References:
|
||||
* Cuckoo Hashing http://en.wikipedia.org/wiki/Cuckoo_hashing
|
||||
* Cuckoo Stash http://research.microsoft.com/pubs/73856/stash-full.9-30.pdf
|
||||
* FNV http://www.isthe.com/chongo/tech/comp/fnv/
|
||||
* MD5 http://en.wikipedia.org/wiki/MD5
|
||||
**/
|
||||
|
||||
#ifndef HTSINTHASH_DEFH
|
||||
#define HTSINTHASH_DEFH
|
||||
|
||||
/* Includes */
|
||||
#ifdef _WIN32
|
||||
#include <stddef.h>
|
||||
typedef unsigned __int32 uint32_t;
|
||||
typedef unsigned __int64 uint64_t;
|
||||
#elif (defined(SOLARIS) || defined(sun) || defined(HAVE_INTTYPES_H) \
|
||||
|| defined(BSD) || defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__NetBSD__) || defined(__FreeBSD_kernel__))
|
||||
#include <inttypes.h>
|
||||
#else
|
||||
#include <stdint.h>
|
||||
#endif
|
||||
|
||||
/** Value. **/
|
||||
typedef union inthash_value {
|
||||
/** Integer value. **/
|
||||
intptr_t intg;
|
||||
|
||||
/** Unsigned integer value. **/
|
||||
uintptr_t uintg;
|
||||
|
||||
/** Pointer value. **/
|
||||
void *ptr;
|
||||
} inthash_value;
|
||||
|
||||
/** NULL Value. **/
|
||||
#define INTHASH_VALUE_NULL { 0 }
|
||||
|
||||
#ifndef HTS_DEF_FWSTRUCT_inthash_item
|
||||
#define HTS_DEF_FWSTRUCT_inthash_item
|
||||
typedef struct inthash_item inthash_item;
|
||||
#endif
|
||||
|
||||
/** Hash key (32-bit) **/
|
||||
typedef uint32_t inthash_key;
|
||||
|
||||
/** Pair of hashes **/
|
||||
typedef struct inthash_keys {
|
||||
inthash_key hash1;
|
||||
inthash_key hash2;
|
||||
} inthash_keys;
|
||||
|
||||
/** NULL pair of hashes. **/
|
||||
#define INTHASH_KEYS_NULL { 0, 0 }
|
||||
|
||||
/** Item holding a value. **/
|
||||
struct inthash_item {
|
||||
/** Key. **/
|
||||
char *name;
|
||||
|
||||
/** Value. **/
|
||||
inthash_value value;
|
||||
|
||||
/** Hashes of the key. **/
|
||||
inthash_keys hashes;
|
||||
};
|
||||
|
||||
/** Alias for legacy code. **/
|
||||
typedef inthash_item inthash_chain;
|
||||
|
||||
/** Value free handler **/
|
||||
typedef void (*t_inthash_freehandler) (void *arg, void *value);
|
||||
|
||||
/** Name dup handler. **/
|
||||
typedef char* (*t_inthash_duphandler) (void *arg, const char *name);
|
||||
|
||||
/** Hash computation handler. **/
|
||||
typedef inthash_keys (*t_inthash_hasheshandler)(void *arg, const char *value);
|
||||
|
||||
/**
|
||||
* Value comparison handler (returns non-zero value if strings are equal).
|
||||
**/
|
||||
typedef int (*t_inthash_cmphandler)(void *arg, const char *a, const char *b);
|
||||
|
||||
/** Hashtable (opaque structure). **/
|
||||
#ifndef HTS_DEF_FWSTRUCT_struct_inthash
|
||||
#define HTS_DEF_FWSTRUCT_struct_inthash
|
||||
typedef struct struct_inthash struct_inthash, *inthash;
|
||||
#endif
|
||||
|
||||
/** Hashtable enumeration (opaque structure). **/
|
||||
#ifndef HTS_DEF_FWSTRUCT_struct_inthash_enum
|
||||
#define HTS_DEF_FWSTRUCT_struct_inthash_enum
|
||||
typedef struct struct_inthash_enum struct_inthash_enum;
|
||||
#endif
|
||||
|
||||
/** Enumeration. **/
|
||||
struct struct_inthash_enum {
|
||||
inthash table;
|
||||
size_t index;
|
||||
};
|
||||
|
||||
/* Library internal definictions */
|
||||
#ifdef HTS_INTERNAL_BYTECODE
|
||||
|
||||
/**
|
||||
* Create a new hashtable, with initial bucket size of 'size'.
|
||||
* If size is 0, use the default minimal bucket size.
|
||||
* Return a non-NULL pointer upon success.
|
||||
**/
|
||||
inthash inthash_new(size_t size);
|
||||
|
||||
/**
|
||||
* Was the hashtable successfully created ?
|
||||
* Return non-zero value if the hashtable is valid.
|
||||
**/
|
||||
int inthash_created(inthash hashtable);
|
||||
|
||||
/**
|
||||
* Delete a hashtable, freeing all entries.
|
||||
**/
|
||||
void inthash_delete(inthash * hashtable);
|
||||
|
||||
/**
|
||||
* Return the number of items in the hashtable.
|
||||
**/
|
||||
size_t inthash_nitems(inthash hashtable);
|
||||
|
||||
/**
|
||||
* Return the memory size taken by the hashtable.
|
||||
* (This does not take account of the possible memory taken by values)
|
||||
**/
|
||||
size_t inthash_memory_size(inthash hashtable);
|
||||
|
||||
/**
|
||||
* If 'flag' is non-zero, calls inthash_value_set_value_handler() with
|
||||
* default system free() handler function, otherwise, free the value handlers.
|
||||
**/
|
||||
void inthash_value_is_malloc(inthash hashtable, int flag);
|
||||
|
||||
/**
|
||||
* Set handlers for values.
|
||||
* free: this handler will be called when a value is to be removed from
|
||||
* the hashtable. if NULL, values won't be free'd.
|
||||
* arg: opaque custom argument to be used by functions.
|
||||
* Handler(s) MUST NOT be changed once elements have been added.
|
||||
**/
|
||||
void inthash_value_set_value_handler(inthash hashtable,
|
||||
t_inthash_freehandler free,
|
||||
void *arg);
|
||||
|
||||
/**
|
||||
* Set handlers for keys.
|
||||
* dup: handler called to duplicate a key. if NULL, the internal pool is used.
|
||||
* free: handler called to free a key. if NULL, the internal pool is used.
|
||||
* hash: hashing handler, called to hash a key. if NULL, the default hash
|
||||
* function is used.
|
||||
* equals: comparison handler, returning non-zero value when two keys are
|
||||
* identical. if NULL, the default comparison function is used.
|
||||
* arg: opaque custom argument to be used by functions.
|
||||
* Handler(s) MUST NOT be changed once elements have been added.
|
||||
**/
|
||||
void inthash_value_set_key_handler(inthash hashtable,
|
||||
t_inthash_duphandler dup,
|
||||
t_inthash_freehandler free,
|
||||
t_inthash_hasheshandler hash,
|
||||
t_inthash_cmphandler equals,
|
||||
void *arg);
|
||||
|
||||
/**
|
||||
* Read an integer entry from the hashtable.
|
||||
* Return non-zero value upon success and sets intvalue.
|
||||
**/
|
||||
int inthash_read(inthash hashtable, const char *name, intptr_t * intvalue);
|
||||
|
||||
/**
|
||||
* Same as inthash_read(), but return 0 is the value was zero.
|
||||
**/
|
||||
int inthash_readptr(inthash hashtable, const char *name, intptr_t * intvalue);
|
||||
|
||||
/**
|
||||
* Return non-zero value if the given entry exists.
|
||||
**/
|
||||
int inthash_exists(inthash hashtable, const char *name);
|
||||
|
||||
/**
|
||||
* Read an entry from the hashtable.
|
||||
* Return non-zero value upon success and sets value.
|
||||
**/
|
||||
int inthash_read_value(inthash hashtable, const char *name,
|
||||
inthash_value * value);
|
||||
|
||||
/**
|
||||
* Write an entry to the hashtable.
|
||||
* Return non-zero value if the entry was added, zero if it was replaced.
|
||||
**/
|
||||
int inthash_write_value(inthash hashtable, const char *name,
|
||||
inthash_value value);
|
||||
/**
|
||||
* Read a pointer entry from the hashtable.
|
||||
* Return non-zero value upon success and sets value.
|
||||
**/
|
||||
int inthash_read_pvoid(inthash hashtable, const char *name, void **value);
|
||||
|
||||
/**
|
||||
* Write a pointer entry to the hashtable.
|
||||
* Return non-zero value if the entry was added, zero if it was replaced.
|
||||
**/
|
||||
int inthash_write_pvoid(inthash hashtable, const char *name, void *value);
|
||||
|
||||
/**
|
||||
* Alias to inthash_write_pvoid()
|
||||
**/
|
||||
void inthash_add_pvoid(inthash hashtable, const char *name, void *value);
|
||||
|
||||
/**
|
||||
* Write an integer entry to the hashtable.
|
||||
* Return non-zero value if the entry was added, zero if it was replaced.
|
||||
**/
|
||||
int inthash_write(inthash hashtable, const char *name, intptr_t value);
|
||||
|
||||
/**
|
||||
* Alias to inthash_write()
|
||||
**/
|
||||
void inthash_add(inthash hashtable, const char *name, intptr_t value);
|
||||
|
||||
/**
|
||||
* Increment an entry value in the hashtable
|
||||
* (or create a new entry with value 1 if it does not yet exist)
|
||||
* Return non-zero value if the entry was added, zero if it was changed.
|
||||
**/
|
||||
int inthash_inc(inthash hashtable, const char *name);
|
||||
|
||||
/**
|
||||
* Decrement an entry value in the hashtable
|
||||
* (or create a new entry with value -1 if it does not yet exist)
|
||||
* Return non-zero value if the entry was added, zero if it was changed.
|
||||
**/
|
||||
int inthash_dec(inthash hashtable, const char *name);
|
||||
|
||||
/**
|
||||
* Remove an entry from the hashtable
|
||||
* Return non-zero value if the entry was removed, zero otherwise.
|
||||
**/
|
||||
int inthash_remove(inthash hashtable, const char *name);
|
||||
|
||||
/**
|
||||
* Return a new enumerator.
|
||||
* Note: deleting entries is safe while enumerating, but adding entries
|
||||
* lead to undefined enumeration behavior (yet safe).
|
||||
**/
|
||||
struct_inthash_enum inthash_enum_new(inthash hashtable);
|
||||
|
||||
/**
|
||||
* Enumerate the next entry.
|
||||
**/
|
||||
inthash_item *inthash_enum_next(struct_inthash_enum * e);
|
||||
|
||||
/**
|
||||
* Compute a hash, given a string value.
|
||||
**/
|
||||
inthash_keys inthash_hash_value(const char *value);
|
||||
|
||||
#endif
|
||||
|
||||
#endif
|
||||
@@ -1,7 +1,7 @@
|
||||
/* ------------------------------------------------------------ */
|
||||
/*
|
||||
HTTrack Website Copier, Offline Browser for Windows and Unix
|
||||
Copyright (C) 1998-2013 Xavier Roche and other contributors
|
||||
Copyright (C) 1998-2014 Xavier Roche and other contributors
|
||||
|
||||
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
|
||||
@@ -172,7 +172,7 @@ static int hts_parse_java(t_hts_callbackarg * carg, httrackp * opt,
|
||||
#if JAVADEBUG
|
||||
printf("fopen\n");
|
||||
#endif
|
||||
if ((fpout = FOPEN(fconv(catbuff, file), "r+b")) == NULL) {
|
||||
if ((fpout = FOPEN(fconv(catbuff, sizeof(catbuff), file), "r+b")) == NULL) {
|
||||
//fprintf(stderr, "Cannot open input file.\n");
|
||||
sprintf(str->err_msg, "Unable to open file %s", file);
|
||||
return 0; // une erreur..
|
||||
@@ -477,7 +477,7 @@ static int tris(httrackp * opt, char *buffer) {
|
||||
if (strnotempty(type)) // type reconnu!
|
||||
return 1;
|
||||
// ajout RX 05/2001
|
||||
else if (is_dyntype(get_ext(catbuff, buffer))) // asp,cgi...
|
||||
else if (is_dyntype(get_ext(catbuff, sizeof(catbuff), buffer))) // asp,cgi...
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
@@ -493,8 +493,9 @@ static char *printname(char rname[1024], char name[1024]) {
|
||||
|
||||
p = &name[0];
|
||||
|
||||
if (*p != '[')
|
||||
return "";
|
||||
if (*p != '[') {
|
||||
return rname; // ""
|
||||
}
|
||||
p += 2;
|
||||
//rname=(char*)calloct(strlen(name)+8,sizeof(char));
|
||||
p1 = rname;
|
||||
@@ -504,13 +505,13 @@ static char *printname(char rname[1024], char name[1024]) {
|
||||
if (*p == ';') {
|
||||
*p1 = '\0';
|
||||
strcat(rname, ".class");
|
||||
return (rname);
|
||||
return rname;
|
||||
} else
|
||||
*p1 = *p;
|
||||
p1++;
|
||||
}
|
||||
p1 -= 3;
|
||||
*p1 = '\0';
|
||||
return (rname);
|
||||
return rname;
|
||||
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/* ------------------------------------------------------------ */
|
||||
/*
|
||||
HTTrack Website Copier, Offline Browser for Windows and Unix
|
||||
Copyright (C) 1998-2013 Xavier Roche and other contributors
|
||||
Copyright (C) 1998-2014 Xavier Roche and other contributors
|
||||
|
||||
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
|
||||
|
||||
1274
src/htslib.c
1274
src/htslib.c
File diff suppressed because it is too large
Load Diff
323
src/htslib.h
323
src/htslib.h
@@ -1,7 +1,7 @@
|
||||
/* ------------------------------------------------------------ */
|
||||
/*
|
||||
HTTrack Website Copier, Offline Browser for Windows and Unix
|
||||
Copyright (C) 1998-2013 Xavier Roche and other contributors
|
||||
Copyright (C) 1998-2014 Xavier Roche and other contributors
|
||||
|
||||
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
|
||||
@@ -35,6 +35,8 @@ Please visit our Website: http://www.httrack.com
|
||||
#ifndef HTS_DEFH
|
||||
#define HTS_DEFH
|
||||
|
||||
#include "httrack-library.h"
|
||||
|
||||
/* Forward definitions */
|
||||
#ifndef HTS_DEF_FWSTRUCT_htsrequest
|
||||
#define HTS_DEF_FWSTRUCT_htsrequest
|
||||
@@ -48,6 +50,14 @@ typedef struct htsblk htsblk;
|
||||
#define HTS_DEF_FWSTRUCT_t_dnscache
|
||||
typedef struct t_dnscache t_dnscache;
|
||||
#endif
|
||||
#ifndef HTS_DEF_FWSTRUCT_lien_adrfil
|
||||
#define HTS_DEF_FWSTRUCT_lien_adrfil
|
||||
typedef struct lien_adrfil lien_adrfil;
|
||||
#endif
|
||||
#ifndef HTS_DEF_FWSTRUCT_lien_adrfilsave
|
||||
#define HTS_DEF_FWSTRUCT_lien_adrfilsave
|
||||
typedef struct lien_adrfilsave lien_adrfilsave;
|
||||
#endif
|
||||
|
||||
/* définitions globales */
|
||||
#include "htsglobal.h"
|
||||
@@ -92,87 +102,8 @@ MSVC2003INLINEBUG HTS_STATIC char *getHtsOptBuff_(httrackp * opt) {
|
||||
}
|
||||
|
||||
#undef MSVC2003INLINEBUG
|
||||
#define OPT_GET_BUFF(OPT) ( getHtsOptBuff_(OPT) )
|
||||
|
||||
// structure pour paramètres supplémentaires lors de la requête
|
||||
#ifndef HTS_DEF_FWSTRUCT_htsrequest_proxy
|
||||
#define HTS_DEF_FWSTRUCT_htsrequest_proxy
|
||||
typedef struct htsrequest_proxy htsrequest_proxy;
|
||||
#endif
|
||||
struct htsrequest_proxy {
|
||||
int active;
|
||||
const char* name;
|
||||
int port;
|
||||
const char* bindhost; // bind this host
|
||||
};
|
||||
|
||||
#ifndef HTS_DEF_FWSTRUCT_htsrequest
|
||||
#define HTS_DEF_FWSTRUCT_htsrequest
|
||||
typedef struct htsrequest htsrequest;
|
||||
#endif
|
||||
struct htsrequest {
|
||||
short int user_agent_send; // user agent (ex: httrack/1.0 [sun])
|
||||
short int http11; // l'en tête peut (doit) être signé HTTP/1.1 et non HTTP/1.0
|
||||
short int nokeepalive; // pas de keep-alive
|
||||
short int range_used; // Range utilisé
|
||||
short int nocompression; // Pas de compression
|
||||
short int flush_garbage; // recycled
|
||||
const char* user_agent;
|
||||
const char* referer;
|
||||
const char* from;
|
||||
const char* lang_iso;
|
||||
const char* accept;
|
||||
const char* headers;
|
||||
htsrequest_proxy proxy; // proxy
|
||||
};
|
||||
|
||||
// structure pour retour d'une connexion/prise d'en tête
|
||||
#ifndef HTS_DEF_FWSTRUCT_htsblk
|
||||
#define HTS_DEF_FWSTRUCT_htsblk
|
||||
typedef struct htsblk htsblk;
|
||||
#endif
|
||||
struct htsblk {
|
||||
int statuscode; // status-code, -1=erreur, 200=OK,201=..etc (cf RFC1945)
|
||||
short int notmodified; // page ou fichier NON modifié (transféré)
|
||||
short int is_write; // sortie sur disque (out) ou en mémoire (adr)
|
||||
short int is_chunk; // mode chunk
|
||||
short int compressed; // compressé?
|
||||
short int empty; // vide?
|
||||
short int keep_alive; // Keep-Alive?
|
||||
short int keep_alive_trailers; // ..with trailers extension
|
||||
int keep_alive_t; // KA timeout
|
||||
int keep_alive_max; // KA number of requests
|
||||
char *adr; // adresse du bloc de mémoire, NULL=vide
|
||||
char *headers; // adresse des en têtes si présents
|
||||
FILE *out; // écriture directe sur disque (si is_write=1)
|
||||
LLint size; // taille fichier
|
||||
char msg[80]; // message éventuel si échec ("\0"=non précisé)
|
||||
char contenttype[64]; // content-type ("text/html" par exemple)
|
||||
char charset[64]; // charset ("iso-8859-1" par exemple)
|
||||
char contentencoding[64]; // content-encoding ("gzip" par exemple)
|
||||
char *location; // on copie dedans éventuellement la véritable 'location'
|
||||
LLint totalsize; // taille totale à télécharger (-1=inconnue)
|
||||
short int is_file; // ce n'est pas une socket mais un descripteur de fichier si 1
|
||||
T_SOC soc; // ID socket
|
||||
SOCaddr address; // IP address
|
||||
int address_size; // IP address structure length
|
||||
FILE *fp; // fichier pour file://
|
||||
#if HTS_USEOPENSSL
|
||||
short int ssl; // is this connection a SSL one? (https)
|
||||
// BIO* ssl_soc; // SSL structure
|
||||
SSL *ssl_con; // connection structure
|
||||
#endif
|
||||
char lastmodified[64]; // Last-Modified
|
||||
char etag[256]; // Etag
|
||||
char cdispo[256]; // Content-Disposition coupé
|
||||
LLint crange; // Content-Range
|
||||
LLint crange_start; // Content-Range
|
||||
LLint crange_end; // Content-Range
|
||||
int debugid; // debug connection
|
||||
/* */
|
||||
htsrequest req; // paramètres pour la requête
|
||||
/*char digest[32+2]; // digest md5 généré par le moteur ("" si non généré) */
|
||||
};
|
||||
#define OPT_GET_BUFF(OPT) ( getHtsOptBuff_(OPT) )
|
||||
#define OPT_GET_BUFF_SIZE(OPT) ( sizeof(opt->state.concat.buff[0]) )
|
||||
|
||||
/* ANCIENNE STURCTURE pour cache 1.0 */
|
||||
#ifndef HTS_DEF_FWSTRUCT_OLD_t_proxy
|
||||
@@ -231,6 +162,9 @@ struct t_dnscache {
|
||||
// initialize an htsblk structure
|
||||
void hts_init_htsblk(htsblk * r);
|
||||
|
||||
// attach specific project log to hachtable logger
|
||||
void hts_set_hash_handler(coucal hashtable, httrackp *opt);
|
||||
|
||||
// version
|
||||
HTSEXT_API const char* hts_version(void);
|
||||
|
||||
@@ -240,31 +174,15 @@ int hts_read(htsblk * r, char *buff, int size);
|
||||
//int HTS_TOTAL_RECV_CHECK(int var);
|
||||
LLint check_downloadable_bytes(int rate);
|
||||
|
||||
#ifndef HTTRACK_DEFLIB
|
||||
HTSEXT_API int hts_init(void);
|
||||
HTSEXT_API int hts_uninit(void);
|
||||
HTSEXT_API int hts_uninit_module(void);
|
||||
HTSEXT_API int hts_resetvar(void); /* dummy */
|
||||
HTSEXT_API void hts_debug(int level);
|
||||
HTSEXT_API httrackp *hts_create_opt(void);
|
||||
HTSEXT_API void hts_free_opt(httrackp * opt);
|
||||
HTSEXT_API const hts_stat_struct* hts_get_stats(httrackp * opt);
|
||||
HTSEXT_API void set_wrappers(httrackp * opt); /* LEGACY */
|
||||
HTSEXT_API int plug_wrapper(httrackp * opt, const char *moduleName,
|
||||
const char *argv);
|
||||
|
||||
HTSEXT_API char *hts_strdup(const char *string);
|
||||
HTSEXT_API void *hts_malloc(size_t size);
|
||||
HTSEXT_API void *hts_realloc(void *data, size_t size);
|
||||
HTSEXT_API void hts_free(void *data);
|
||||
#endif
|
||||
|
||||
// fonctions principales
|
||||
T_SOC http_fopen(httrackp * opt, char *adr, char *fil, htsblk * retour);
|
||||
T_SOC http_fopen(httrackp * opt, const char *adr, const char *fil, htsblk * retour);
|
||||
T_SOC http_xfopen(httrackp * opt, int mode, int treat, int waitconnect,
|
||||
char *xsend, char *adr, char *fil, htsblk * retour);
|
||||
int http_sendhead(httrackp * opt, t_cookie * cookie, int mode, char *xsend,
|
||||
char *adr, char *fil, char *referer_adr, char *referer_fil,
|
||||
const char *xsend, const char *adr, const char *fil, htsblk * retour);
|
||||
int http_sendhead(httrackp * opt, t_cookie * cookie, int mode, const char *xsend,
|
||||
const char *adr, const char *fil,
|
||||
const char *referer_adr, const char *referer_fil,
|
||||
htsblk * retour);
|
||||
|
||||
//int newhttp(char* iadr,char* err=NULL);
|
||||
@@ -274,47 +192,39 @@ HTS_INLINE void deletehttp(htsblk * r);
|
||||
HTS_INLINE int deleteaddr(htsblk * r);
|
||||
HTS_INLINE void deletesoc(T_SOC soc);
|
||||
HTS_INLINE void deletesoc_r(htsblk * r);
|
||||
htsblk http_location(httrackp * opt, char *adr, char *fil, char *loc);
|
||||
htsblk http_test(httrackp * opt, char *adr, char *fil, char *loc);
|
||||
htsblk http_test(httrackp * opt, const char *adr, const char *fil, char *loc);
|
||||
int check_readinput(htsblk * r);
|
||||
int check_readinput_t(T_SOC soc, int timeout);
|
||||
void treathead(t_cookie * cookie, char *adr, char *fil, htsblk * retour,
|
||||
void treathead(t_cookie * cookie, const char *adr, const char *fil, htsblk * retour,
|
||||
char *rcvd);
|
||||
void treatfirstline(htsblk * retour, char *rcvd);
|
||||
|
||||
#ifndef HTTRACK_DEFLIB
|
||||
HTSEXT_API void infostatuscode(char *msg, int statuscode);
|
||||
#endif
|
||||
void treatfirstline(htsblk * retour, const char *rcvd);
|
||||
|
||||
// sous-fonctions
|
||||
LLint http_xfread1(htsblk * r, int bufl);
|
||||
HTS_INLINE t_hostent *hts_gethostbyname2(httrackp * opt, const char *iadr,
|
||||
void *v_buffer, const char **error);
|
||||
HTS_INLINE t_hostent *hts_gethostbyname(httrackp * opt, const char *iadr,
|
||||
void *v_buffer);
|
||||
#ifndef HTTRACK_DEFLIB
|
||||
HTSEXT_API t_hostent *vxgethostbyname2(char *hostname, void *v_buffer, const char **error);
|
||||
HTSEXT_API t_hostent *vxgethostbyname(char *hostname, void *v_buffer);
|
||||
HTSEXT_API int check_hostname_dns(char *hostname);
|
||||
#endif
|
||||
HTS_INLINE SOCaddr* hts_dns_resolve2(httrackp * opt, const char *iadr,
|
||||
SOCaddr *const addr,
|
||||
const char **error);
|
||||
HTS_INLINE SOCaddr* hts_dns_resolve(httrackp * opt, const char *iadr,
|
||||
SOCaddr *const addr);
|
||||
HTSEXT_API SOCaddr* hts_dns_resolve_nocache2(const char *const hostname,
|
||||
SOCaddr *const addr,
|
||||
const char **error);
|
||||
HTSEXT_API SOCaddr* hts_dns_resolve_nocache(const char *const hostname,
|
||||
SOCaddr *const addr);
|
||||
HTSEXT_API int check_hostname_dns(const char *const hostname);
|
||||
|
||||
int ftp_available(void);
|
||||
|
||||
#if HTS_DNSCACHE
|
||||
void hts_cache_free(t_dnscache * cache);
|
||||
t_dnscache *_hts_cache(httrackp * opt);
|
||||
void hts_cache_free(t_dnscache *const cache);
|
||||
t_dnscache *hts_cache(httrackp * opt);
|
||||
#endif
|
||||
|
||||
// outils divers
|
||||
HTS_INLINE TStamp time_local(void);
|
||||
|
||||
#ifndef HTTRACK_DEFLIB
|
||||
HTSEXT_API HTS_INLINE TStamp mtime_local(void);
|
||||
#endif
|
||||
void sec2str(char *s, TStamp t);
|
||||
|
||||
#ifndef HTTRACK_DEFLIB
|
||||
HTSEXT_API void qsec2str(char *st, TStamp t);
|
||||
#endif
|
||||
void time_gmt_rfc822(char *s);
|
||||
void time_local_rfc822(char *s);
|
||||
struct tm *convert_time_rfc822(struct tm *buffer, const char *s);
|
||||
@@ -324,14 +234,8 @@ int get_filetime_rfc822(const char *file, char *date);
|
||||
HTS_INLINE void time_rfc822(char *s, struct tm *A);
|
||||
HTS_INLINE void time_rfc822_local(char *s, struct tm *A);
|
||||
|
||||
#ifndef HTTRACK_DEFLIB
|
||||
HTSEXT_API char *int2char(strc_int2bytes2 * strc, int n);
|
||||
HTSEXT_API char *int2bytes(strc_int2bytes2 * strc, LLint n);
|
||||
HTSEXT_API char *int2bytessec(strc_int2bytes2 * strc, long int n);
|
||||
HTSEXT_API char **int2bytes2(strc_int2bytes2 * strc, LLint n);
|
||||
#endif
|
||||
HTS_INLINE int sendc(htsblk * r, const char *s);
|
||||
int finput(int fd, char *s, int max);
|
||||
int finput(T_SOC fd, char *s, int max);
|
||||
int binput(char *buff, char *s, int max);
|
||||
int linput(FILE * fp, char *s, int max);
|
||||
int linputsoc(T_SOC soc, char *s, int max);
|
||||
@@ -339,136 +243,81 @@ int linputsoc_t(T_SOC soc, char *s, int max, int timeout);
|
||||
int linput_trim(FILE * fp, char *s, int max);
|
||||
int linput_cpp(FILE * fp, char *s, int max);
|
||||
void rawlinput(FILE * fp, char *s, int max);
|
||||
char *strstrcase(char *s, char *o);
|
||||
int ident_url_absolute(const char *url, char *adr, char *fil);
|
||||
const char *strstrcase(const char *s, const char *o);
|
||||
int ident_url_absolute(const char *url, lien_adrfil *adrfil);
|
||||
void fil_simplifie(char *f);
|
||||
int is_unicode_utf8(const char *buffer, size_t size);
|
||||
int is_unicode_utf8(const char *buffer, const size_t size);
|
||||
void map_characters(unsigned char *buffer, unsigned int size,
|
||||
unsigned int *map);
|
||||
int ishtml(httrackp * opt, const char *urlfil);
|
||||
int ishtml_ext(const char *a);
|
||||
int ishttperror(int err);
|
||||
void guess_httptype(httrackp * opt, char *s, const char *fil);
|
||||
|
||||
#ifndef HTTRACK_DEFLIB
|
||||
HTSEXT_API void get_httptype(httrackp * opt, char *s, const char *fil,
|
||||
int flag);
|
||||
#endif
|
||||
int get_userhttptype(httrackp * opt, char *s, const char *fil);
|
||||
void give_mimext(char *s, const char *st);
|
||||
|
||||
#ifndef HTTRACK_DEFLIB
|
||||
HTSEXT_API int is_knowntype(httrackp * opt, const char *fil);
|
||||
HTSEXT_API int is_userknowntype(httrackp * opt, const char *fil);
|
||||
HTSEXT_API int is_dyntype(const char *fil);
|
||||
HTSEXT_API char *get_ext(char *catbuff, const char *fil);
|
||||
#endif
|
||||
int may_unknown(httrackp * opt, const char *st);
|
||||
int may_bogus_multiple(httrackp * opt, const char *mime, const char *filename);
|
||||
int may_unknown2(httrackp * opt, const char *mime, const char *filename);
|
||||
|
||||
#ifndef HTTRACK_DEFLIB
|
||||
HTSEXT_API char *jump_identification(const char *);
|
||||
HTSEXT_API char *jump_normalized(const char *);
|
||||
HTSEXT_API char *jump_toport(const char *);
|
||||
HTSEXT_API char *fil_normalized(const char *source, char *dest);
|
||||
HTSEXT_API char *adr_normalized(const char *source, char *dest);
|
||||
#endif
|
||||
char *strrchr_limit(const char *s, char c, const char *limit);
|
||||
char *strstr_limit(const char *s, const char *sub, const char *limit);
|
||||
HTS_INLINE char *jump_protocol(const char *source);
|
||||
const char *strrchr_limit(const char *s, char c, const char *limit);
|
||||
char *jump_protocol(char *source);
|
||||
const char *jump_protocol_const(const char *source);
|
||||
void code64(unsigned char *a, int size_a, unsigned char *b, int crlf);
|
||||
|
||||
#ifndef HTTRACK_DEFLIB
|
||||
HTSEXT_API void unescape_amp(char *s);
|
||||
HTSEXT_API void escape_spc_url(char *s);
|
||||
HTSEXT_API void escape_in_url(char *s);
|
||||
HTSEXT_API void escape_uri(char *s);
|
||||
HTSEXT_API void escape_uri_utf(char *s);
|
||||
HTSEXT_API void escape_check_url(char *s);
|
||||
HTSEXT_API char *escape_check_url_addr(char *catbuff, const char *s);
|
||||
HTSEXT_API void x_escape_http(char *s, int mode);
|
||||
HTSEXT_API void x_escape_html(char *s);
|
||||
HTSEXT_API void escape_remove_control(char *s);
|
||||
HTSEXT_API void escape_for_html_print(char *s, char *d);
|
||||
HTSEXT_API void escape_for_html_print_full(char *s, char *d);
|
||||
#endif
|
||||
#ifndef HTTRACK_DEFLIB
|
||||
HTSEXT_API char *unescape_http(char *catbuff, const char *s);
|
||||
HTSEXT_API char *unescape_http_unharm(char *catbuff, const char *s,
|
||||
int no_high);
|
||||
HTSEXT_API char *antislash_unescaped(char *catbuff, const char *s);
|
||||
HTSEXT_API char *concat(char *catbuff, const char *a, const char *b);
|
||||
HTSEXT_API char *fconcat(char *catbuff, const char *a, const char *b);
|
||||
HTSEXT_API char *fconv(char *catbuff, const char *a);
|
||||
#endif
|
||||
#define copychar(catbuff,a) concat(catbuff,(a),NULL)
|
||||
char *fslash(char *catbuff, const char *a);
|
||||
|
||||
#ifndef HTTRACK_DEFLIB
|
||||
HTSEXT_API int hts_log(httrackp * opt, const char *prefix, const char *msg);
|
||||
HTSEXT_API void hts_log_print(httrackp * opt, int type, const char *format,
|
||||
...) HTS_PRINTF_FUN(3, 4);
|
||||
#endif
|
||||
char *convtolower(char *catbuff, const char *a);
|
||||
void hts_lowcase(char *s);
|
||||
void hts_replace(char *s, char from, char to);
|
||||
int multipleStringMatch(const char *s, const char *match);
|
||||
|
||||
char *convtolower(char *catbuff, const char *a);
|
||||
void hts_lowcase(char *s);
|
||||
void hts_replace(char *s, char from, char to);
|
||||
int multipleStringMatch(const char *s, const char *match);
|
||||
|
||||
void fprintfio(FILE * fp, char *buff, char *prefix);
|
||||
void fprintfio(FILE * fp, const char *buff, const char *prefix);
|
||||
|
||||
#ifdef _WIN32
|
||||
#else
|
||||
int sig_ignore_flag(int setflag); // flag ignore
|
||||
int sig_ignore_flag(int setflag); // flag ignore
|
||||
#endif
|
||||
|
||||
void cut_path(char *fullpath, char *path, char *pname);
|
||||
int fexist(const char *s);
|
||||
int fexist_utf8(const char *s);
|
||||
void cut_path(char *fullpath, char *path, char *pname);
|
||||
int fexist(const char *s);
|
||||
int fexist_utf8(const char *s);
|
||||
|
||||
/*LLint fsize(const char* s); */
|
||||
off_t fpsize(FILE * fp);
|
||||
off_t fsize(const char *s);
|
||||
off_t fsize_utf8(const char *s);
|
||||
|
||||
/* root dir */
|
||||
#ifndef HTTRACK_DEFLIB
|
||||
HTSEXT_API char *hts_rootdir(char *file);
|
||||
#endif
|
||||
off_t fpsize(FILE * fp);
|
||||
off_t fsize(const char *s);
|
||||
off_t fsize_utf8(const char *s);
|
||||
|
||||
// Threads
|
||||
typedef void *(*beginthread_type) (void *);
|
||||
typedef void *(*beginthread_type) (void *);
|
||||
|
||||
/*unsigned long _beginthread( beginthread_type start_address, unsigned stack_size, void *arglist );*/
|
||||
|
||||
/* variables globales */
|
||||
extern HTSEXT_API hts_stat_struct HTS_STAT;
|
||||
extern int _DEBUG_HEAD;
|
||||
extern FILE *ioinfo;
|
||||
extern HTSEXT_API hts_stat_struct HTS_STAT;
|
||||
extern int _DEBUG_HEAD;
|
||||
extern FILE *ioinfo;
|
||||
|
||||
/* constantes */
|
||||
extern const char *hts_mime_keep[];
|
||||
extern const char *hts_mime[][2];
|
||||
extern const char *hts_main_mime[];
|
||||
extern const char *hts_detect[];
|
||||
extern const char *hts_detectbeg[];
|
||||
extern const char *hts_nodetect[];
|
||||
extern const char *hts_detectURL[];
|
||||
extern const char *hts_detectandleave[];
|
||||
extern const char *hts_detect_js[];
|
||||
extern const char *hts_mime_keep[];
|
||||
extern const char *hts_mime[][2];
|
||||
extern const char *hts_main_mime[];
|
||||
extern const char *hts_detect[];
|
||||
extern const char *hts_detectbeg[];
|
||||
extern const char *hts_nodetect[];
|
||||
extern const char *hts_detectURL[];
|
||||
extern const char *hts_detectandleave[];
|
||||
extern const char *hts_detect_js[];
|
||||
|
||||
// htsmodule.c definitions
|
||||
extern void *openFunctionLib(const char *file_);
|
||||
extern void *getFunctionPtr(void *handle, const char *fncname);
|
||||
extern void closeFunctionLib(void *handle);
|
||||
extern void *openFunctionLib(const char *file_);
|
||||
extern void *getFunctionPtr(void *handle, const char *fncname);
|
||||
extern void closeFunctionLib(void *handle);
|
||||
|
||||
extern void clearCallbacks(htscallbacks * chain);
|
||||
extern size_t hts_get_callback_offs(const char *name);
|
||||
int hts_set_callback(t_hts_htmlcheck_callbacks * callbacks,
|
||||
const char *name, void *function);
|
||||
void *hts_get_callback(t_hts_htmlcheck_callbacks * callbacks,
|
||||
const char *name);
|
||||
extern void clearCallbacks(htscallbacks * chain);
|
||||
int hts_set_callback(t_hts_htmlcheck_callbacks * callbacks,
|
||||
const char *name, void *function);
|
||||
void *hts_get_callback(t_hts_htmlcheck_callbacks * callbacks,
|
||||
const char *name);
|
||||
|
||||
#define CBSTRUCT(OPT) ((t_hts_htmlcheck_callbacks*) ((OPT)->callbacks_fun))
|
||||
#define GET_USERCALLBACK(OPT, NAME) ( CBSTRUCT(OPT)-> NAME .fun )
|
||||
@@ -581,7 +430,7 @@ HTSEXT_API void hts_log_print(httrackp * opt, int type, const char *format,
|
||||
|
||||
// compare le début de f avec s et retourne la position de la fin
|
||||
// 'A=a' (case insensitive)
|
||||
HTS_STATIC int strfield(const char *f, const char *s) {
|
||||
HTS_STATIC int strfield(const char *f, const char *s) {
|
||||
int r = 0;
|
||||
|
||||
while(streql(*f, *s) && ((*f) != 0) && ((*s) != 0)) {
|
||||
@@ -593,8 +442,9 @@ HTSEXT_API void hts_log_print(httrackp * opt, int type, const char *format,
|
||||
return r;
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
HTS_STATIC int strcmpnocase(char *a, char *b) {
|
||||
}
|
||||
|
||||
HTS_STATIC int strcmpnocase(const char *a, const char *b) {
|
||||
while(*a) {
|
||||
int cmp = hichar(*a) - hichar(*b);
|
||||
|
||||
@@ -689,6 +539,15 @@ HTS_STATIC int compare_mime(httrackp * opt, const char *mime, const char *file,
|
||||
|
||||
#endif
|
||||
|
||||
// returns (size_t) -1 upon error
|
||||
static HTS_UNUSED size_t off_t_to_size_t(off_t o) {
|
||||
if (o >= 0 && o < (off_t) ( (size_t) -1 ) / 2) {
|
||||
return (size_t) o;
|
||||
} else {
|
||||
return (size_t) -1;
|
||||
}
|
||||
}
|
||||
|
||||
/* dirent() compatibility */
|
||||
#ifdef _WIN32
|
||||
#define HTS_DIRENT_SIZE 256
|
||||
|
||||
30
src/htsmd5.c
30
src/htsmd5.c
@@ -1,7 +1,7 @@
|
||||
/* ------------------------------------------------------------ */
|
||||
|
||||
/*
|
||||
HTTrack Website Copier, Offline Browser for Windows and Unix
|
||||
Copyright (C) 1998-2013 Xavier Roche and other contributors
|
||||
Copyright (C) 1998-2014 Xavier Roche and other contributors
|
||||
|
||||
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
|
||||
@@ -41,13 +41,15 @@ Please visit our Website: http://www.httrack.com
|
||||
#include <string.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <assert.h>
|
||||
#include "htsmd5.h"
|
||||
#include "md5.h"
|
||||
#include "htssafe.h"
|
||||
|
||||
int domd5mem(const char *buf, size_t len, char *digest, int asAscii) {
|
||||
int endian = 1;
|
||||
unsigned char bindigest[16];
|
||||
MD5_CTX ctx;
|
||||
struct MD5Context ctx;
|
||||
|
||||
MD5Init(&ctx, *((char *) &endian));
|
||||
MD5Update(&ctx, (const unsigned char *) buf, (unsigned int) len);
|
||||
@@ -77,3 +79,25 @@ unsigned long int md5sum32(const char *buff) {
|
||||
domd5mem(buff, strlen(buff), u.md5digest, 0);
|
||||
return u.hash;
|
||||
}
|
||||
|
||||
void md5selftest(void) {
|
||||
static const char str1[] = "The quick brown fox jumps over the lazy dog\n";
|
||||
static const char str1m[] = "37c4b87edffc5d198ff5a185cee7ee09";
|
||||
static const char str2[] = "Hello";
|
||||
static const char str2m[] = "8b1a9953c4611296a827abf8c47804d7";
|
||||
char digest[64];
|
||||
#define MDCHECK(VAR, VARMD) do { \
|
||||
memset(digest, 0xCC, sizeof(digest)); \
|
||||
domd5mem(VAR, sizeof(VAR) - 1, digest, 1); \
|
||||
if (strcmp(digest, VARMD) != 0) { \
|
||||
fprintf(stderr, \
|
||||
"error: md5 selftest failed: '%s' => '%s' (!= '%s')\n", \
|
||||
VAR, digest, VARMD); \
|
||||
assert(! "md5 selftest failed"); \
|
||||
} \
|
||||
} while(0)
|
||||
MDCHECK(str1, str1m);
|
||||
MDCHECK(str2, str2m);
|
||||
#undef MDCHECK
|
||||
fprintf(stderr, "md5 selftest succeeded\n");
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/* ------------------------------------------------------------ */
|
||||
/*
|
||||
HTTrack Website Copier, Offline Browser for Windows and Unix
|
||||
Copyright (C) 1998-2013 Xavier Roche and other contributors
|
||||
Copyright (C) 1998-2014 Xavier Roche and other contributors
|
||||
|
||||
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
|
||||
@@ -42,6 +42,7 @@ Please visit our Website: http://www.httrack.com
|
||||
#ifdef HTS_INTERNAL_BYTECODE
|
||||
int domd5mem(const char *buf, size_t len, char *digest, int asAscii);
|
||||
unsigned long int md5sum32(const char *buff);
|
||||
void md5selftest(void);
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/* ------------------------------------------------------------ */
|
||||
/*
|
||||
HTTrack Website Copier, Offline Browser for Windows and Unix
|
||||
Copyright (C) 1998-2013 Xavier Roche and other contributors
|
||||
Copyright (C) 1998-2014 Xavier Roche and other contributors
|
||||
|
||||
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
|
||||
@@ -89,30 +89,6 @@ HTSEXT_API const char *hts_get_version_info(httrackp * opt) {
|
||||
return opt->state.HTbuff;
|
||||
}
|
||||
|
||||
/* memory checks */
|
||||
HTSEXT_API htsErrorCallback htsCallbackErr = NULL;
|
||||
HTSEXT_API int htsMemoryFastXfr = 1; /* fast xfr by default */
|
||||
void abortLog__fnc(char *msg, char *file, int line);
|
||||
void abortLog__fnc(char *msg, char *file, int line) {
|
||||
FILE *fp = fopen("CRASH.TXT", "wb");
|
||||
|
||||
if (!fp)
|
||||
fp = fopen("/tmp/CRASH.TXT", "wb");
|
||||
if (!fp)
|
||||
fp = fopen("C:\\CRASH.TXT", "wb");
|
||||
if (!fp)
|
||||
fp = fopen("CRASH.TXT", "wb");
|
||||
if (fp) {
|
||||
fprintf(fp, "HTTrack " HTTRACK_VERSIONID " closed at '%s', line %d\r\n",
|
||||
file, line);
|
||||
fprintf(fp, "Reason:\r\n%s\r\n", msg);
|
||||
fflush(fp);
|
||||
fclose(fp);
|
||||
}
|
||||
}
|
||||
|
||||
HTSEXT_API t_abortLog abortLog__ = abortLog__fnc; /* avoid VC++ inlining */
|
||||
|
||||
static void htspe_log(htsmoduleStruct * str, const char *msg);
|
||||
|
||||
int hts_parse_externals(htsmoduleStruct * str) {
|
||||
@@ -242,17 +218,17 @@ void htspe_init(void) {
|
||||
/* See CVE-2010-5252 */
|
||||
#if (defined(_WIN32) && (!defined(_DEBUG)))
|
||||
{
|
||||
/* >= Windows Server 2003 (Andy Hewitt) */
|
||||
const DWORD dwVersion = GetVersion();
|
||||
const DWORD dwMajorVersion = (DWORD)(LOBYTE(LOWORD(dwVersion)));
|
||||
const DWORD dwMinorVersion = (DWORD)(HIBYTE(LOWORD(dwVersion)));
|
||||
const int hasSetDllDirectory =
|
||||
dwMajorVersion >= 6 || ( dwMajorVersion == 5 && dwMinorVersion >= 2 );
|
||||
/* See KB 2389418
|
||||
"If this parameter is an empty string (""), the call removes the
|
||||
current directory from the default DLL search order" */
|
||||
if (hasSetDllDirectory && !SetDllDirectory("")) {
|
||||
BOOL (WINAPI*const k32_SetDllDirectoryA)(LPCSTR) =
|
||||
(BOOL (WINAPI *)(LPCSTR))
|
||||
GetProcAddress(GetModuleHandle("kernel32.dll"), "SetDllDirectoryA");
|
||||
if (k32_SetDllDirectoryA != NULL && !k32_SetDllDirectoryA("")) {
|
||||
/* Do no choke on NT or 98SE with KernelEx NT API (James Blough) */
|
||||
const DWORD dwVersion = GetVersion();
|
||||
const DWORD dwMajorVersion = (DWORD)(LOBYTE(LOWORD(dwVersion)));
|
||||
const DWORD dwMinorVersion = (DWORD)(HIBYTE(LOWORD(dwVersion)));
|
||||
if (dwMajorVersion >= 5) {
|
||||
assertf(!"SetDllDirectory failed");
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/* ------------------------------------------------------------ */
|
||||
/*
|
||||
HTTrack Website Copier, Offline Browser for Windows and Unix
|
||||
Copyright (C) 1998-2013 Xavier Roche and other contributors
|
||||
Copyright (C) 1998-2014 Xavier Roche and other contributors
|
||||
|
||||
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
|
||||
@@ -104,22 +104,21 @@ struct htsmoduleStruct {
|
||||
httrackp *opt;
|
||||
|
||||
/* Internal use - please don't touch */
|
||||
lien_url **liens;
|
||||
struct_back *sback;
|
||||
cache_back *cache;
|
||||
hash_struct *hashptr;
|
||||
int numero_passe;
|
||||
int add_tab_alloc;
|
||||
/* */
|
||||
int *lien_tot_;
|
||||
int *ptr_;
|
||||
size_t *lien_size_;
|
||||
char **lien_buffer_;
|
||||
const char *page_charset_;
|
||||
/* Internal use - please don't touch */
|
||||
|
||||
};
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/* Used to wrap module initialization */
|
||||
/* return 1 if init was ok */
|
||||
typedef int (*t_htsWrapperInit) (char *fn, char *args);
|
||||
@@ -138,4 +137,8 @@ extern int hts_parse_externals(htsmoduleStruct * str);
|
||||
extern int V6_is_available;
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
366
src/htsname.c
366
src/htsname.c
@@ -1,7 +1,7 @@
|
||||
/* ------------------------------------------------------------ */
|
||||
/*
|
||||
HTTrack Website Copier, Offline Browser for Windows and Unix
|
||||
Copyright (C) 1998-2013 Xavier Roche and other contributors
|
||||
Copyright (C) 1998-2014 Xavier Roche and other contributors
|
||||
|
||||
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
|
||||
@@ -47,15 +47,15 @@ Please visit our Website: http://www.httrack.com
|
||||
{ /* ajout nom */\
|
||||
char BIGSTK buff[HTS_URLMAXSIZE*2];\
|
||||
buff[0]='\0';\
|
||||
strncatbuff(buff,start_pos,(int) (nom_pos - start_pos));\
|
||||
url_savename_addstr(save,buff);\
|
||||
strncatbuff(buff,start_pos,nom_pos - start_pos);\
|
||||
url_savename_addstr(afs->save, buff);\
|
||||
}
|
||||
|
||||
#define ADD_STANDARD_NAME(shortname) \
|
||||
{ /* ajout nom */\
|
||||
char BIGSTK buff[HTS_URLMAXSIZE*2];\
|
||||
standard_name(buff,dot_pos,nom_pos,fil_complete,(shortname));\
|
||||
url_savename_addstr(save,buff);\
|
||||
url_savename_addstr(afs->save, buff);\
|
||||
}
|
||||
|
||||
/* Avoid stupid DOS system folders/file such as 'nul' */
|
||||
@@ -82,11 +82,11 @@ static const char *hts_tbdev[] = {
|
||||
HTS_STAT.stat_errors=fspc(opt,NULL,"error"); \
|
||||
HTS_STAT.stat_warnings=fspc(opt,NULL,"warning"); \
|
||||
HTS_STAT.stat_infos=fspc(opt,NULL,"info"); \
|
||||
HTS_STAT.nbk=backlinks_done(sback,liens,lien_tot,ptr); \
|
||||
HTS_STAT.nbk=backlinks_done(sback,opt->liens,opt->lien_tot,ptr); \
|
||||
HTS_STAT.nb=back_transferred(HTS_STAT.stat_bytes,sback); \
|
||||
/* Check */ \
|
||||
{ \
|
||||
if (!RUN_CALLBACK7(opt, loop, sback->lnk, sback->count,-1,ptr,lien_tot,(int) (time_local()-HTS_STAT.stat_timestart),&HTS_STAT)) { \
|
||||
if (!RUN_CALLBACK7(opt, loop, sback->lnk, sback->count,-1,ptr,opt->lien_tot,(int) (time_local()-HTS_STAT.stat_timestart),&HTS_STAT)) { \
|
||||
return -1; \
|
||||
} \
|
||||
} \
|
||||
@@ -139,10 +139,10 @@ static void cleanEndingSpaceOrDot(char *s) {
|
||||
|
||||
// forme le nom du fichier à sauver (save) à partir de fil et adr
|
||||
// système intelligent, qui renomme en cas de besoin (exemple: deux INDEX.HTML et index.html)
|
||||
int url_savename(char *adr_complete, char *fil_complete, char *save,
|
||||
char *former_adr, char *former_fil, char *referer_adr,
|
||||
char *referer_fil, httrackp * opt, lien_url ** liens,
|
||||
int lien_tot, struct_back * sback, cache_back * cache,
|
||||
int url_savename(lien_adrfilsave *const afs,
|
||||
lien_adrfil *const former,
|
||||
const char *referer_adr, const char *referer_fil,
|
||||
httrackp * opt, struct_back * sback, cache_back * cache,
|
||||
hash_struct * hash, int ptr, int numero_passe,
|
||||
const lien_back * headers) {
|
||||
char catbuff[CATBUFF_SIZE];
|
||||
@@ -152,7 +152,10 @@ int url_savename(char *adr_complete, char *fil_complete, char *save,
|
||||
lien_back *const back = sback->lnk;
|
||||
|
||||
/* */
|
||||
char BIGSTK newfil[HTS_URLMAXSIZE * 2]; /* ="" */
|
||||
char BIGSTK fil[HTS_URLMAXSIZE * 2]; /* ="" */
|
||||
|
||||
const char *const adr_complete = afs->af.adr;
|
||||
const char *const fil_complete = afs->af.fil;
|
||||
|
||||
/*char BIGSTK normadr_[HTS_URLMAXSIZE*2]; */
|
||||
char BIGSTK normadr_[HTS_URLMAXSIZE * 2], normfil_[HTS_URLMAXSIZE * 2];
|
||||
@@ -161,13 +164,12 @@ int url_savename(char *adr_complete, char *fil_complete, char *save,
|
||||
static const char *protocol_str[] =
|
||||
{ "http", "https", "ftp", "file", "unknown" };
|
||||
int protocol = PROTOCOL_HTTP;
|
||||
const char *const adr = jump_identification(adr_complete);
|
||||
char *fil = fil_complete;
|
||||
const char *const adr = jump_identification_const(adr_complete);
|
||||
// copy of fil, used for lookups (see urlhack)
|
||||
const char *normadr = adr;
|
||||
const char *normfil = fil;
|
||||
const char *const print_adr = jump_protocol(adr);
|
||||
char *start_pos = NULL, *nom_pos = NULL, *dot_pos = NULL; // Position nom et point
|
||||
const char *normfil = fil_complete;
|
||||
const char *const print_adr = jump_protocol_const(adr);
|
||||
const char *start_pos = NULL, *nom_pos = NULL, *dot_pos = NULL; // Position nom et point
|
||||
|
||||
// pour changement d'extension ou de nom (content-disposition)
|
||||
int ext_chg = 0, ext_chg_delayed = 0;
|
||||
@@ -176,8 +178,8 @@ int url_savename(char *adr_complete, char *fil_complete, char *save,
|
||||
int max_char = 0;
|
||||
|
||||
//CLEAR
|
||||
newfil[0] = ext[0] = '\0';
|
||||
save[0] = '\0';
|
||||
fil[0] = ext[0] = '\0';
|
||||
afs->save[0] = '\0';
|
||||
|
||||
/* 8-3 ? */
|
||||
switch (opt->savename_83) {
|
||||
@@ -199,7 +201,7 @@ int url_savename(char *adr_complete, char *fil_complete, char *save,
|
||||
if (opt->urlhack) {
|
||||
// copy of adr (without protocol), used for lookups (see urlhack)
|
||||
normadr = adr_normalized(adr, normadr_);
|
||||
normfil = fil_normalized(fil, normfil_);
|
||||
normfil = fil_normalized(fil_complete, normfil_);
|
||||
} else {
|
||||
if (link_has_authority(adr_complete)) { // https or other protocols : in "http/" subfolder
|
||||
char *pos = strchr(adr_complete, ':');
|
||||
@@ -227,8 +229,8 @@ int url_savename(char *adr_complete, char *fil_complete, char *save,
|
||||
|
||||
// court-circuit pour lien primaire
|
||||
if (strnotempty(adr) == 0) {
|
||||
if (strcmp(fil, "primary") == 0) {
|
||||
strcatbuff(save, "primary.html");
|
||||
if (strcmp(fil_complete, "primary") == 0) {
|
||||
strcatbuff(afs->save, "primary.html");
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
@@ -259,21 +261,21 @@ int url_savename(char *adr_complete, char *fil_complete, char *save,
|
||||
// vérifier que le nom n'a pas déja été calculé (si oui le renvoyer tel que)
|
||||
// vérifier que le nom n'est pas déja pris...
|
||||
// NOTE: si on cherche /toto/ et que /toto est trouvé on le prend (et réciproquqment) ** // **
|
||||
if (liens != NULL) {
|
||||
if (opt->liens != NULL) {
|
||||
int i;
|
||||
|
||||
i = hash_read(hash, normadr, normfil, HASH_STRUCT_ADR_PATH); // recherche table 1 (adr+fil)
|
||||
if (i >= 0) { // ok, trouvé
|
||||
strcpybuff(save, liens[i]->sav);
|
||||
strcpybuff(afs->save, heap(i)->sav);
|
||||
return 0;
|
||||
}
|
||||
i = hash_read(hash, normadr, normfil, HASH_STRUCT_ORIGINAL_ADR_PATH); // recherche table 2 (former_adr+former_fil)
|
||||
i = hash_read(hash, normadr, normfil, HASH_STRUCT_ORIGINAL_ADR_PATH); // recherche table 2 (former->adr+former->fil)
|
||||
if (i >= 0) { // ok, trouvé
|
||||
// copier location moved!
|
||||
strcpybuff(adr_complete, liens[i]->adr);
|
||||
strcpybuff(fil_complete, liens[i]->fil);
|
||||
strcpybuff(afs->af.adr, heap(i)->adr);
|
||||
strcpybuff(afs->af.fil, heap(i)->fil);
|
||||
// et save
|
||||
strcpybuff(save, liens[i]->sav); // copier (formé à partir du nouveau lien!)
|
||||
strcpybuff(afs->save, heap(i)->sav); // copier (formé à partir du nouveau lien!)
|
||||
return 0;
|
||||
}
|
||||
// chercher sans / ou avec / dans former
|
||||
@@ -286,13 +288,13 @@ int url_savename(char *adr_complete, char *fil_complete, char *save,
|
||||
fil_complete_patche[strlen(fil_complete_patche) - 1] = '\0';
|
||||
else
|
||||
strcatbuff(fil_complete_patche, "/");
|
||||
i = hash_read(hash, normadr, fil_complete_patche, HASH_STRUCT_ORIGINAL_ADR_PATH); // recherche table 2 (former_adr+former_fil)
|
||||
i = hash_read(hash, normadr, fil_complete_patche, HASH_STRUCT_ORIGINAL_ADR_PATH); // recherche table 2 (former->adr+former->fil)
|
||||
if (i >= 0) {
|
||||
// écraser fil et adr (pas former_fil?????)
|
||||
strcpybuff(adr_complete, liens[i]->adr);
|
||||
strcpybuff(fil_complete, liens[i]->fil);
|
||||
// écraser fil et adr (pas former->fil?????)
|
||||
strcpybuff(afs->af.adr, heap(i)->adr);
|
||||
strcpybuff(afs->af.fil, heap(i)->fil);
|
||||
// écrire save
|
||||
strcpybuff(save, liens[i]->sav);
|
||||
strcpybuff(afs->save, heap(i)->sav);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
@@ -303,13 +305,12 @@ int url_savename(char *adr_complete, char *fil_complete, char *save,
|
||||
{
|
||||
char *a;
|
||||
|
||||
a = strchr(fil, '?');
|
||||
a = strchr(fil_complete, '?');
|
||||
if (a != NULL) {
|
||||
strncatbuff(newfil, fil, (int) (a - fil));
|
||||
strncatbuff(fil, fil_complete, a - fil_complete);
|
||||
} else {
|
||||
strcpybuff(newfil, fil);
|
||||
strcpybuff(fil, fil_complete);
|
||||
}
|
||||
fil = newfil;
|
||||
}
|
||||
|
||||
// decode remaining % (normally not necessary; already done in htsparse.c)
|
||||
@@ -328,8 +329,8 @@ int url_savename(char *adr_complete, char *fil_complete, char *save,
|
||||
is_html = ishtml(opt, fil);
|
||||
switch (is_html) { /* .html,.shtml,.. */
|
||||
case 1:
|
||||
if ((strfield2(get_ext(OPT_GET_BUFF(opt), fil), "html") == 0)
|
||||
&& (strfield2(get_ext(OPT_GET_BUFF(opt), fil), "htm") == 0)
|
||||
if ((strfield2(get_ext(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), fil), "html") == 0)
|
||||
&& (strfield2(get_ext(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), fil), "htm") == 0)
|
||||
) {
|
||||
strcpybuff(ext, "html");
|
||||
ext_chg = 1;
|
||||
@@ -465,8 +466,7 @@ int url_savename(char *adr_complete, char *fil_complete, char *save,
|
||||
//
|
||||
int hihp = opt->state._hts_in_html_parsing;
|
||||
int has_been_moved = 0;
|
||||
char BIGSTK curr_adr[HTS_URLMAXSIZE * 2],
|
||||
curr_fil[HTS_URLMAXSIZE * 2];
|
||||
lien_adrfil current;
|
||||
|
||||
/* Ensure we don't use too many sockets by using a "testing" one
|
||||
If we have only 1 simultaneous connection authorized, wait for pending download
|
||||
@@ -475,20 +475,20 @@ int url_savename(char *adr_complete, char *fil_complete, char *save,
|
||||
URLSAVENAME_WAIT_FOR_AVAILABLE_SOCKET();
|
||||
|
||||
/* Rock'in */
|
||||
curr_adr[0] = curr_fil[0] = '\0';
|
||||
current.adr[0] = current.fil[0] = '\0';
|
||||
opt->state._hts_in_html_parsing = 2; // test
|
||||
hts_log_print(opt, LOG_DEBUG, "Testing link type %s%s",
|
||||
adr_complete, fil_complete);
|
||||
strcpybuff(curr_adr, adr_complete);
|
||||
strcpybuff(curr_fil, fil_complete);
|
||||
strcpybuff(current.adr, adr_complete);
|
||||
strcpybuff(current.fil, fil_complete);
|
||||
// ajouter dans le backing le fichier en mode test
|
||||
// savename: rien car en mode test
|
||||
if (back_add
|
||||
(sback, opt, cache, curr_adr, curr_fil, BACK_ADD_TEST,
|
||||
(sback, opt, cache, current.adr, current.fil, BACK_ADD_TEST,
|
||||
referer_adr, referer_fil, 1) != -1) {
|
||||
int b;
|
||||
|
||||
b = back_index(opt, sback, curr_adr, curr_fil, BACK_ADD_TEST);
|
||||
b = back_index(opt, sback, current.adr, current.fil, BACK_ADD_TEST);
|
||||
if (b >= 0) {
|
||||
int stop_looping = 0;
|
||||
int petits_tours = 0;
|
||||
@@ -500,8 +500,7 @@ int url_savename(char *adr_complete, char *fil_complete, char *save,
|
||||
back_wait(sback, opt, cache, 0);
|
||||
}
|
||||
if (ptr >= 0) {
|
||||
back_fillmax(sback, opt, cache, liens, ptr, numero_passe,
|
||||
lien_tot);
|
||||
back_fillmax(sback, opt, cache, ptr, numero_passe);
|
||||
}
|
||||
// on est obligé d'appeler le shell pour le refresh..
|
||||
// Transfer rate
|
||||
@@ -512,11 +511,11 @@ int url_savename(char *adr_complete, char *fil_complete, char *save,
|
||||
HTS_STAT.stat_errors = fspc(opt, NULL, "error");
|
||||
HTS_STAT.stat_warnings = fspc(opt, NULL, "warning");
|
||||
HTS_STAT.stat_infos = fspc(opt, NULL, "info");
|
||||
HTS_STAT.nbk = backlinks_done(sback, liens, lien_tot, ptr);
|
||||
HTS_STAT.nbk = backlinks_done(sback, opt->liens, opt->lien_tot, ptr);
|
||||
HTS_STAT.nb = back_transferred(HTS_STAT.stat_bytes, sback);
|
||||
|
||||
if (!RUN_CALLBACK7
|
||||
(opt, loop, sback->lnk, sback->count, b, ptr, lien_tot,
|
||||
(opt, loop, sback->lnk, sback->count, b, ptr, opt->lien_tot,
|
||||
(int) (time_local() - HTS_STAT.stat_timestart),
|
||||
&HTS_STAT)) {
|
||||
return -1;
|
||||
@@ -527,42 +526,40 @@ int url_savename(char *adr_complete, char *fil_complete, char *save,
|
||||
// traitement des 304,303..
|
||||
if (back[b].status <= 0) {
|
||||
if (HTTP_IS_REDIRECT(back[b].r.statuscode)) { // agh moved.. un tit tour de plus
|
||||
if ((petits_tours < 5) && (former_adr) && (former_fil)) { // on va pas tourner en rond non plus!
|
||||
if ((int) strnotempty(back[b].r.location)) { // location existe!
|
||||
char BIGSTK mov_url[HTS_URLMAXSIZE * 2],
|
||||
mov_adr[HTS_URLMAXSIZE * 2],
|
||||
mov_fil[HTS_URLMAXSIZE * 2];
|
||||
mov_url[0] = mov_adr[0] = mov_fil[0] = '\0';
|
||||
if ((petits_tours < 5) && former != NULL) { // on va pas tourner en rond non plus!
|
||||
if (strnotempty(back[b].r.location)) { // location existe!
|
||||
char BIGSTK mov_url[HTS_URLMAXSIZE * 2];
|
||||
lien_adrfil moved;
|
||||
mov_url[0] = moved.adr[0] = moved.fil[0] = '\0';
|
||||
//
|
||||
strcpybuff(mov_url, back[b].r.location); // copier URL
|
||||
if (ident_url_relatif
|
||||
(mov_url, curr_adr, curr_fil, mov_adr,
|
||||
mov_fil) >= 0) {
|
||||
(mov_url, current.adr, current.fil, &moved) >= 0) {
|
||||
// si non bouclage sur soi même, ou si test avec GET non testé
|
||||
if ((strcmp(mov_adr, curr_adr))
|
||||
|| (strcmp(mov_fil, curr_fil))
|
||||
if ((strcmp(moved.adr, current.adr))
|
||||
|| (strcmp(moved.fil, current.fil))
|
||||
|| (get_test_request == 0)) {
|
||||
// bouclage?
|
||||
if ((!strcmp(mov_adr, curr_adr))
|
||||
&& (!strcmp(mov_fil, curr_fil)))
|
||||
if ((!strcmp(moved.adr, current.adr))
|
||||
&& (!strcmp(moved.fil, current.fil)))
|
||||
get_test_request = 1; // faire requète avec GET
|
||||
|
||||
// recopier former_adr/fil?
|
||||
if ((former_adr) && (former_fil)) {
|
||||
if (strnotempty(former_adr) == 0) { // Pas déja noté
|
||||
strcpybuff(former_adr, curr_adr);
|
||||
strcpybuff(former_fil, curr_fil);
|
||||
// recopier former->adr/fil?
|
||||
if (former != NULL) {
|
||||
if (strnotempty(former->adr) == 0) { // Pas déja noté
|
||||
strcpybuff(former->adr, current.adr);
|
||||
strcpybuff(former->fil, current.fil);
|
||||
}
|
||||
}
|
||||
// check explicit forbidden - don't follow 3xx in this case
|
||||
{
|
||||
int set_prio_to = 0;
|
||||
|
||||
if (hts_acceptlink(opt, ptr, lien_tot, liens, mov_adr, mov_fil, NULL, NULL, &set_prio_to, NULL) == 1) { /* forbidden */
|
||||
if (hts_acceptlink(opt, ptr, moved.adr, moved.fil, NULL, NULL, &set_prio_to, NULL) == 1) { /* forbidden */
|
||||
has_been_moved = 1;
|
||||
back_maydelete(opt, cache, sback, b); // ok
|
||||
strcpybuff(curr_adr, mov_adr);
|
||||
strcpybuff(curr_fil, mov_fil);
|
||||
strcpybuff(current.adr, moved.adr);
|
||||
strcpybuff(current.fil, moved.fil);
|
||||
mov_url[0] = '\0';
|
||||
stop_looping = 1;
|
||||
}
|
||||
@@ -573,11 +570,11 @@ int url_savename(char *adr_complete, char *fil_complete, char *save,
|
||||
) { // ftp, ok on arrête
|
||||
has_been_moved = 1;
|
||||
back_maydelete(opt, cache, sback, b); // ok
|
||||
strcpybuff(curr_adr, mov_adr);
|
||||
strcpybuff(curr_fil, mov_fil);
|
||||
strcpybuff(current.adr, moved.adr);
|
||||
strcpybuff(current.fil, moved.fil);
|
||||
stop_looping = 1;
|
||||
} else if (*mov_url) {
|
||||
char *methode;
|
||||
const char *methode;
|
||||
|
||||
if (!get_test_request)
|
||||
methode = BACK_ADD_TEST; // tester avec HEAD
|
||||
@@ -585,24 +582,24 @@ int url_savename(char *adr_complete, char *fil_complete, char *save,
|
||||
methode = BACK_ADD_TEST2; // tester avec GET
|
||||
hts_log_print(opt, LOG_WARNING,
|
||||
"Loop with HEAD request (during prefetch) at %s%s",
|
||||
curr_adr, curr_fil);
|
||||
current.adr, current.fil);
|
||||
}
|
||||
// Ajouter
|
||||
URLSAVENAME_WAIT_FOR_AVAILABLE_SOCKET();
|
||||
if (back_add(sback, opt, cache, mov_adr, mov_fil, methode, referer_adr, referer_fil, 1) != -1) { // OK
|
||||
if (back_add(sback, opt, cache, moved.adr, moved.fil, methode, referer_adr, referer_fil, 1) != -1) { // OK
|
||||
hts_log_print(opt, LOG_DEBUG,
|
||||
"(during prefetch) %s (%d) to link %s at %s%s",
|
||||
back[b].r.msg,
|
||||
back[b].r.statuscode,
|
||||
back[b].r.location, curr_adr,
|
||||
curr_fil);
|
||||
back[b].r.location, current.adr,
|
||||
current.fil);
|
||||
|
||||
// libérer emplacement backing actuel et attendre le prochain
|
||||
back_maydelete(opt, cache, sback, b);
|
||||
strcpybuff(curr_adr, mov_adr);
|
||||
strcpybuff(curr_fil, mov_fil);
|
||||
strcpybuff(current.adr, moved.adr);
|
||||
strcpybuff(current.fil, moved.fil);
|
||||
b =
|
||||
back_index(opt, sback, curr_adr, curr_fil,
|
||||
back_index(opt, sback, current.adr, current.fil,
|
||||
methode);
|
||||
if (!get_test_request)
|
||||
has_been_moved = 1; // sinon ne pas forcer has_been_moved car non déplacé
|
||||
@@ -611,7 +608,7 @@ int url_savename(char *adr_complete, char *fil_complete, char *save,
|
||||
} else { // sinon on fait rien et on s'en va.. (ftp etc)
|
||||
hts_log_print(opt, LOG_DEBUG,
|
||||
"Warning: Savename redirect backing error at %s%s",
|
||||
mov_adr, mov_fil);
|
||||
moved.adr, moved.fil);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
@@ -673,13 +670,13 @@ int url_savename(char *adr_complete, char *fil_complete, char *save,
|
||||
// oops, a été déplacé.. on recalcule en récursif (osons!)
|
||||
if (has_been_moved) {
|
||||
// copier adr, fil (optionnel, mais sinon marche pas pour le rip)
|
||||
strcpybuff(adr_complete, curr_adr);
|
||||
strcpybuff(fil_complete, curr_fil);
|
||||
strcpybuff(afs->af.adr, current.adr);
|
||||
strcpybuff(afs->af.fil, current.fil);
|
||||
// copier adr, fil
|
||||
|
||||
return url_savename(curr_adr, curr_fil, save, NULL, NULL,
|
||||
referer_adr, referer_fil, opt, liens,
|
||||
lien_tot, sback, cache, hash, ptr,
|
||||
return url_savename(afs, NULL,
|
||||
referer_adr, referer_fil, opt,
|
||||
sback, cache, hash, ptr,
|
||||
numero_passe, NULL);
|
||||
}
|
||||
// --- --- ---
|
||||
@@ -749,7 +746,7 @@ int url_savename(char *adr_complete, char *fil_complete, char *save,
|
||||
}
|
||||
// Rechercher premier / et dernier .
|
||||
{
|
||||
char *a = fil + strlen(fil) - 1;
|
||||
const char *a = fil + strlen(fil) - 1;
|
||||
|
||||
// passer structures
|
||||
start_pos = fil;
|
||||
@@ -770,7 +767,7 @@ int url_savename(char *adr_complete, char *fil_complete, char *save,
|
||||
// ajouter nom du site éventuellement en premier
|
||||
if (opt->savename_type == -1) { // utiliser savename_userdef! (%h%p/%n%q.%t)
|
||||
const char *a = StringBuff(opt->savename_userdef);
|
||||
char *b = save;
|
||||
char *b = afs->save;
|
||||
|
||||
/*char *nom_pos=NULL,*dot_pos=NULL; // Position nom et point */
|
||||
char tok;
|
||||
@@ -791,7 +788,7 @@ int url_savename(char *adr_complete, char *fil_complete, char *save,
|
||||
*/
|
||||
|
||||
// Construire nom
|
||||
while((*a) && (((int) (b - save)) < HTS_URLMAXSIZE)) { // parser, et pas trop long..
|
||||
while((*a) && (((int) (b - afs->save)) < HTS_URLMAXSIZE)) { // parser, et pas trop long..
|
||||
if (*a == '%') {
|
||||
int short_ver = 0;
|
||||
|
||||
@@ -812,7 +809,7 @@ int url_savename(char *adr_complete, char *fil_complete, char *save,
|
||||
name[pos][0] = '\0';
|
||||
}
|
||||
pos = 0;
|
||||
while(*a != ']') {
|
||||
while(*a != '\0' && *a != ']') {
|
||||
if (pos < 5) {
|
||||
if (*a == ':') { // next token
|
||||
c = name[++pos];
|
||||
@@ -823,7 +820,9 @@ int url_savename(char *adr_complete, char *fil_complete, char *save,
|
||||
}
|
||||
}
|
||||
}
|
||||
a++;
|
||||
if (*a == ']') {
|
||||
a++;
|
||||
}
|
||||
strcatbuff(name[0], "="); /* param=.. */
|
||||
c = strchr(fil_complete, '?');
|
||||
/* parameters exists */
|
||||
@@ -845,7 +844,7 @@ int url_savename(char *adr_complete, char *fil_complete, char *save,
|
||||
*d++ = *c++;
|
||||
}
|
||||
*d = '\0';
|
||||
d = unescape_http(catbuff, name[0]);
|
||||
d = unescape_http(catbuff, sizeof(catbuff), name[0]);
|
||||
if (d && *d) {
|
||||
strcpybuff(b, d); /* value */
|
||||
b += strlen(b);
|
||||
@@ -1046,26 +1045,26 @@ int url_savename(char *adr_complete, char *fil_complete, char *save,
|
||||
|
||||
// adresse url
|
||||
if (!opt->savename_83) { // noms longs (et pas de .)
|
||||
strcatbuff(save, final_adr);
|
||||
strcatbuff(afs->save, final_adr);
|
||||
} else { // noms 8-3
|
||||
if (strlen(final_adr) > 4) {
|
||||
if (strfield(final_adr, "www."))
|
||||
hts_appendStringUTF8(save, final_adr + 4, max_char);
|
||||
hts_appendStringUTF8(afs->save, final_adr + 4, max_char);
|
||||
else
|
||||
hts_appendStringUTF8(save, final_adr, max_char);
|
||||
hts_appendStringUTF8(afs->save, final_adr, max_char);
|
||||
} else
|
||||
hts_appendStringUTF8(save, final_adr, max_char);
|
||||
hts_appendStringUTF8(afs->save, final_adr, max_char);
|
||||
}
|
||||
|
||||
/* release */
|
||||
RELEASE_ADR();
|
||||
|
||||
if (*fil != '/')
|
||||
strcatbuff(save, "/");
|
||||
strcatbuff(afs->save, "/");
|
||||
}
|
||||
}
|
||||
|
||||
hts_lowcase(save);
|
||||
hts_lowcase(afs->save);
|
||||
|
||||
/*
|
||||
// ne sert à rien car a déja été filtré normalement
|
||||
@@ -1091,42 +1090,42 @@ int url_savename(char *adr_complete, char *fil_complete, char *save,
|
||||
DECLARE_ADR(final_adr);
|
||||
|
||||
if (!opt->savename_83) { // noms longs
|
||||
strcatbuff(save, final_adr);
|
||||
strcatbuff(save, "/");
|
||||
strcatbuff(afs->save, final_adr);
|
||||
strcatbuff(afs->save, "/");
|
||||
} else { // noms 8-3
|
||||
if (strlen(final_adr) > 4) {
|
||||
if (strfield(final_adr, "www."))
|
||||
hts_appendStringUTF8(save, final_adr + 4, max_char);
|
||||
hts_appendStringUTF8(afs->save, final_adr + 4, max_char);
|
||||
else
|
||||
hts_appendStringUTF8(save, final_adr, max_char);
|
||||
strcatbuff(save, "/");
|
||||
hts_appendStringUTF8(afs->save, final_adr, max_char);
|
||||
strcatbuff(afs->save, "/");
|
||||
} else {
|
||||
hts_appendStringUTF8(save, final_adr, max_char);
|
||||
strcatbuff(save, "/");
|
||||
hts_appendStringUTF8(afs->save, final_adr, max_char);
|
||||
strcatbuff(afs->save, "/");
|
||||
}
|
||||
}
|
||||
|
||||
/* release */
|
||||
RELEASE_ADR();
|
||||
} else {
|
||||
strcatbuff(save, "web/"); // répertoire général
|
||||
strcatbuff(afs->save, "web/"); // répertoire général
|
||||
}
|
||||
}
|
||||
// si un html à coup sûr
|
||||
if ((ext_chg != 0) ? (ishtml_ext(ext) == 1) : (ishtml(opt, fil) == 1)) {
|
||||
if (opt->savename_type % 100 == 2) { // html/
|
||||
strcatbuff(save, "html/");
|
||||
strcatbuff(afs->save, "html/");
|
||||
}
|
||||
} else {
|
||||
if ((opt->savename_type % 100 == 1) || (opt->savename_type % 100 == 2)) { // html & images
|
||||
strcatbuff(save, "images/");
|
||||
strcatbuff(afs->save, "images/");
|
||||
}
|
||||
}
|
||||
|
||||
switch (opt->savename_type % 100) {
|
||||
case 4:
|
||||
case 5:{ // séparer par types
|
||||
char *a = fil + strlen(fil) - 1;
|
||||
const char *a = fil + strlen(fil) - 1;
|
||||
|
||||
// passer structures
|
||||
while((a > fil) && (*a != '/') && (*a != '\\'))
|
||||
@@ -1137,17 +1136,17 @@ int url_savename(char *adr_complete, char *fil_complete, char *save,
|
||||
// html?
|
||||
if ((ext_chg != 0) ? (ishtml_ext(ext) == 1) : (ishtml(opt, fil) == 1)) {
|
||||
if (opt->savename_type % 100 == 5)
|
||||
strcatbuff(save, "html/");
|
||||
strcatbuff(afs->save, "html/");
|
||||
} else {
|
||||
char *a = fil + strlen(fil) - 1;
|
||||
const char *a = fil + strlen(fil) - 1;
|
||||
|
||||
while((a > fil) && (*a != '/') && (*a != '.'))
|
||||
a--;
|
||||
if (*a != '.')
|
||||
strcatbuff(save, "other");
|
||||
strcatbuff(afs->save, "other");
|
||||
else
|
||||
strcatbuff(save, a + 1);
|
||||
strcatbuff(save, "/");
|
||||
strcatbuff(afs->save, a + 1);
|
||||
strcatbuff(afs->save, "/");
|
||||
}
|
||||
/*strcatbuff(save,a); */
|
||||
/* add name */
|
||||
@@ -1156,8 +1155,8 @@ int url_savename(char *adr_complete, char *fil_complete, char *save,
|
||||
break;
|
||||
case 99:{ // 'codé' .. c'est un gadget
|
||||
size_t i;
|
||||
int j;
|
||||
char *a;
|
||||
size_t j;
|
||||
const char *a;
|
||||
char C[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_-";
|
||||
int L;
|
||||
|
||||
@@ -1173,19 +1172,19 @@ int url_savename(char *adr_complete, char *fil_complete, char *save,
|
||||
}
|
||||
srand(s);
|
||||
|
||||
j = (int) strlen(save);
|
||||
j = strlen(afs->save);
|
||||
for(i = 0; i < 8; i++) {
|
||||
char c = C[(rand() % L)];
|
||||
|
||||
save[i + j] = c;
|
||||
afs->save[i + j] = c;
|
||||
}
|
||||
save[i + j] = '\0';
|
||||
afs->save[i + j] = '\0';
|
||||
// ajouter extension
|
||||
a = fil + strlen(fil) - 1;
|
||||
while((a > fil) && (*a != '/') && (*a != '.'))
|
||||
a--;
|
||||
if (*a == '.') {
|
||||
strcatbuff(save, a); // ajouter
|
||||
strcatbuff(afs->save, a); // ajouter
|
||||
}
|
||||
}
|
||||
break;
|
||||
@@ -1204,10 +1203,10 @@ int url_savename(char *adr_complete, char *fil_complete, char *save,
|
||||
break;
|
||||
}
|
||||
|
||||
hts_lowcase(save);
|
||||
hts_lowcase(afs->save);
|
||||
|
||||
if (save[strlen(save) - 1] == '/')
|
||||
strcatbuff(save, DEFAULT_HTML); // nommer page par défaut!!
|
||||
if (afs->save[strlen(afs->save) - 1] == '/')
|
||||
strcatbuff(afs->save, DEFAULT_HTML); // nommer page par défaut!!
|
||||
}
|
||||
|
||||
// vérifier qu'on ne doit pas forcer l'extension
|
||||
@@ -1225,23 +1224,23 @@ int url_savename(char *adr_complete, char *fil_complete, char *save,
|
||||
// de même en cas de manque d'extension on en place une de manière forcée..
|
||||
// cela évite les /chez/toto et les /chez/toto/index.html incompatibles
|
||||
if (opt->savename_type != -1 && opt->savename_delayed != 2) {
|
||||
char *a = save + strlen(save) - 1;
|
||||
char *a = afs->save + strlen(afs->save) - 1;
|
||||
|
||||
while((a > save) && (*a != '.') && (*a != '/'))
|
||||
while((a > afs->save) && (*a != '.') && (*a != '/'))
|
||||
a--;
|
||||
if (*a != '.') { // agh pas de point
|
||||
//strcatbuff(save,".none"); // a éviter
|
||||
strcatbuff(save, ".html"); // préférable!
|
||||
strcatbuff(afs->save, ".html"); // préférable!
|
||||
hts_log_print(opt, LOG_DEBUG, "Default HTML type set for %s%s => %s",
|
||||
adr_complete, fil_complete, save);
|
||||
adr_complete, fil_complete, afs->save);
|
||||
}
|
||||
}
|
||||
// effacer pass au besoin pour les autentifications
|
||||
// (plus la peine : masqué au début)
|
||||
/*
|
||||
{
|
||||
char* a=jump_identification(save);
|
||||
if (a!=save) {
|
||||
char* a = jump_identification(afs->save);
|
||||
if (a!=afs->save) {
|
||||
char BIGSTK tempo[HTS_URLMAXSIZE*2];
|
||||
char *b;
|
||||
tempo[0]='\0';
|
||||
@@ -1258,18 +1257,18 @@ int url_savename(char *adr_complete, char *fil_complete, char *save,
|
||||
*/
|
||||
|
||||
// éviter les / au début (cause: N100)
|
||||
if (save[0] == '/') {
|
||||
if (afs->save[0] == '/') {
|
||||
char BIGSTK tempo[HTS_URLMAXSIZE * 2];
|
||||
|
||||
strcpybuff(tempo, save + 1);
|
||||
strcpybuff(save, tempo);
|
||||
strcpybuff(tempo, afs->save + 1);
|
||||
strcpybuff(afs->save, tempo);
|
||||
}
|
||||
|
||||
/* Cleanup reserved or forbidden characters. */
|
||||
{
|
||||
size_t i;
|
||||
for(i = 0 ; save[i] != '\0' ; i++) {
|
||||
unsigned char c = (unsigned char) save[i];
|
||||
for(i = 0 ; afs->save[i] != '\0' ; i++) {
|
||||
unsigned char c = (unsigned char) afs->save[i];
|
||||
if (c < 32 // control
|
||||
|| c == 127 // unwise
|
||||
|| c == '~' // unix unwise
|
||||
@@ -1294,13 +1293,13 @@ int url_savename(char *adr_complete, char *fil_complete, char *save,
|
||||
)
|
||||
)
|
||||
{
|
||||
save[i] = '_';
|
||||
afs->save[i] = '_';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// éliminer les // (comme ftp://)
|
||||
cleanDoubleSlash(save);
|
||||
cleanDoubleSlash(afs->save);
|
||||
|
||||
#if HTS_OVERRIDE_DOS_FOLDERS
|
||||
/* Replace /foo/nul/bar by /foo/nul_/bar */
|
||||
@@ -1308,9 +1307,9 @@ int url_savename(char *adr_complete, char *fil_complete, char *save,
|
||||
int i = 0;
|
||||
|
||||
while(hts_tbdev[i][0]) {
|
||||
char *a = save;
|
||||
const char *a = afs->save;
|
||||
|
||||
while((a = strstrcase(a, (char *) hts_tbdev[i]))) {
|
||||
while((a = strstrcase(a, hts_tbdev[i]))) {
|
||||
switch ((int) a[strlen(hts_tbdev[i])]) {
|
||||
case '\0':
|
||||
case '/':
|
||||
@@ -1319,10 +1318,10 @@ int url_savename(char *adr_complete, char *fil_complete, char *save,
|
||||
char BIGSTK tempo[HTS_URLMAXSIZE * 2];
|
||||
|
||||
tempo[0] = '\0';
|
||||
strncatbuff(tempo, save, (int) (a - save) + strlen(hts_tbdev[i]));
|
||||
strncatbuff(tempo, afs->save, (int) (a - afs->save) + strlen(hts_tbdev[i]));
|
||||
strcatbuff(tempo, "_");
|
||||
strcatbuff(tempo, a + strlen(hts_tbdev[i]));
|
||||
strcpybuff(save, tempo);
|
||||
strcpybuff(afs->save, tempo);
|
||||
}
|
||||
break;
|
||||
}
|
||||
@@ -1333,7 +1332,7 @@ int url_savename(char *adr_complete, char *fil_complete, char *save,
|
||||
}
|
||||
|
||||
/* Strip ending . or ' ' forbidden on windoz */
|
||||
cleanEndingSpaceOrDot(save);
|
||||
cleanEndingSpaceOrDot(afs->save);
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1341,8 +1340,8 @@ int url_savename(char *adr_complete, char *fil_complete, char *save,
|
||||
if (opt->savename_83) {
|
||||
char BIGSTK n83[HTS_URLMAXSIZE * 2];
|
||||
|
||||
long_to_83(opt->savename_83, n83, save);
|
||||
strcpybuff(save, n83);
|
||||
long_to_83(opt->savename_83, n83, afs->save);
|
||||
strcpybuff(afs->save, n83);
|
||||
}
|
||||
// enforce stricter ISO9660 compliance (bug reported by Steffo Carlsson)
|
||||
// Level 1 File names are restricted to 8 characters with a 3 character extension,
|
||||
@@ -1353,12 +1352,12 @@ int url_savename(char *adr_complete, char *fil_complete, char *save,
|
||||
if (opt->savename_83 > 0) {
|
||||
char *a, *last;
|
||||
|
||||
for(last = save + strlen(save) - 1;
|
||||
last != save && *last != '/' && *last != '\\' && *last != '.'; last--) ;
|
||||
for(last = afs->save + strlen(afs->save) - 1;
|
||||
last != afs->save && *last != '/' && *last != '\\' && *last != '.'; last--) ;
|
||||
if (*last != '.') {
|
||||
last = NULL;
|
||||
}
|
||||
for(a = save; *a != '\0'; a++) {
|
||||
for(a = afs->save; *a != '\0'; a++) {
|
||||
if (*a >= 'a' && *a <= 'z') {
|
||||
*a -= 'a' - 'A';
|
||||
} else if (*a == '.') {
|
||||
@@ -1375,7 +1374,7 @@ int url_savename(char *adr_complete, char *fil_complete, char *save,
|
||||
}
|
||||
|
||||
/* ensure that there is no ../ (potential vulnerability) */
|
||||
fil_simplifie(save);
|
||||
fil_simplifie(afs->save);
|
||||
|
||||
/* convert name to UTF-8 ? Note: already done while parsing. */
|
||||
//if (charset != NULL && charset[0] != '\0') {
|
||||
@@ -1392,17 +1391,17 @@ int url_savename(char *adr_complete, char *fil_complete, char *save,
|
||||
|
||||
/* callback */
|
||||
RUN_CALLBACK5(opt, savename, adr_complete, fil_complete, referer_adr,
|
||||
referer_fil, save);
|
||||
referer_fil, afs->save);
|
||||
|
||||
hts_log_print(opt, LOG_DEBUG, "engine: save-name: local name: %s%s -> %s",
|
||||
adr, fil, save);
|
||||
adr, fil, afs->save);
|
||||
|
||||
/* Ensure that the MANDATORY "temporary" extension is set */
|
||||
if (ext_chg_delayed) {
|
||||
char *ptr;
|
||||
char *lastDot = NULL;
|
||||
|
||||
for(ptr = save; *ptr != 0; ptr++) {
|
||||
for(ptr = afs->save; *ptr != 0; ptr++) {
|
||||
if (*ptr == '.') {
|
||||
lastDot = ptr;
|
||||
} else if (*ptr == '/' || *ptr == '\\') {
|
||||
@@ -1410,8 +1409,8 @@ int url_savename(char *adr_complete, char *fil_complete, char *save,
|
||||
}
|
||||
}
|
||||
if (lastDot == NULL) {
|
||||
strcatbuff(save, "." DELAYED_EXT);
|
||||
} else if (!IS_DELAYED_EXT(save)) {
|
||||
strcatbuff(afs->save, "." DELAYED_EXT);
|
||||
} else if (!IS_DELAYED_EXT(afs->save)) {
|
||||
strcatbuff(lastDot, "." DELAYED_EXT);
|
||||
}
|
||||
}
|
||||
@@ -1424,12 +1423,12 @@ int url_savename(char *adr_complete, char *fil_complete, char *save,
|
||||
#define MIN_LAST_SEG_RESERVE 12
|
||||
#define MAX_LAST_SEG_RESERVE 24
|
||||
#define MAX_SEG_LEN 48
|
||||
if (hts_stringLengthUTF8(save) +
|
||||
if (hts_stringLengthUTF8(afs->save) +
|
||||
hts_stringLengthUTF8(StringBuff(opt->path_html_utf8)) >=
|
||||
HTS_MAX_PATH_LEN) {
|
||||
// convert to Unicode (much simpler)
|
||||
size_t wsaveLen;
|
||||
hts_UCS4 *const wsave = hts_convertUTF8StringToUCS4(save, strlen(save), &wsaveLen);
|
||||
hts_UCS4 *const wsave = hts_convertUTF8StringToUCS4(afs->save, strlen(afs->save), &wsaveLen);
|
||||
if (wsave != NULL) {
|
||||
const size_t parentLen =
|
||||
hts_stringLengthUTF8(StringBuff(opt->path_html_utf8));
|
||||
@@ -1484,7 +1483,7 @@ int url_savename(char *adr_complete, char *fil_complete, char *save,
|
||||
// copy final name and cleanup
|
||||
saveFinal = hts_convertUCS4StringToUTF8(wsave, j);
|
||||
if (saveFinal != NULL) {
|
||||
strcpybuff(save, saveFinal);
|
||||
strcpybuff(afs->save, saveFinal);
|
||||
free(saveFinal);
|
||||
} else {
|
||||
hts_log_print(opt, LOG_ERROR, "Could not revert to UTF-8: %s%s",
|
||||
@@ -1494,13 +1493,13 @@ int url_savename(char *adr_complete, char *fil_complete, char *save,
|
||||
|
||||
// log in debug
|
||||
hts_log_print(opt, LOG_DEBUG, "Too long filename shortened: %s%s => %s",
|
||||
adr_complete, fil_complete, save);
|
||||
adr_complete, fil_complete, afs->save);
|
||||
} else {
|
||||
hts_log_print(opt, LOG_ERROR, "Could not read UTF-8: %s", save);
|
||||
hts_log_print(opt, LOG_ERROR, "Could not read UTF-8: %s", afs->save);
|
||||
}
|
||||
|
||||
// Re-check again ending space or dot after cut (see bug #5)
|
||||
cleanEndingSpaceOrDot(save);
|
||||
cleanEndingSpaceOrDot(afs->save);
|
||||
}
|
||||
#undef MAX_UTF8_SEQ_CHARS
|
||||
#undef MIN_LAST_SEG_RESERVE
|
||||
@@ -1511,11 +1510,11 @@ int url_savename(char *adr_complete, char *fil_complete, char *save,
|
||||
char BIGSTK tempo[HTS_URLMAXSIZE * 2];
|
||||
|
||||
strcpybuff(tempo, StringBuff(opt->path_html_utf8));
|
||||
strcatbuff(tempo, save);
|
||||
strcpybuff(save, tempo);
|
||||
strcatbuff(tempo, afs->save);
|
||||
strcpybuff(afs->save, tempo);
|
||||
}
|
||||
// vérifier que le nom n'est pas déja pris...
|
||||
if (liens != NULL) {
|
||||
if (opt->liens != NULL) {
|
||||
int nom_ok;
|
||||
|
||||
do {
|
||||
@@ -1529,20 +1528,20 @@ int url_savename(char *adr_complete, char *fil_complete, char *save,
|
||||
printf("\nStart search\n");
|
||||
#endif
|
||||
|
||||
i = hash_read(hash, save, NULL, HASH_STRUCT_FILENAME); // lecture type 0 (sav)
|
||||
i = hash_read(hash, afs->save, NULL, HASH_STRUCT_FILENAME); // lecture type 0 (sav)
|
||||
if (i >= 0) {
|
||||
int sameAdr = (strfield2(liens[i]->adr, normadr) != 0);
|
||||
int sameAdr = (strfield2(heap(i)->adr, normadr) != 0);
|
||||
int sameFil;
|
||||
|
||||
// NO - URL hack is only for stripping // and www.
|
||||
//if (opt->urlhack != 0)
|
||||
// sameFil = ( strfield2(liens[i]->fil, normfil) != 0);
|
||||
// sameFil = ( strfield2(heap(i)->fil, normfil) != 0);
|
||||
//else
|
||||
sameFil = (strcmp(liens[i]->fil, normfil) == 0);
|
||||
sameFil = (strcmp(heap(i)->fil, normfil) == 0);
|
||||
if (sameAdr && sameFil) { // ok c'est le même lien, adresse déja définie
|
||||
/* Take the existing name not to screw up with cAsE sEnSiTiViTy of Linux/Unix */
|
||||
if (strcmp(liens[i]->sav, save) != 0) {
|
||||
strcpybuff(save, liens[i]->sav);
|
||||
if (strcmp(heap(i)->sav, afs->save) != 0) {
|
||||
strcpybuff(afs->save, heap(i)->sav);
|
||||
}
|
||||
i = 0;
|
||||
#if DEBUG_SAVENAME
|
||||
@@ -1550,7 +1549,7 @@ int url_savename(char *adr_complete, char *fil_complete, char *save,
|
||||
#endif
|
||||
} else { // utilisé par un AUTRE, changer de nom
|
||||
char BIGSTK tempo[HTS_URLMAXSIZE * 2];
|
||||
char *a = save + strlen(save) - 1;
|
||||
char *a = afs->save + strlen(afs->save) - 1;
|
||||
char *b;
|
||||
int n = 2;
|
||||
char collisionSeparator = ((opt->savename_83 != 2) ? '-' : '_');
|
||||
@@ -1558,18 +1557,18 @@ int url_savename(char *adr_complete, char *fil_complete, char *save,
|
||||
tempo[0] = '\0';
|
||||
|
||||
#if DEBUG_SAVENAME
|
||||
printf("\nWRONG CASE UNMATCH : \n%s\n%s, REDEFINE\n", liens[i]->fil,
|
||||
printf("\nWRONG CASE UNMATCH : \n%s\n%s, REDEFINE\n", heap(i)->fil,
|
||||
fil_complete);
|
||||
#endif
|
||||
nom_ok = 0;
|
||||
i = 0;
|
||||
|
||||
while((a > save) && (*a != '.') && (*a != '\\') && (*a != '/'))
|
||||
while((a > afs->save) && (*a != '.') && (*a != '\\') && (*a != '/'))
|
||||
a--;
|
||||
if (*a == '.')
|
||||
strncatbuff(tempo, save, (int) (a - save));
|
||||
strncatbuff(tempo, afs->save, a - afs->save);
|
||||
else
|
||||
strcatbuff(tempo, save);
|
||||
strcatbuff(tempo, afs->save);
|
||||
|
||||
// tester la présence d'un -xx (ex: index-2.html -> index-3.html)
|
||||
b = tempo + strlen(tempo) - 1;
|
||||
@@ -1600,7 +1599,7 @@ int url_savename(char *adr_complete, char *fil_complete, char *save,
|
||||
if (*a == '.')
|
||||
strcatbuff(tempo, a);
|
||||
|
||||
strcpybuff(save, tempo);
|
||||
strcpybuff(afs->save, tempo);
|
||||
|
||||
//printf("switched: %s\n",save);
|
||||
|
||||
@@ -1618,7 +1617,7 @@ int url_savename(char *adr_complete, char *fil_complete, char *save,
|
||||
}
|
||||
|
||||
/* nom avec md5 urilisé partout */
|
||||
void standard_name(char *b, char *dot_pos, char *nom_pos, char *fil_complete,
|
||||
void standard_name(char *b, const char *dot_pos, const char *nom_pos, const char *fil,
|
||||
int short_ver) {
|
||||
char md5[32 + 2];
|
||||
|
||||
@@ -1626,9 +1625,9 @@ void standard_name(char *b, char *dot_pos, char *nom_pos, char *fil_complete,
|
||||
/* Nom */
|
||||
if (dot_pos) {
|
||||
if (!short_ver) // Noms longs
|
||||
strncatbuff(b, nom_pos, (int) (dot_pos - nom_pos));
|
||||
strncatbuff(b, nom_pos, (dot_pos - nom_pos));
|
||||
else
|
||||
strncatbuff(b, nom_pos, min((int) (dot_pos - nom_pos), 8));
|
||||
strncatbuff(b, nom_pos, min(dot_pos - nom_pos, 8));
|
||||
} else {
|
||||
if (!short_ver) // Noms longs
|
||||
strcatbuff(b, nom_pos);
|
||||
@@ -1636,7 +1635,7 @@ void standard_name(char *b, char *dot_pos, char *nom_pos, char *fil_complete,
|
||||
strncatbuff(b, nom_pos, 8);
|
||||
}
|
||||
/* MD5 - 16 bits */
|
||||
strncatbuff(b, url_md5(md5, fil_complete), 4);
|
||||
strncatbuff(b, url_md5(md5, fil), 4);
|
||||
/* Ext */
|
||||
if (dot_pos) {
|
||||
strcatbuff(b, ".");
|
||||
@@ -1657,11 +1656,11 @@ void standard_name(char *b, char *dot_pos, char *nom_pos, char *fil_complete,
|
||||
}
|
||||
|
||||
/* Petit md5 */
|
||||
char *url_md5(char *digest, char *fil_complete) {
|
||||
char *url_md5(char *digest, const char *fil) {
|
||||
char *a;
|
||||
|
||||
digest[0] = '\0';
|
||||
a = strchr(fil_complete, '?');
|
||||
a = strchr(fil, '?');
|
||||
if (a) {
|
||||
if (strlen(a)) {
|
||||
char BIGSTK buff[HTS_URLMAXSIZE * 2];
|
||||
@@ -1676,7 +1675,7 @@ char *url_md5(char *digest, char *fil_complete) {
|
||||
}
|
||||
|
||||
// interne à url_savename: ajoute une chaîne à une autre avec \ -> /
|
||||
void url_savename_addstr(char *d, char *s) {
|
||||
void url_savename_addstr(char *d, const char *s) {
|
||||
int i = (int) strlen(d);
|
||||
|
||||
while(*s) {
|
||||
@@ -1692,12 +1691,12 @@ void url_savename_addstr(char *d, char *s) {
|
||||
/* "filename" should be at least 64 bytes. */
|
||||
void url_savename_refname(const char *adr, const char *fil, char *filename) {
|
||||
unsigned char bindigest[16];
|
||||
MD5_CTX ctx;
|
||||
struct MD5Context ctx;
|
||||
|
||||
MD5Init(&ctx, 0);
|
||||
MD5Update(&ctx, (const unsigned char *) adr, strlen(adr));
|
||||
MD5Update(&ctx, (const unsigned char *) adr, (int) strlen(adr));
|
||||
MD5Update(&ctx, (const unsigned char *) ",", 1);
|
||||
MD5Update(&ctx, (const unsigned char *) fil, strlen(fil));
|
||||
MD5Update(&ctx, (const unsigned char *) fil, (int) strlen(fil));
|
||||
MD5Final(bindigest, &ctx);
|
||||
sprintf(filename,
|
||||
CACHE_REFNAME "/" "%02x%02x%02x%02x%02x%02x%02x%02x"
|
||||
@@ -1714,7 +1713,8 @@ char *url_savename_refname_fullpath(httrackp * opt, const char *adr,
|
||||
char digest_filename[64];
|
||||
|
||||
url_savename_refname(adr, fil, digest_filename);
|
||||
return fconcat(OPT_GET_BUFF(opt), StringBuff(opt->path_log), digest_filename);
|
||||
return fconcat(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt),
|
||||
StringBuff(opt->path_log), digest_filename);
|
||||
}
|
||||
|
||||
/* remove refname if any */
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/* ------------------------------------------------------------ */
|
||||
/*
|
||||
HTTrack Website Copier, Offline Browser for Windows and Unix
|
||||
Copyright (C) 1998-2013 Xavier Roche and other contributors
|
||||
Copyright (C) 1998-2014 Xavier Roche and other contributors
|
||||
|
||||
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
|
||||
@@ -80,18 +80,27 @@ typedef struct hash_struct hash_struct;
|
||||
#define HTS_DEF_FWSTRUCT_lien_back
|
||||
typedef struct lien_back lien_back;
|
||||
#endif
|
||||
#ifndef HTS_DEF_FWSTRUCT_lien_adrfil
|
||||
#define HTS_DEF_FWSTRUCT_lien_adrfil
|
||||
typedef struct lien_adrfil lien_adrfil;
|
||||
#endif
|
||||
#ifndef HTS_DEF_FWSTRUCT_lien_adrfilsave
|
||||
#define HTS_DEF_FWSTRUCT_lien_adrfilsave
|
||||
typedef struct lien_adrfilsave lien_adrfilsave;
|
||||
#endif
|
||||
|
||||
// note: 'headers' can either be null, or incomplete (only r member filled)
|
||||
int url_savename(char *adr_complete, char *fil_complete, char *save,
|
||||
char *former_adr, char *former_fil, char *referer_adr,
|
||||
char *referer_fil, httrackp * opt, lien_url ** liens,
|
||||
int lien_tot, struct_back * sback, cache_back * cache,
|
||||
int url_savename(lien_adrfilsave *const afs,
|
||||
lien_adrfil *const former,
|
||||
const char *referer_adr, const char *referer_fil,
|
||||
httrackp * opt, struct_back * sback, cache_back * cache,
|
||||
hash_struct * hash, int ptr, int numero_passe,
|
||||
const lien_back * headers);
|
||||
void standard_name(char *b, char *dot_pos, char *nom_pos, char *fil_complete,
|
||||
void standard_name(char *b, const char *dot_pos, const char *nom_pos,
|
||||
const char *fil_complete,
|
||||
int short_ver);
|
||||
void url_savename_addstr(char *d, char *s);
|
||||
char *url_md5(char *digest_buffer, char *fil_complete);
|
||||
void url_savename_addstr(char *d, const char *s);
|
||||
char *url_md5(char *digest_buffer, const char *fil_complete);
|
||||
void url_savename_refname(const char *adr, const char *fil, char *filename);
|
||||
char *url_savename_refname_fullpath(httrackp * opt, const char *adr,
|
||||
const char *fil);
|
||||
|
||||
315
src/htsnet.h
315
src/htsnet.h
@@ -1,7 +1,7 @@
|
||||
/* ------------------------------------------------------------ */
|
||||
/*
|
||||
HTTrack Website Copier, Offline Browser for Windows and Unix
|
||||
Copyright (C) 1998-2013 Xavier Roche and other contributors
|
||||
Copyright (C) 1998-2014 Xavier Roche and other contributors
|
||||
|
||||
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
|
||||
@@ -38,13 +38,17 @@ Please visit our Website: http://www.httrack.com
|
||||
/* basic net definitions */
|
||||
#include "htsglobal.h"
|
||||
#include "htsbasenet.h"
|
||||
#include "htssafe.h"
|
||||
|
||||
#include <string.h>
|
||||
#include <ctype.h>
|
||||
#ifdef _WIN32
|
||||
// pour read
|
||||
#include <io.h>
|
||||
// pour FindFirstFile
|
||||
#include <winbase.h>
|
||||
typedef USHORT in_port_t;
|
||||
typedef ADDRESS_FAMILY sa_family_t;
|
||||
#else
|
||||
//typedef int T_SOC;
|
||||
#define INVALID_SOCKET -1
|
||||
@@ -70,87 +74,16 @@ typedef unsigned long in_addr_t;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/*
|
||||
** ipV4 **
|
||||
*/
|
||||
#if HTS_INET6==0
|
||||
|
||||
/* Ipv4 structures */
|
||||
typedef struct in_addr INaddr;
|
||||
|
||||
/* This should handle all cases */
|
||||
#ifndef HTS_DEF_FWSTRUCT_SOCaddr
|
||||
#define HTS_DEF_FWSTRUCT_SOCaddr
|
||||
typedef struct SOCaddr SOCaddr;
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
struct SOCaddr {
|
||||
union {
|
||||
struct sockaddr_in in;
|
||||
struct sockaddr sa;
|
||||
unsigned char v4data[4];
|
||||
unsigned char v6data[16];
|
||||
unsigned char pad[128];
|
||||
} m_addr;
|
||||
};
|
||||
|
||||
/* Ipv4 structure members */
|
||||
#define SOCaddr_sinaddr(server) ((server).m_addr.in.sin_addr)
|
||||
#define SOCaddr_sinfamily(server) ((server).m_addr.in.sin_family)
|
||||
#define SOCaddr_sinport(server) ((server).m_addr.in.sin_port)
|
||||
|
||||
/* AF_xx */
|
||||
#define AFinet AF_INET
|
||||
|
||||
/* Set port to sockaddr structure */
|
||||
#define SOCaddr_initport(server, port) do { \
|
||||
SOCaddr_sinport(server) = htons((unsigned short int) (port)); \
|
||||
} while(0)
|
||||
|
||||
#define SOCaddr_initany(server, server_len) do { \
|
||||
SOCaddr_sinfamily(server) = AF_INET; \
|
||||
memset(&SOCaddr_sinaddr(server), 0, sizeof(struct sockaddr_in)); \
|
||||
server_len=sizeof(struct sockaddr_in); \
|
||||
} while(0)
|
||||
|
||||
/* Copy sockaddr to another one */
|
||||
#define SOCaddr_copyaddr(server, server_len, hpaddr, hpsize) do { \
|
||||
if (hpsize == sizeof(struct sockaddr_in)) { \
|
||||
server_len=sizeof(struct sockaddr_in); \
|
||||
SOCaddr_sinfamily(server) = (*(struct sockaddr_in*)(hpaddr)).sin_family; \
|
||||
SOCaddr_sinport(server) = (*(struct sockaddr_in*)(hpaddr)).sin_port; \
|
||||
memcpy(&SOCaddr_sinaddr(server), &(*(struct sockaddr_in*)(hpaddr)).sin_addr, sizeof(SOCaddr_sinaddr(server))); \
|
||||
} else if (hpsize == 4) {\
|
||||
server_len=sizeof(struct sockaddr_in); \
|
||||
SOCaddr_sinfamily(server) = AF_INET; \
|
||||
SOCaddr_sinport(server) = 0; \
|
||||
memcpy(&SOCaddr_sinaddr(server), (hpaddr), sizeof(SOCaddr_sinaddr(server))); \
|
||||
} else if ((hpsize > 0) && (hpsize <= sizeof(server))) { \
|
||||
server_len=hpsize; \
|
||||
memcpy(&(server), hpaddr, hpsize); \
|
||||
} else { \
|
||||
server_len=0; \
|
||||
} \
|
||||
} while(0)
|
||||
|
||||
/* Get dotted address */
|
||||
#define SOCaddr_inetntoa(namebuf, namebuflen, ss, sslen) do { \
|
||||
char* dot = (char*) inet_ntoa(SOCaddr_sinaddr(ss)); \
|
||||
(namebuf)[0]='\0'; \
|
||||
if (dot) { \
|
||||
strcpy(namebuf, dot); \
|
||||
} \
|
||||
} while(0)
|
||||
|
||||
/* Get protocol ID */
|
||||
#define SOCaddr_getproto(ss, sslen) ('1')
|
||||
|
||||
/*
|
||||
** ipV6 **
|
||||
*/
|
||||
#else
|
||||
|
||||
/* Ipv4 structures */
|
||||
#if HTS_INET6 != 0
|
||||
typedef struct in6_addr INaddr;
|
||||
#else
|
||||
typedef struct in_addr INaddr;
|
||||
#endif
|
||||
|
||||
/* This should handle all cases */
|
||||
#ifndef HTS_DEF_FWSTRUCT_SOCaddr
|
||||
@@ -159,117 +92,173 @@ typedef struct SOCaddr SOCaddr;
|
||||
#endif
|
||||
struct SOCaddr {
|
||||
union {
|
||||
struct sockaddr_in6 in6;
|
||||
struct sockaddr_in in;
|
||||
/* Generic version, for network functions such as getnameinfo() */
|
||||
struct sockaddr sa;
|
||||
unsigned char v4data[4];
|
||||
unsigned char v6data[16];
|
||||
unsigned char pad[128];
|
||||
/* IPv4 */
|
||||
struct sockaddr_in in;
|
||||
#if HTS_INET6 != 0
|
||||
/* IPv6 */
|
||||
struct sockaddr_in6 in6;
|
||||
#endif
|
||||
} m_addr;
|
||||
};
|
||||
|
||||
/* Ipv4 structure members */
|
||||
#define SOCaddr_sinaddr(server) ((server).m_addr.in6.sin6_addr)
|
||||
#define SOCaddr_sinfamily(server) ((server).m_addr.in6.sin6_family)
|
||||
#define SOCaddr_sinport(server) ((server).m_addr.in6.sin6_port)
|
||||
#define SOCaddr_sinflowinfo(server) ((server).m_addr.in6.sin6_flowinfo)
|
||||
/* #define SOCaddr_sinscopeid(a) ((a).m_addr.in6.sin6_scope_id) */
|
||||
static HTS_INLINE HTS_UNUSED in_port_t* SOCaddr_sinport_(SOCaddr *const addr,
|
||||
const char *file, const int line) {
|
||||
assertf_(addr != NULL, file, line);
|
||||
switch(addr->m_addr.sa.sa_family) {
|
||||
case AF_INET:
|
||||
return &addr->m_addr.in.sin_port;
|
||||
break;
|
||||
#if HTS_INET6 != 0
|
||||
case AF_INET6:
|
||||
return &addr->m_addr.in6.sin6_port;
|
||||
break;
|
||||
#endif
|
||||
default:
|
||||
assertf_(! "invalid structure", file, line);
|
||||
return 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static HTS_INLINE HTS_UNUSED socklen_t SOCaddr_size_(const SOCaddr*const addr,
|
||||
const char *file, const int line) {
|
||||
assertf_(addr != NULL, file, line);
|
||||
switch(addr->m_addr.sa.sa_family) {
|
||||
case AF_INET:
|
||||
return sizeof(addr->m_addr.in);
|
||||
break;
|
||||
#if HTS_INET6 != 0
|
||||
case AF_INET6:
|
||||
return sizeof(addr->m_addr.in6);
|
||||
break;
|
||||
#endif
|
||||
default:
|
||||
return 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static HTS_INLINE HTS_UNUSED void SOCaddr_clear_(SOCaddr*const addr,
|
||||
const char *file, const int line) {
|
||||
assertf_(addr != NULL, file, line);
|
||||
addr->m_addr.sa.sa_family = AF_UNSPEC;
|
||||
}
|
||||
|
||||
/* Ipv4/6 structure members */
|
||||
#define SOCaddr_sinfamily(server) ((server).m_addr.sa.sa_family)
|
||||
#define SOCaddr_sinport(server) (*SOCaddr_sinport_(&(server), __FILE__, __LINE__))
|
||||
#define SOCaddr_size(server) (SOCaddr_size_(&(server), __FILE__, __LINE__))
|
||||
#define SOCaddr_is_valid(server) (SOCaddr_size_(&(server), __FILE__, __LINE__) != 0 )
|
||||
#define SOCaddr_clear(server) SOCaddr_clear_(&(server), __FILE__, __LINE__)
|
||||
#define SOCaddr_sockaddr(server) ((server).m_addr.sa)
|
||||
#define SOCaddr_capacity(server) sizeof((server).m_addr)
|
||||
|
||||
/* AF_xx */
|
||||
#if HTS_INET6 != 0
|
||||
#define AFinet AF_INET6
|
||||
#else
|
||||
#define AFinet AF_INET
|
||||
#endif
|
||||
|
||||
/* Set port to sockaddr structure */
|
||||
#define SOCaddr_initport(server, port) do { \
|
||||
SOCaddr_sinport(server) = htons((unsigned short int) (port)); \
|
||||
SOCaddr_sinport(server) = htons((in_port_t) (port)); \
|
||||
} while(0)
|
||||
|
||||
#define SOCaddr_initany(server, server_len) do { \
|
||||
SOCaddr_sinfamily(server) = AF_INET; \
|
||||
memset(&SOCaddr_sinaddr(server), 0, sizeof(struct sockaddr_in)); \
|
||||
server_len=sizeof(struct sockaddr_in); \
|
||||
static HTS_INLINE HTS_UNUSED socklen_t SOCaddr_initany_(SOCaddr*const addr,
|
||||
const char *file, const int line) {
|
||||
assertf_(addr != NULL, file, line);
|
||||
memset(&addr->m_addr.in, 0, sizeof(addr->m_addr.in));
|
||||
addr->m_addr.in.sin_family = AF_INET;
|
||||
return SOCaddr_size_(addr, file, line);
|
||||
}
|
||||
|
||||
#define SOCaddr_initany(server) do { \
|
||||
SOCaddr_initany_(&(server), __FILE__, __LINE__); \
|
||||
} while(0)
|
||||
|
||||
/*
|
||||
Copy sockaddr to SOCaddr
|
||||
|
||||
Note;
|
||||
The '> sizeof(struct sockaddr_in6)' hack if for the VC6 structure which
|
||||
lacks the scope id
|
||||
Copy sockaddr_in/sockaddr_in6/raw IPv4/raw IPv6 to our opaque SOCaddr
|
||||
*/
|
||||
static HTS_UNUSED socklen_t SOCaddr_copyaddr_(SOCaddr*const server,
|
||||
const void *data, const size_t data_size,
|
||||
const char *file, const int line) {
|
||||
assertf_(server != NULL, file, line);
|
||||
assertf_(data != NULL, file, line);
|
||||
|
||||
if (data_size == sizeof(struct sockaddr_in)) {
|
||||
memcpy(&server->m_addr.in, data, sizeof(struct sockaddr_in));
|
||||
assertf_(server->m_addr.sa.sa_family == AF_INET, file, line);
|
||||
#if HTS_INET6 != 0
|
||||
} else if (data_size == sizeof(struct sockaddr_in6)) {
|
||||
memcpy(&server->m_addr.in6, data, sizeof(struct sockaddr_in6));
|
||||
assertf_(server->m_addr.sa.sa_family == AF_INET6, file, line);
|
||||
#endif
|
||||
} else if (data_size == 4) {
|
||||
memset(&server->m_addr.in, 0, sizeof(server->m_addr.in));
|
||||
server->m_addr.in.sin_family = AF_INET;
|
||||
server->m_addr.in.sin_port = 0;
|
||||
memcpy(&server->m_addr.in.sin_addr, data, 4);
|
||||
#if HTS_INET6 != 0
|
||||
} else if (data_size == 16) {
|
||||
memset(&server->m_addr.in6, 0, sizeof(server->m_addr.in6));
|
||||
server->m_addr.in6.sin6_family = AF_INET6;
|
||||
server->m_addr.in6.sin6_port = 0;
|
||||
memcpy(&server->m_addr.in6.sin6_addr, data, 16);
|
||||
#endif
|
||||
} else {
|
||||
server->m_addr.in.sin_family = AF_INET;
|
||||
}
|
||||
return SOCaddr_size_(server, file, line);
|
||||
}
|
||||
|
||||
#define SOCaddr_copyaddr(server, server_len, hpaddr, hpsize) do { \
|
||||
if (hpsize == sizeof(struct sockaddr_in6)) { \
|
||||
server_len=sizeof(struct sockaddr_in6); \
|
||||
SOCaddr_sinfamily(server) = (*(struct sockaddr_in6*)(hpaddr)).sin6_family; \
|
||||
SOCaddr_sinport(server) = (*(struct sockaddr_in6*)(hpaddr)).sin6_port; \
|
||||
SOCaddr_sinflowinfo(server) = (*(struct sockaddr_in6*)(hpaddr)).sin6_flowinfo; \
|
||||
memcpy(&SOCaddr_sinaddr(server), &(*(struct sockaddr_in6*)(hpaddr)).sin6_addr, sizeof(SOCaddr_sinaddr(server))); \
|
||||
} else if (hpsize > sizeof(struct sockaddr_in6)) { \
|
||||
server_len=hpsize; \
|
||||
SOCaddr_sinport(server) = 0; \
|
||||
memcpy(&(server), hpaddr, hpsize); \
|
||||
} else if (hpsize == sizeof(struct sockaddr_in)) { \
|
||||
server_len=sizeof(struct sockaddr_in); \
|
||||
(*(struct sockaddr_in*)(&server)).sin_family = AF_INET; \
|
||||
SOCaddr_sinport(server) = (*(struct sockaddr_in*)(hpaddr)).sin_port; \
|
||||
memcpy(&(*(struct sockaddr_in*)&(server)).sin_addr, &(*(struct sockaddr_in*)(hpaddr)).sin_addr, sizeof((*(struct sockaddr_in*)(hpaddr)).sin_addr)); \
|
||||
} else if (hpsize == 4) {\
|
||||
server_len=sizeof(struct sockaddr_in); \
|
||||
(*(struct sockaddr_in*)(&server)).sin_family = AF_INET; \
|
||||
SOCaddr_sinport(server) = 0; \
|
||||
memcpy(&(*(struct sockaddr_in*)&(server)).sin_addr, hpaddr, 4); \
|
||||
} else if (hpsize == 16) {\
|
||||
server_len=sizeof(struct sockaddr_in6); \
|
||||
SOCaddr_sinfamily(server) = AF_INET6; \
|
||||
SOCaddr_sinport(server) = 0; \
|
||||
memcpy(&SOCaddr_sinaddr(server), (hpaddr), 16); \
|
||||
} else if ((hpsize > 0) && (hpsize <= sizeof(server))) { \
|
||||
server_len=hpsize; \
|
||||
memcpy(&(server), hpaddr, hpsize); \
|
||||
} else { \
|
||||
server_len=0; \
|
||||
} \
|
||||
server_len = (int) SOCaddr_copyaddr_(&(server), hpaddr, hpsize, __FILE__, __LINE__); \
|
||||
} while(0)
|
||||
|
||||
#define SOCaddr_copyaddr2(server, hpaddr, hpsize) do { \
|
||||
(void) SOCaddr_copyaddr_(&(server), hpaddr, hpsize, __FILE__, __LINE__); \
|
||||
} while(0)
|
||||
|
||||
#define SOCaddr_copy_SOCaddr(dest, src) do { \
|
||||
SOCaddr_copyaddr_(&(dest), &(src).m_addr.sa, SOCaddr_size(src), __FILE__, __LINE__); \
|
||||
} while(0)
|
||||
|
||||
/* Get dotted address */
|
||||
#define SOCaddr_inetntoa(namebuf, namebuflen, ss, sslen) do { \
|
||||
char *pos_; \
|
||||
(namebuf)[0]='\0'; \
|
||||
getnameinfo((struct sockaddr *)&(ss), sslen, \
|
||||
(namebuf), namebuflen, NULL, 0, NI_NUMERICHOST); \
|
||||
/* remove scope id */ \
|
||||
pos_ = strrchr(namebuf, '%'); \
|
||||
if (pos_ != NULL) { \
|
||||
*pos_ = '\0'; \
|
||||
} \
|
||||
} while(0)
|
||||
|
||||
static HTS_UNUSED void SOCaddr_inetntoa_(char *namebuf, size_t namebuflen,
|
||||
SOCaddr *const ss,
|
||||
const char *file, const int line) {
|
||||
assertf_(namebuf != NULL, file, line);
|
||||
assertf_(ss != NULL, file, line);
|
||||
|
||||
if (getnameinfo(&ss->m_addr.sa, sizeof(ss->m_addr),
|
||||
namebuf, namebuflen,
|
||||
NULL, 0,
|
||||
NI_NUMERICHOST) == 0) {
|
||||
/* remove scope id(s) */
|
||||
char *const pos = strchr(namebuf, '%');
|
||||
if (pos != NULL) {
|
||||
*pos = '\0';
|
||||
}
|
||||
} else {
|
||||
namebuf[0] = '\0';
|
||||
}
|
||||
}
|
||||
|
||||
#define SOCaddr_inetntoa(namebuf, namebuflen, ss) \
|
||||
SOCaddr_inetntoa_(namebuf, namebuflen, &(ss), __FILE__, __LINE__)
|
||||
|
||||
/* Get protocol ID */
|
||||
#define SOCaddr_getproto(ss, sslen) ((sslen == sizeof(struct sockaddr_in6))?('2'):('1'))
|
||||
|
||||
#endif
|
||||
#define SOCaddr_getproto(ss) ( SOCaddr_size(ss) == sizeof(struct sockaddr_in) ? '1' : '2')
|
||||
|
||||
/* Socket length type */
|
||||
typedef socklen_t SOClen;
|
||||
|
||||
/* Buffer structure to copy various hostent structures */
|
||||
#ifndef HTS_DEF_FWSTRUCT_t_fullhostent
|
||||
#define HTS_DEF_FWSTRUCT_t_fullhostent
|
||||
typedef struct t_fullhostent t_fullhostent;
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
struct t_fullhostent {
|
||||
t_hostent hp;
|
||||
char *list[2];
|
||||
char addr[HTS_MAXADDRLEN]; /* various struct sockaddr structures */
|
||||
unsigned int addr_maxlen;
|
||||
};
|
||||
|
||||
/* Initialize a t_fullhostent structure */
|
||||
#define fullhostent_init(h) do { \
|
||||
memset((h), 0, sizeof(t_fullhostent)); \
|
||||
(h)->hp.h_addr_list = (char **) & ((h)->list); \
|
||||
(h)->list[0] = (char *) & ((h)->addr); \
|
||||
(h)->list[1] = NULL; \
|
||||
(h)->addr_maxlen = HTS_MAXADDRLEN; \
|
||||
} while(0)
|
||||
|
||||
#endif
|
||||
|
||||
184
src/htsopt.h
184
src/htsopt.h
@@ -1,7 +1,7 @@
|
||||
/* ------------------------------------------------------------ */
|
||||
/*
|
||||
HTTrack Website Copier, Offline Browser for Windows and Unix
|
||||
Copyright (C) 1998-2013 Xavier Roche and other contributors
|
||||
Copyright (C) 1998-2014 Xavier Roche and other contributors
|
||||
|
||||
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
|
||||
@@ -35,7 +35,13 @@ Please visit our Website: http://www.httrack.com
|
||||
#define HTTRACK_DEFOPT
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
#include "htsglobal.h"
|
||||
#include "htsnet.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/* Forward definitions */
|
||||
#ifndef HTS_DEF_FWSTRUCT_t_hts_htmlcheck_callbacks
|
||||
@@ -199,9 +205,9 @@ typedef struct htsmutex_s htsmutex_s, *htsmutex;
|
||||
#endif
|
||||
|
||||
/* Hashtables */
|
||||
#ifndef HTS_DEF_FWSTRUCT_struct_inthash
|
||||
#define HTS_DEF_FWSTRUCT_struct_inthash
|
||||
typedef struct struct_inthash struct_inthash, *inthash;
|
||||
#ifndef HTS_DEF_FWSTRUCT_struct_coucal
|
||||
#define HTS_DEF_FWSTRUCT_struct_coucal
|
||||
typedef struct struct_coucal struct_coucal, *coucal;
|
||||
#endif
|
||||
|
||||
/* Structure état du miroir */
|
||||
@@ -245,6 +251,7 @@ struct htsoptstate {
|
||||
char HTbuff[2048];
|
||||
unsigned int debug_state;
|
||||
unsigned int tmpnameid; /* 3.41 */
|
||||
int is_ended; /* 3.48-14 */
|
||||
};
|
||||
|
||||
/* Library handles */
|
||||
@@ -274,6 +281,11 @@ typedef enum htsparsejava_flags {
|
||||
HTSPARSE_NO_AGGRESSIVE = 8 // don't aggressively parse .js or .java
|
||||
} htsparsejava_flags;
|
||||
|
||||
#ifndef HTS_DEF_FWSTRUCT_lien_buffers
|
||||
#define HTS_DEF_FWSTRUCT_lien_buffers
|
||||
typedef struct lien_buffers lien_buffers;
|
||||
#endif
|
||||
|
||||
// paramètres httrack (options)
|
||||
#ifndef HTS_DEF_FWSTRUCT_httrackp
|
||||
#define HTS_DEF_FWSTRUCT_httrackp
|
||||
@@ -362,7 +374,9 @@ struct httrackp {
|
||||
String urllist; // fichier liste de filtres à inclure
|
||||
htsfilters filters; // contient les pointeurs pour les filtres
|
||||
hash_struct *hash; // hash structure
|
||||
lien_url **liens; // liens
|
||||
lien_url **liens; // links
|
||||
int lien_tot; // top index of "links" heap (always out-of-range)
|
||||
lien_buffers *liensbuf; // links buffers
|
||||
robots_wizard *robotsptr; // robots ptr
|
||||
String lang_iso; // en, fr ..
|
||||
String accept; // Accept:
|
||||
@@ -374,7 +388,7 @@ struct httrackp {
|
||||
int maxlink; // nombre max de liens
|
||||
int maxfilter; // nombre max de filtres
|
||||
//
|
||||
char *exec; // adresse du nom de l'éxecutable
|
||||
const char *exec; // adresse du nom de l'éxecutable
|
||||
//
|
||||
int quiet; // poser des questions autres que wizard?
|
||||
int keyboard; // vérifier stdin
|
||||
@@ -432,4 +446,162 @@ struct hts_stat_struct {
|
||||
TStamp last_request; // last request issued
|
||||
};
|
||||
|
||||
// structure pour paramètres supplémentaires lors de la requête
|
||||
#ifndef HTS_DEF_FWSTRUCT_htsrequest_proxy
|
||||
#define HTS_DEF_FWSTRUCT_htsrequest_proxy
|
||||
typedef struct htsrequest_proxy htsrequest_proxy;
|
||||
#endif
|
||||
struct htsrequest_proxy {
|
||||
int active;
|
||||
const char* name;
|
||||
int port;
|
||||
const char* bindhost; // bind this host
|
||||
};
|
||||
|
||||
#ifndef HTS_DEF_FWSTRUCT_htsrequest
|
||||
#define HTS_DEF_FWSTRUCT_htsrequest
|
||||
typedef struct htsrequest htsrequest;
|
||||
#endif
|
||||
struct htsrequest {
|
||||
short int user_agent_send; // user agent (ex: httrack/1.0 [sun])
|
||||
short int http11; // l'en tête peut (doit) être signé HTTP/1.1 et non HTTP/1.0
|
||||
short int nokeepalive; // pas de keep-alive
|
||||
short int range_used; // Range utilisé
|
||||
short int nocompression; // Pas de compression
|
||||
short int flush_garbage; // recycled
|
||||
const char* user_agent;
|
||||
const char* referer;
|
||||
const char* from;
|
||||
const char* lang_iso;
|
||||
const char* accept;
|
||||
const char* headers;
|
||||
htsrequest_proxy proxy; // proxy
|
||||
};
|
||||
|
||||
// structure pour retour d'une connexion/prise d'en tête
|
||||
#ifndef HTS_DEF_FWSTRUCT_htsblk
|
||||
#define HTS_DEF_FWSTRUCT_htsblk
|
||||
typedef struct htsblk htsblk;
|
||||
#endif
|
||||
struct htsblk {
|
||||
int statuscode; // status-code, -1=erreur, 200=OK,201=..etc (cf RFC1945)
|
||||
short int notmodified; // page ou fichier NON modifié (transféré)
|
||||
short int is_write; // sortie sur disque (out) ou en mémoire (adr)
|
||||
short int is_chunk; // mode chunk
|
||||
short int compressed; // compressé?
|
||||
short int empty; // vide?
|
||||
short int keep_alive; // Keep-Alive?
|
||||
short int keep_alive_trailers; // ..with trailers extension
|
||||
int keep_alive_t; // KA timeout
|
||||
int keep_alive_max; // KA number of requests
|
||||
char *adr; // adresse du bloc de mémoire, NULL=vide
|
||||
char *headers; // adresse des en têtes si présents
|
||||
FILE *out; // écriture directe sur disque (si is_write=1)
|
||||
LLint size; // taille fichier
|
||||
char msg[80]; // message éventuel si échec ("\0"=non précisé)
|
||||
char contenttype[64]; // content-type ("text/html" par exemple)
|
||||
char charset[64]; // charset ("iso-8859-1" par exemple)
|
||||
char contentencoding[64]; // content-encoding ("gzip" par exemple)
|
||||
char *location; // on copie dedans éventuellement la véritable 'location'
|
||||
LLint totalsize; // taille totale à télécharger (-1=inconnue)
|
||||
short int is_file; // ce n'est pas une socket mais un descripteur de fichier si 1
|
||||
T_SOC soc; // ID socket
|
||||
SOCaddr address; // IP address
|
||||
int address_size; // IP address structure length (unused internally)
|
||||
FILE *fp; // fichier pour file://
|
||||
#if HTS_USEOPENSSL
|
||||
short int ssl; // is this connection a SSL one? (https)
|
||||
// BIO* ssl_soc; // SSL structure
|
||||
SSL *ssl_con; // connection structure
|
||||
#endif
|
||||
char lastmodified[64]; // Last-Modified
|
||||
char etag[256]; // Etag
|
||||
char cdispo[256]; // Content-Disposition coupé
|
||||
LLint crange; // Content-Range
|
||||
LLint crange_start; // Content-Range
|
||||
LLint crange_end; // Content-Range
|
||||
int debugid; // debug connection
|
||||
/* */
|
||||
htsrequest req; // paramètres pour la requête
|
||||
/*char digest[32+2]; // digest md5 généré par le moteur ("" si non généré) */
|
||||
};
|
||||
|
||||
// structure d'un lien
|
||||
#ifndef HTS_DEF_FWSTRUCT_lien_url
|
||||
#define HTS_DEF_FWSTRUCT_lien_url
|
||||
typedef struct lien_url lien_url;
|
||||
#endif
|
||||
struct lien_url {
|
||||
char *adr; // adresse
|
||||
char *fil; // nom du fichier distant
|
||||
char *sav; // nom à sauver sur disque (avec chemin éventuel)
|
||||
char *cod; // chemin codebase éventuel si classe java
|
||||
char *former_adr; // adresse initiale (avant éventuel moved), peut être nulle
|
||||
char *former_fil; // nom du fichier distant initial (avant éventuel moved), peut être nul
|
||||
|
||||
int premier; // pointeur sur le premier lien qui a donné lieu aux autres liens du domaine
|
||||
int precedent; // pointeur sur le lien qui a donné lieu à ce lien précis
|
||||
int depth; // profondeur autorisée lien ; >0 forte 0=faible
|
||||
int pass2; // traiter après les autres, seconde passe. si == -1, lien traité en background
|
||||
char link_import; // lien importé à la suite d'un moved - ne pas appliquer les règles classiques up/down
|
||||
//int moved; // pointeur sur moved
|
||||
int retry; // nombre de retry restants
|
||||
int testmode; // mode test uniquement, envoyer juste un head!
|
||||
};
|
||||
|
||||
// chargement de fichiers en 'arrière plan'
|
||||
#ifndef HTS_DEF_FWSTRUCT_lien_back
|
||||
#define HTS_DEF_FWSTRUCT_lien_back
|
||||
typedef struct lien_back lien_back;
|
||||
#endif
|
||||
struct lien_back {
|
||||
#if DEBUG_CHECKINT
|
||||
char magic;
|
||||
#endif
|
||||
char url_adr[HTS_URLMAXSIZE * 2]; // adresse
|
||||
char url_fil[HTS_URLMAXSIZE * 2]; // nom du fichier distant
|
||||
char url_sav[HTS_URLMAXSIZE * 2]; // nom à sauver sur disque (avec chemin éventuel)
|
||||
char referer_adr[HTS_URLMAXSIZE * 2]; // adresse host page referer
|
||||
char referer_fil[HTS_URLMAXSIZE * 2]; // fichier page referer
|
||||
char location_buffer[HTS_URLMAXSIZE * 2]; // "location" en cas de "moved" (302,..)
|
||||
char *tmpfile; // nom à sauver temporairement (compressé)
|
||||
char tmpfile_buffer[HTS_URLMAXSIZE * 2]; // buffer pour le nom à sauver temporairement
|
||||
char send_too[1024]; // données à envoyer en même temps que le header
|
||||
int status; // status (-1=non utilisé, 0: prêt, >0: opération en cours)
|
||||
int locked; // locked (to be used soon)
|
||||
int testmode; // mode de test
|
||||
int timeout; // gérer des timeouts? (!=0 : nombre de secondes)
|
||||
TStamp timeout_refresh; // si oui, time refresh
|
||||
int rateout; // timeout refresh? (!=0 : taux minimum toléré en octets/s)
|
||||
TStamp rateout_time; // si oui, date de départ
|
||||
LLint maxfile_nonhtml; // taille max d'un fichier non html
|
||||
LLint maxfile_html; // idem pour un ficheir html
|
||||
htsblk r; // structure htsblk de chaque objet en background
|
||||
int is_update; // mode update
|
||||
int head_request; // requète HEAD?
|
||||
LLint range_req_size; // range utilisé
|
||||
TStamp ka_time_start; // refresh time for KA
|
||||
//
|
||||
int http11; // L'en tête doit être signé HTTP/1.1 et non HTTP/1.0
|
||||
int is_chunk; // chunk?
|
||||
char *chunk_adr; // adresse chunk en cours de chargement
|
||||
LLint chunk_size; // taille chunk en cours de chargement
|
||||
LLint chunk_blocksize; // taille data declaree par le chunk
|
||||
LLint compressed_size; // taille compressés (stats uniquement)
|
||||
//
|
||||
//int links_index; // to access liens[links_index]
|
||||
//
|
||||
char info[256]; // éventuel status pour le ftp
|
||||
int stop_ftp; // flag stop pour ftp
|
||||
int finalized; // finalized (optim memory)
|
||||
int early_add; // was added before link heap saw it
|
||||
#if DEBUG_CHECKINT
|
||||
char magic2;
|
||||
#endif
|
||||
};
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
1656
src/htsparse.c
1656
src/htsparse.c
File diff suppressed because it is too large
Load Diff
@@ -1,7 +1,7 @@
|
||||
/* ------------------------------------------------------------ */
|
||||
/*
|
||||
HTTrack Website Copier, Offline Browser for Windows and Unix
|
||||
Copyright (C) 1998-2013 Xavier Roche and other contributors
|
||||
Copyright (C) 1998-2014 Xavier Roche and other contributors
|
||||
|
||||
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
|
||||
@@ -66,7 +66,7 @@ struct htsmoduleStructExtended {
|
||||
char ***filters_;
|
||||
robots_wizard *robots_;
|
||||
hash_struct *hash_;
|
||||
int *lien_max_;
|
||||
//int *lien_max_;
|
||||
|
||||
/* Base & codebase */
|
||||
char *base;
|
||||
@@ -135,14 +135,13 @@ int hts_mirror_wait_for_next_file(htsmoduleStruct * str,
|
||||
to be ready for naming, having its header MIME type
|
||||
If the final URL is to be forbidden, sets 'forbidden_url' to the corresponding value
|
||||
*/
|
||||
int hts_wait_delayed(htsmoduleStruct * str, char *adr, char *fil, char *save,
|
||||
char *parent_adr, char *parent_fil, char *former_adr,
|
||||
char *former_fil, int *forbidden_url);
|
||||
int hts_wait_delayed(htsmoduleStruct * str, lien_adrfilsave *afs,
|
||||
char *parent_adr, char *parent_fil, lien_adrfil *former,
|
||||
int *forbidden_url);
|
||||
|
||||
/* Context state */
|
||||
|
||||
#define ENGINE_DEFINE_CONTEXT_BASE() \
|
||||
lien_url** const liens HTS_UNUSED = (lien_url**) str->liens; \
|
||||
httrackp* const opt HTS_UNUSED = (httrackp*) str->opt; \
|
||||
struct_back* const sback HTS_UNUSED = (struct_back*) str->sback; \
|
||||
lien_back* const back HTS_UNUSED = sback->lnk; \
|
||||
@@ -150,28 +149,18 @@ int hts_wait_delayed(htsmoduleStruct * str, char *adr, char *fil, char *save,
|
||||
cache_back* const cache HTS_UNUSED = (cache_back*) str->cache; \
|
||||
hash_struct* const hashptr HTS_UNUSED = (hash_struct*) str->hashptr; \
|
||||
const int numero_passe HTS_UNUSED = str->numero_passe; \
|
||||
const int add_tab_alloc HTS_UNUSED = str->add_tab_alloc; \
|
||||
/* variable */ \
|
||||
int lien_tot = *str->lien_tot_; \
|
||||
int ptr = *str->ptr_; \
|
||||
size_t lien_size = *str->lien_size_; \
|
||||
char* lien_buffer = *str->lien_buffer_
|
||||
int ptr = *str->ptr_
|
||||
|
||||
#define ENGINE_SET_CONTEXT_BASE() \
|
||||
lien_tot = *str->lien_tot_; \
|
||||
ptr = *str->ptr_; \
|
||||
lien_size = *str->lien_size_; \
|
||||
lien_buffer = *str->lien_buffer_
|
||||
ptr = *str->ptr_
|
||||
|
||||
#define ENGINE_LOAD_CONTEXT_BASE() \
|
||||
ENGINE_DEFINE_CONTEXT_BASE()
|
||||
|
||||
#define ENGINE_SAVE_CONTEXT_BASE() \
|
||||
/* Apply changes */ \
|
||||
* str->lien_tot_ = lien_tot; \
|
||||
* str->ptr_ = ptr; \
|
||||
* str->lien_size_ = lien_size; \
|
||||
* str->lien_buffer_ = lien_buffer
|
||||
* str->ptr_ = ptr
|
||||
|
||||
#define WAIT_FOR_AVAILABLE_SOCKET() do { \
|
||||
int prev = opt->state._hts_in_html_parsing; \
|
||||
@@ -186,10 +175,10 @@ int hts_wait_delayed(htsmoduleStruct * str, char *adr, char *fil, char *save,
|
||||
HTS_STAT.stat_errors=fspc(opt,NULL,"error"); \
|
||||
HTS_STAT.stat_warnings=fspc(opt,NULL,"warning"); \
|
||||
HTS_STAT.stat_infos=fspc(opt,NULL,"info"); \
|
||||
HTS_STAT.nbk=backlinks_done(sback,liens,lien_tot,ptr); \
|
||||
HTS_STAT.nbk=backlinks_done(sback,opt->liens,opt->lien_tot,ptr); \
|
||||
HTS_STAT.nb=back_transferred(HTS_STAT.stat_bytes,sback); \
|
||||
/* Check */ \
|
||||
if (!RUN_CALLBACK7(opt, loop, sback->lnk, sback->count, -1,ptr,lien_tot,(int) (time_local()-HTS_STAT.stat_timestart),&HTS_STAT)) { \
|
||||
if (!RUN_CALLBACK7(opt, loop, sback->lnk, sback->count, -1,ptr,opt->lien_tot,(int) (time_local()-HTS_STAT.stat_timestart),&HTS_STAT)) { \
|
||||
return -1; \
|
||||
} \
|
||||
} \
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/* ------------------------------------------------------------ */
|
||||
/*
|
||||
HTTrack Website Copier, Offline Browser for Windows and Unix
|
||||
Copyright (C) 1998-2013 Xavier Roche and other contributors
|
||||
Copyright (C) 1998-2014 Xavier Roche and other contributors
|
||||
|
||||
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
|
||||
@@ -45,7 +45,7 @@ Please visit our Website: http://www.httrack.com
|
||||
// -- robots --
|
||||
|
||||
// fil="" : vérifier si règle déja enregistrée
|
||||
int checkrobots(robots_wizard * robots, char *adr, char *fil) {
|
||||
int checkrobots(robots_wizard * robots, const char *adr, const char *fil) {
|
||||
while(robots) {
|
||||
if (strfield2(robots->adr, adr)) {
|
||||
if (fil[0]) {
|
||||
@@ -74,7 +74,7 @@ int checkrobots(robots_wizard * robots, char *adr, char *fil) {
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
int checkrobots_set(robots_wizard * robots, char *adr, char *data) {
|
||||
int checkrobots_set(robots_wizard * robots, const char *adr, const char *data) {
|
||||
if (((int) strlen(adr)) >= sizeof(robots->adr) - 2)
|
||||
return 0;
|
||||
if (((int) strlen(data)) >= sizeof(robots->token) - 2)
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/* ------------------------------------------------------------ */
|
||||
/*
|
||||
HTTrack Website Copier, Offline Browser for Windows and Unix
|
||||
Copyright (C) 1998-2013 Xavier Roche and other contributors
|
||||
Copyright (C) 1998-2014 Xavier Roche and other contributors
|
||||
|
||||
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
|
||||
@@ -47,9 +47,9 @@ struct robots_wizard {
|
||||
|
||||
/* Library internal definictions */
|
||||
#ifdef HTS_INTERNAL_BYTECODE
|
||||
int checkrobots(robots_wizard * robots, char *adr, char *fil);
|
||||
int checkrobots(robots_wizard * robots, const char *adr, const char *fil);
|
||||
void checkrobots_free(robots_wizard * robots);
|
||||
int checkrobots_set(robots_wizard * robots, char *adr, char *data);
|
||||
int checkrobots_set(robots_wizard * robots, const char *adr, const char *data);
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
214
src/htssafe.h
Normal file
214
src/htssafe.h
Normal file
@@ -0,0 +1,214 @@
|
||||
/* ------------------------------------------------------------ */
|
||||
/*
|
||||
HTTrack Website Copier, Offline Browser for Windows and Unix
|
||||
Copyright (C) 1998-2014 Xavier Roche and other contributors
|
||||
|
||||
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 <http://www.gnu.org/licenses/>.
|
||||
|
||||
Important notes:
|
||||
|
||||
- We hereby ask people using this source NOT to use it in purpose of grabbing
|
||||
emails addresses, or collecting any other private information on persons.
|
||||
This would disgrace our work, and spoil the many hours we spent on it.
|
||||
|
||||
Please visit our Website: http://www.httrack.com
|
||||
*/
|
||||
|
||||
/* ------------------------------------------------------------ */
|
||||
/* File: htssafe.h safe strings operations, and asserts */
|
||||
/* Author: Xavier Roche */
|
||||
/* ------------------------------------------------------------ */
|
||||
|
||||
#ifndef HTSSAFE_DEFH
|
||||
#define HTSSAFE_DEFH
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "htsglobal.h"
|
||||
|
||||
/**
|
||||
* Emergency logging.
|
||||
* Default is to use libhttrack one.
|
||||
*/
|
||||
#if (!defined(HTSSAFE_ABORT_FUNCTION) && defined(LIBHTTRACK_EXPORTS))
|
||||
|
||||
/** Assert error callback. **/
|
||||
#ifndef HTS_DEF_FWSTRUCT_htsErrorCallback
|
||||
#define HTS_DEF_FWSTRUCT_htsErrorCallback
|
||||
typedef void (*htsErrorCallback) (const char *msg, const char *file, int line);
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
HTSEXT_API htsErrorCallback hts_get_error_callback(void);
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#define HTSSAFE_ABORT_FUNCTION(A,B,C) do { \
|
||||
htsErrorCallback callback = hts_get_error_callback(); \
|
||||
if (callback != NULL) { \
|
||||
callback(A,B,C); \
|
||||
} \
|
||||
} while(0)
|
||||
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Log an abort condition, and calls abort().
|
||||
*/
|
||||
#define abortLog(a) abortf_(a, __FILE__, __LINE__)
|
||||
|
||||
/**
|
||||
* Fatal assertion check.
|
||||
*/
|
||||
#define assertf__(exp, sexp, file, line) (void) ( (exp) || (abortf_(sexp, file, line), 0) )
|
||||
|
||||
/**
|
||||
* Fatal assertion check.
|
||||
*/
|
||||
#define assertf_(exp, file, line) assertf__(exp, #exp, file, line)
|
||||
|
||||
/**
|
||||
* Fatal assertion check.
|
||||
*/
|
||||
#define assertf(exp) assertf_(exp, __FILE__, __LINE__)
|
||||
|
||||
static HTS_UNUSED void log_abort_(const char *msg, const char *file, int line) {
|
||||
fprintf(stderr, "%s failed at %s:%d\n", msg, file, line);
|
||||
fflush(stderr);
|
||||
}
|
||||
|
||||
static HTS_UNUSED void abortf_(const char *exp, const char *file, int line) {
|
||||
#ifdef HTSSAFE_ABORT_FUNCTION
|
||||
HTSSAFE_ABORT_FUNCTION(exp, file, line);
|
||||
#endif
|
||||
log_abort_(exp, file, line);
|
||||
abort();
|
||||
}
|
||||
|
||||
/**
|
||||
* Check wether 'VAR' is of type char[].
|
||||
*/
|
||||
#if (defined(__GNUC__) && !defined(__cplusplus))
|
||||
/* Note: char[] and const char[] are compatible */
|
||||
#define HTS_IS_CHAR_BUFFER(VAR) ( __builtin_types_compatible_p ( typeof (VAR), char[] ) )
|
||||
#else
|
||||
/* Note: a bit lame as char[8] won't be seen. */
|
||||
#define HTS_IS_CHAR_BUFFER(VAR) ( sizeof(VAR) != sizeof(char*) )
|
||||
#endif
|
||||
#define HTS_IS_NOT_CHAR_BUFFER(VAR) ( ! HTS_IS_CHAR_BUFFER(VAR) )
|
||||
|
||||
/* Compile-time checks. */
|
||||
static HTS_UNUSED void htssafe_compile_time_check_(void) {
|
||||
char array[32];
|
||||
char *pointer = array;
|
||||
char check_array[HTS_IS_CHAR_BUFFER(array) ? 1 : -1];
|
||||
char check_pointer[HTS_IS_CHAR_BUFFER(pointer) ? -1 : 1];
|
||||
(void) pointer;
|
||||
(void) check_array;
|
||||
(void) check_pointer;
|
||||
}
|
||||
|
||||
/**
|
||||
* Append at most N characters from "B" to "A".
|
||||
* If "A" is a char[] variable whose size is not sizeof(char*), then the size
|
||||
* is assumed to be the capacity of this array.
|
||||
*/
|
||||
#define strncatbuff(A, B, N) \
|
||||
( HTS_IS_NOT_CHAR_BUFFER(A) \
|
||||
? strncat(A, B, N) \
|
||||
: strncat_safe_(A, sizeof(A), B, \
|
||||
HTS_IS_NOT_CHAR_BUFFER(B) ? (size_t) -1 : sizeof(B), N, \
|
||||
"overflow while appending '" #B "' to '"#A"'", __FILE__, __LINE__) )
|
||||
|
||||
/**
|
||||
* Copy characters from "B" to "A".
|
||||
* If "A" is a char[] variable whose size is not sizeof(char*), then the size
|
||||
* is assumed to be the capacity of this array.
|
||||
*/
|
||||
#define strcpybuff(A, B) \
|
||||
( HTS_IS_NOT_CHAR_BUFFER(A) \
|
||||
? strcpy(A, B) \
|
||||
: strcpy_safe_(A, sizeof(A), B, \
|
||||
HTS_IS_NOT_CHAR_BUFFER(B) ? (size_t) -1 : sizeof(B), \
|
||||
"overflow while copying '" #B "' to '"#A"'", __FILE__, __LINE__) )
|
||||
|
||||
/* note: "size_t is an unsigned integral type" */
|
||||
|
||||
/**
|
||||
* Append characters of "B" to "A".
|
||||
* If "A" is a char[] variable whose size is not sizeof(char*), then the size
|
||||
* is assumed to be the capacity of this array.
|
||||
*/
|
||||
#define strcatbuff(A, B) strncatbuff(A, B, (size_t) -1)
|
||||
|
||||
/**
|
||||
* Append characters of "B" to "A", "A" having a maximum capacity of "S".
|
||||
*/
|
||||
#define strlcatbuff(A, B, S) \
|
||||
strncat_safe_(A, S, B, \
|
||||
HTS_IS_NOT_CHAR_BUFFER(B) ? (size_t) -1 : sizeof(B), (size_t) -1, \
|
||||
"overflow while appending '" #B "' to '"#A"'", __FILE__, __LINE__)
|
||||
|
||||
/**
|
||||
* Copy characters of "B" to "A", "A" having a maximum capacity of "S".
|
||||
*/
|
||||
#define strlcpybuff(A, B, S) \
|
||||
strcpy_safe_(A, S, B, \
|
||||
HTS_IS_NOT_CHAR_BUFFER(B) ? (size_t) -1 : sizeof(B), \
|
||||
"overflow while copying '" #B "' to '"#A"'", __FILE__, __LINE__)
|
||||
|
||||
static HTS_INLINE HTS_UNUSED size_t strlen_safe_(const char *source, const size_t sizeof_source,
|
||||
const char *file, int line) {
|
||||
size_t size;
|
||||
assertf_( source != NULL, file, line );
|
||||
size = sizeof_source != (size_t) -1
|
||||
? strnlen(source, sizeof_source) : strlen(source);
|
||||
assertf_( size < sizeof_source, file, line );
|
||||
return size;
|
||||
}
|
||||
|
||||
static HTS_INLINE HTS_UNUSED char* strncat_safe_(char *const dest, const size_t sizeof_dest,
|
||||
const char *const source, const size_t sizeof_source,
|
||||
const size_t n,
|
||||
const char *exp, const char *file, int line) {
|
||||
const size_t source_len = strlen_safe_(source, sizeof_source, file, line);
|
||||
const size_t dest_len = strlen_safe_(dest, sizeof_dest, file, line);
|
||||
const size_t source_copy = source_len <= n ? source_len : n;
|
||||
const size_t dest_final_len = dest_len + source_copy;
|
||||
assertf__(dest_final_len < sizeof_dest, exp, file, line);
|
||||
memcpy(dest + dest_len, source, source_copy);
|
||||
dest[dest_final_len] = '\0';
|
||||
return dest;
|
||||
}
|
||||
|
||||
static HTS_INLINE HTS_UNUSED char* strcpy_safe_(char *const dest, const size_t sizeof_dest,
|
||||
const char *const source, const size_t sizeof_source,
|
||||
const char *exp, const char *file, int line) {
|
||||
assertf_(sizeof_dest != 0, file, line);
|
||||
dest[0] = '\0';
|
||||
return strncat_safe_(dest, sizeof_dest, source, sizeof_source, (size_t) -1, exp, file, line);
|
||||
}
|
||||
|
||||
#define malloct(A) malloc(A)
|
||||
#define calloct(A,B) calloc((A), (B))
|
||||
#define freet(A) do { if ((A) != NULL) { free(A); (A) = NULL; } } while(0)
|
||||
#define strdupt(A) strdup(A)
|
||||
#define realloct(A,B) realloc(A, B)
|
||||
#define memcpybuff(A, B, N) memcpy((A), (B), (N))
|
||||
|
||||
#endif
|
||||
377
src/htsserver.c
377
src/htsserver.c
@@ -1,7 +1,7 @@
|
||||
/* ------------------------------------------------------------ */
|
||||
/*
|
||||
HTTrack Website Copier, Offline Browser for Windows and Unix
|
||||
Copyright (C) 1998-2013 Xavier Roche and other contributors
|
||||
Copyright (C) 1998-2014 Xavier Roche and other contributors
|
||||
|
||||
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
|
||||
@@ -67,21 +67,21 @@ Please visit our Website: http://www.httrack.com
|
||||
|
||||
/* Bypass internal definition protection */
|
||||
#define HTS_INTERNAL_BYTECODE
|
||||
#include "htsinthash.h"
|
||||
#include "coucal.h"
|
||||
#undef HTS_INTERNAL_BYTECODE
|
||||
|
||||
int NewLangStrSz = 1024;
|
||||
inthash NewLangStr = NULL;
|
||||
coucal NewLangStr = NULL;
|
||||
int NewLangStrKeysSz = 1024;
|
||||
inthash NewLangStrKeys = NULL;
|
||||
coucal NewLangStrKeys = NULL;
|
||||
int NewLangListSz = 1024;
|
||||
inthash NewLangList = NULL;
|
||||
coucal NewLangList = NULL;
|
||||
|
||||
/* Language files */
|
||||
|
||||
#include "htsserver.h"
|
||||
|
||||
char *gethomedir(void);
|
||||
const char *gethomedir(void);
|
||||
int commandRunning = 0;
|
||||
int commandEndRequested = 0;
|
||||
int commandEnd = 0;
|
||||
@@ -97,13 +97,13 @@ extern void webhttrack_main(char *cmd);
|
||||
extern void webhttrack_lock(void);
|
||||
extern void webhttrack_release(void);
|
||||
|
||||
static int is_image(char *file) {
|
||||
static int is_image(const char *file) {
|
||||
return ((strstr(file, ".gif") != NULL));
|
||||
}
|
||||
static int is_text(char *file) {
|
||||
static int is_text(const char *file) {
|
||||
return ((strstr(file, ".txt") != NULL));
|
||||
}
|
||||
static int is_html(char *file) {
|
||||
static int is_html(const char *file) {
|
||||
return ((strstr(file, ".htm") != NULL));
|
||||
}
|
||||
|
||||
@@ -119,16 +119,16 @@ HTS_UNUSED static int linputsoc_t(T_SOC soc, char *s, int max, int timeout);
|
||||
HTS_UNUSED static int linput(FILE * fp, char *s, int max);
|
||||
|
||||
/* Language files */
|
||||
HTS_UNUSED static int htslang_load(char *limit_to, char *apppath);
|
||||
HTS_UNUSED static void conv_printf(char *from, char *to);
|
||||
HTS_UNUSED static int htslang_load(char *limit_to, const char *apppath);
|
||||
HTS_UNUSED static void conv_printf(const char *from, char *to);
|
||||
HTS_UNUSED static void LANG_DELETE(void);
|
||||
HTS_UNUSED static void LANG_INIT(char *path);
|
||||
HTS_UNUSED static int LANG_T(char *path, int l);
|
||||
HTS_UNUSED static void LANG_INIT(const char *path);
|
||||
HTS_UNUSED static int LANG_T(const char *path, int l);
|
||||
HTS_UNUSED static int QLANG_T(int l);
|
||||
HTS_UNUSED static char *LANGSEL(char *name);
|
||||
HTS_UNUSED static char *LANGINTKEY(char *name);
|
||||
HTS_UNUSED static int LANG_SEARCH(char *path, char *iso);
|
||||
HTS_UNUSED static int LANG_LIST(char *path, char *buffer);
|
||||
HTS_UNUSED static const char *LANGSEL(const char *name);
|
||||
HTS_UNUSED static const char *LANGINTKEY(const char *name);
|
||||
HTS_UNUSED static int LANG_SEARCH(const char *path, const char *iso);
|
||||
HTS_UNUSED static int LANG_LIST(const char *path, char *buffer, size_t size);
|
||||
|
||||
// URL Link catcher
|
||||
|
||||
@@ -162,16 +162,15 @@ T_SOC smallserver_init_std(int *port_prox, char *adr_prox, int defaultPort) {
|
||||
// 1- Init the URL catcher
|
||||
|
||||
// get hostname. return 1 upon success.
|
||||
static int gethost(const char *hostname, SOCaddr * server, size_t server_size) {
|
||||
static int gethost(const char *hostname, SOCaddr * server) {
|
||||
if (hostname != NULL && *hostname != '\0') {
|
||||
#if HTS_INET6==0
|
||||
/* ipV4 resolver */
|
||||
t_hostent *hp = gethostbyname(hostname);
|
||||
struct hostent *hp = gethostbyname(hostname);
|
||||
|
||||
if (hp != NULL) {
|
||||
if (hp->h_length) {
|
||||
SOCaddr_copyaddr(*server, server_size, hp->h_addr_list[0],
|
||||
hp->h_length);
|
||||
SOCaddr_copyaddr2(*server, hp->h_addr_list[0], hp->h_length);
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
@@ -187,7 +186,7 @@ static int gethost(const char *hostname, SOCaddr * server, size_t server_size) {
|
||||
if (getaddrinfo(hostname, NULL, &hints, &res) == 0) {
|
||||
if (res) {
|
||||
if ((res->ai_addr) && (res->ai_addrlen)) {
|
||||
SOCaddr_copyaddr(*server, server_size, res->ai_addr, res->ai_addrlen);
|
||||
SOCaddr_copyaddr2(*server, res->ai_addr, res->ai_addrlen);
|
||||
freeaddrinfo(res);
|
||||
return 1;
|
||||
}
|
||||
@@ -204,7 +203,7 @@ static int gethost(const char *hostname, SOCaddr * server, size_t server_size) {
|
||||
static int my_getlocalhost(char *h_loc, size_t size) {
|
||||
SOCaddr addr;
|
||||
strcpy(h_loc, "localhost");
|
||||
if (gethost(h_loc, &addr, sizeof(addr)) == 1) {
|
||||
if (gethost(h_loc, &addr) == 1) {
|
||||
return 0;
|
||||
}
|
||||
// come on ...
|
||||
@@ -220,7 +219,7 @@ static int my_gethostname(char *h_loc, size_t size) {
|
||||
h_loc[0] = '\0';
|
||||
if (gethostname(h_loc, (int) size) == 0) { // host name
|
||||
SOCaddr addr;
|
||||
if (gethost(h_loc, &addr, sizeof(addr)) == 1) {
|
||||
if (gethost(h_loc, &addr) == 1) {
|
||||
return 0;
|
||||
} else {
|
||||
return my_getlocalhost(h_loc, size);
|
||||
@@ -247,54 +246,16 @@ T_SOC smallserver_init(int *port, char *adr) {
|
||||
|
||||
if (my_gethostname(h_loc, 256) == 0) { // host name
|
||||
SOCaddr server;
|
||||
int server_size = sizeof(server);
|
||||
|
||||
/*t_hostent* hp_loc;
|
||||
t_fullhostent buffer; */
|
||||
|
||||
// effacer structure
|
||||
memset(&server, 0, sizeof(server));
|
||||
|
||||
/*if ( (hp_loc=vxgethostbyname(h_loc, &buffer)) ) */
|
||||
{
|
||||
// copie adresse
|
||||
// NO (bind all)
|
||||
// SOCaddr_copyaddr(server, server_size, hp_loc->h_addr_list[0], hp_loc->h_length);
|
||||
|
||||
SOCaddr_initany(server, server_size);
|
||||
if ((soc =
|
||||
(T_SOC) socket(SOCaddr_sinfamily(server), SOCK_STREAM,
|
||||
0)) != INVALID_SOCKET) {
|
||||
SOCaddr_initport(server, *port);
|
||||
if (bind(soc, (struct sockaddr *) &server, server_size) == 0) {
|
||||
/*SOClen len;
|
||||
SOCaddr server2;
|
||||
len=sizeof(server2); */
|
||||
// effacer structure
|
||||
/*memset(&server2, 0, sizeof(server2));
|
||||
if (getsockname(soc,(struct sockaddr*) &server2,&len) == 0) {
|
||||
*port=ntohs(SOCaddr_sinport(server)); // récupérer port */
|
||||
if (listen(soc, 10) >= 0) { // au pif le 10
|
||||
// SOCaddr_inetntoa(adr, 128, server2, len);
|
||||
strcpy(adr, h_loc);
|
||||
} else {
|
||||
#ifdef _WIN32
|
||||
closesocket(soc);
|
||||
#else
|
||||
close(soc);
|
||||
#endif
|
||||
soc = INVALID_SOCKET;
|
||||
}
|
||||
|
||||
/*} else {
|
||||
#ifdef _WIN32
|
||||
closesocket(soc);
|
||||
#else
|
||||
close(soc);
|
||||
#endif
|
||||
soc=INVALID_SOCKET;
|
||||
} */
|
||||
|
||||
SOCaddr_initany(server);
|
||||
if ((soc =
|
||||
(T_SOC) socket(SOCaddr_sinfamily(server), SOCK_STREAM,
|
||||
0)) != INVALID_SOCKET) {
|
||||
SOCaddr_initport(server, *port);
|
||||
if (bind(soc, &SOCaddr_sockaddr(server), SOCaddr_size(server)) == 0) {
|
||||
if (listen(soc, 10) >= 0) {
|
||||
// SOCaddr_inetntoa(adr, 128, server2);
|
||||
strcpy(adr, h_loc);
|
||||
} else {
|
||||
#ifdef _WIN32
|
||||
closesocket(soc);
|
||||
@@ -303,6 +264,13 @@ T_SOC smallserver_init(int *port, char *adr) {
|
||||
#endif
|
||||
soc = INVALID_SOCKET;
|
||||
}
|
||||
} else {
|
||||
#ifdef _WIN32
|
||||
closesocket(soc);
|
||||
#else
|
||||
close(soc);
|
||||
#endif
|
||||
soc = INVALID_SOCKET;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -319,16 +287,16 @@ T_SOC smallserver_init(int *port, char *adr) {
|
||||
// data: 32Kb
|
||||
|
||||
typedef struct {
|
||||
char *name;
|
||||
const char *name;
|
||||
int value;
|
||||
} initIntElt;
|
||||
typedef struct {
|
||||
char *name;
|
||||
char *value;
|
||||
const char *name;
|
||||
const char *value;
|
||||
} initStrElt;
|
||||
|
||||
#define SET_ERROR(err) do { \
|
||||
inthash_write(NewLangList, "error", (intptr_t)strdup(err)); \
|
||||
coucal_write(NewLangList, "error", (intptr_t)strdup(err)); \
|
||||
error_redirect = "/server/error.html"; \
|
||||
} while(0)
|
||||
|
||||
@@ -358,10 +326,10 @@ int smallserver(T_SOC soc, char *url, char *method, char *data, char *path) {
|
||||
{
|
||||
char pth[1024];
|
||||
|
||||
char *initOn[] = { "parseall", "Cache", "ka",
|
||||
const char *initOn[] = { "parseall", "Cache", "ka",
|
||||
"cookies", "parsejava", "testall", "updhack", "urlhack", "index", NULL
|
||||
};
|
||||
initIntElt initInt[] = {
|
||||
const initIntElt initInt[] = {
|
||||
{"filter", 4},
|
||||
{"travel", 2},
|
||||
{"travel2", 1},
|
||||
@@ -381,7 +349,7 @@ int smallserver(T_SOC soc, char *url, char *method, char *data, char *path) {
|
||||
initStrElt initStr[] = {
|
||||
{"user", "Mozilla/4.5 (compatible; HTTrack 3.0x; Windows 98)"},
|
||||
{"footer",
|
||||
"<!-- Mirrored from %s%s by HTTrack Website Copier/3.x [XR&CO'2013], %s -->"},
|
||||
"<!-- Mirrored from %s%s by HTTrack Website Copier/3.x [XR&CO'2014], %s -->"},
|
||||
{"url2", "+*.png +*.gif +*.jpg +*.jpeg +*.css +*.js -ad.doubleclick.net/*"},
|
||||
{NULL, NULL}
|
||||
};
|
||||
@@ -391,18 +359,18 @@ int smallserver(T_SOC soc, char *url, char *method, char *data, char *path) {
|
||||
char tmp[32];
|
||||
|
||||
sprintf(tmp, "%d", initInt[i].value);
|
||||
inthash_write(NewLangList, initInt[i].name, (intptr_t) strdup(tmp));
|
||||
coucal_write(NewLangList, initInt[i].name, (intptr_t) strdup(tmp));
|
||||
}
|
||||
for(i = 0; initOn[i]; i++) {
|
||||
inthash_write(NewLangList, initOn[i], (intptr_t) strdup("1")); /* "on" */
|
||||
coucal_write(NewLangList, initOn[i], (intptr_t) strdup("1")); /* "on" */
|
||||
}
|
||||
for(i = 0; initStr[i].name; i++) {
|
||||
inthash_write(NewLangList, initStr[i].name,
|
||||
coucal_write(NewLangList, initStr[i].name,
|
||||
(intptr_t) strdup(initStr[i].value));
|
||||
}
|
||||
strcpybuff(pth, gethomedir());
|
||||
strcatbuff(pth, "/websites");
|
||||
inthash_write(NewLangList, "path", (intptr_t) strdup(pth));
|
||||
coucal_write(NewLangList, "path", (intptr_t) strdup(pth));
|
||||
}
|
||||
|
||||
/* Lock */
|
||||
@@ -415,7 +383,7 @@ int smallserver(T_SOC soc, char *url, char *method, char *data, char *path) {
|
||||
char line2[1024];
|
||||
T_SOC soc_c;
|
||||
LLint length = 0;
|
||||
char *error_redirect = NULL;
|
||||
const char *error_redirect = NULL;
|
||||
|
||||
line[0] = '\0';
|
||||
buffer[0] = '\0';
|
||||
@@ -500,15 +468,15 @@ int smallserver(T_SOC soc, char *url, char *method, char *data, char *path) {
|
||||
char tmp[32];
|
||||
|
||||
sprintf(tmp, "%d", commandReturn);
|
||||
inthash_write(NewLangList, "commandReturn", (intptr_t) strdup(tmp));
|
||||
inthash_write(NewLangList, "commandReturnMsg",
|
||||
coucal_write(NewLangList, "commandReturn", (intptr_t) strdup(tmp));
|
||||
coucal_write(NewLangList, "commandReturnMsg",
|
||||
(intptr_t) commandReturnMsg);
|
||||
inthash_write(NewLangList, "commandReturnCmdl",
|
||||
coucal_write(NewLangList, "commandReturnCmdl",
|
||||
(intptr_t) commandReturnCmdl);
|
||||
} else {
|
||||
inthash_write(NewLangList, "commandReturn", (intptr_t) NULL);
|
||||
inthash_write(NewLangList, "commandReturnMsg", (intptr_t) NULL);
|
||||
inthash_write(NewLangList, "commandReturnCmdl", (intptr_t) NULL);
|
||||
coucal_write(NewLangList, "commandReturn", (intptr_t) NULL);
|
||||
coucal_write(NewLangList, "commandReturnMsg", (intptr_t) NULL);
|
||||
coucal_write(NewLangList, "commandReturnCmdl", (intptr_t) NULL);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -516,8 +484,8 @@ int smallserver(T_SOC soc, char *url, char *method, char *data, char *path) {
|
||||
{
|
||||
intptr_t adr = 0;
|
||||
|
||||
if (inthash_readptr(NewLangList, "_sid", &adr)) {
|
||||
if (inthash_write
|
||||
if (coucal_readptr(NewLangList, "_sid", &adr)) {
|
||||
if (coucal_write
|
||||
(NewLangList, "sid", (intptr_t) strdup((char *) adr))) {
|
||||
}
|
||||
}
|
||||
@@ -530,7 +498,7 @@ int smallserver(T_SOC soc, char *url, char *method, char *data, char *path) {
|
||||
|
||||
strcatbuff(buffer, "&");
|
||||
while(s && (e = strchr(s, '=')) && (f = strchr(s, '&'))) {
|
||||
char *ua;
|
||||
const char *ua;
|
||||
String sua = STRING_EMPTY;
|
||||
|
||||
*e = *f = '\0';
|
||||
@@ -538,7 +506,7 @@ int smallserver(T_SOC soc, char *url, char *method, char *data, char *path) {
|
||||
if (strfield2(ua, "on")) /* hack : "on" == 1 */
|
||||
ua = "1";
|
||||
unescapehttp(ua, &sua);
|
||||
inthash_write(NewLangList, s, (intptr_t) StringAcquire(&sua));
|
||||
coucal_write(NewLangList, s, (intptr_t) StringAcquire(&sua));
|
||||
s = f + 1;
|
||||
}
|
||||
}
|
||||
@@ -548,8 +516,8 @@ int smallserver(T_SOC soc, char *url, char *method, char *data, char *path) {
|
||||
intptr_t adr = 0;
|
||||
intptr_t adr2 = 0;
|
||||
|
||||
if (inthash_readptr(NewLangList, "sid", &adr)) {
|
||||
if (inthash_readptr(NewLangList, "_sid", &adr2)) {
|
||||
if (coucal_readptr(NewLangList, "sid", &adr)) {
|
||||
if (coucal_readptr(NewLangList, "_sid", &adr2)) {
|
||||
if (strcmp((char *) adr, (char *) adr2) != 0) {
|
||||
meth = 0;
|
||||
}
|
||||
@@ -562,40 +530,40 @@ int smallserver(T_SOC soc, char *url, char *method, char *data, char *path) {
|
||||
int doLoad = 0;
|
||||
intptr_t adr = 0;
|
||||
|
||||
if (inthash_readptr(NewLangList, "lang", &adr)) {
|
||||
if (coucal_readptr(NewLangList, "lang", &adr)) {
|
||||
int n = 0;
|
||||
|
||||
if (sscanf((char *) adr, "%d", &n) == 1 && n > 0
|
||||
&& n - 1 != LANG_T(path, -1)) {
|
||||
LANG_T(path, n - 1);
|
||||
/* make a backup, because the GUI will override it */
|
||||
inthash_write(NewLangList, "lang_",
|
||||
coucal_write(NewLangList, "lang_",
|
||||
(intptr_t) strdup((char *) adr));
|
||||
}
|
||||
}
|
||||
|
||||
/* Load existing project settings */
|
||||
if (inthash_readptr(NewLangList, "loadprojname", &adr)) {
|
||||
if (coucal_readptr(NewLangList, "loadprojname", &adr)) {
|
||||
char *pname = (char *) adr;
|
||||
|
||||
if (*pname) {
|
||||
inthash_write(NewLangList, "projname", (intptr_t) strdup(pname));
|
||||
coucal_write(NewLangList, "projname", (intptr_t) strdup(pname));
|
||||
}
|
||||
inthash_write(NewLangList, "loadprojname", (intptr_t) NULL);
|
||||
coucal_write(NewLangList, "loadprojname", (intptr_t) NULL);
|
||||
doLoad = 1;
|
||||
} else if (inthash_readptr(NewLangList, "loadprojcateg", &adr)) {
|
||||
} else if (coucal_readptr(NewLangList, "loadprojcateg", &adr)) {
|
||||
char *pname = (char *) adr;
|
||||
|
||||
if (*pname) {
|
||||
inthash_write(NewLangList, "projcateg", (intptr_t) strdup(pname));
|
||||
coucal_write(NewLangList, "projcateg", (intptr_t) strdup(pname));
|
||||
}
|
||||
inthash_write(NewLangList, "loadprojcateg", (intptr_t) NULL);
|
||||
coucal_write(NewLangList, "loadprojcateg", (intptr_t) NULL);
|
||||
}
|
||||
|
||||
/* intial configuration */
|
||||
{
|
||||
if (!inthash_read(NewLangList, "conf_file_loaded", NULL)) {
|
||||
inthash_write(NewLangList, "conf_file_loaded",
|
||||
if (!coucal_read(NewLangList, "conf_file_loaded", NULL)) {
|
||||
coucal_write(NewLangList, "conf_file_loaded",
|
||||
(intptr_t) strdup("true"));
|
||||
doLoad = 2;
|
||||
}
|
||||
@@ -605,8 +573,8 @@ int smallserver(T_SOC soc, char *url, char *method, char *data, char *path) {
|
||||
if (!commandRunning) {
|
||||
intptr_t adrpath = 0, adrprojname = 0;
|
||||
|
||||
if (inthash_readptr(NewLangList, "path", &adrpath)
|
||||
&& inthash_readptr(NewLangList, "projname", &adrprojname)) {
|
||||
if (coucal_readptr(NewLangList, "path", &adrpath)
|
||||
&& coucal_readptr(NewLangList, "projname", &adrprojname)) {
|
||||
StringClear(fspath);
|
||||
StringCat(fspath, (char *) adrpath);
|
||||
StringCat(fspath, "/");
|
||||
@@ -646,7 +614,7 @@ int smallserver(T_SOC soc, char *url, char *method, char *data, char *path) {
|
||||
if (pos[0] == '0' && pos[1] == '\0')
|
||||
*pos = '\0'; /* 0 => empty */
|
||||
unescapeini(pos, &escline);
|
||||
inthash_write(NewLangList, line,
|
||||
coucal_write(NewLangList, line,
|
||||
(intptr_t) StringAcquire(&escline));
|
||||
}
|
||||
}
|
||||
@@ -662,7 +630,7 @@ int smallserver(T_SOC soc, char *url, char *method, char *data, char *path) {
|
||||
intptr_t adr = 0;
|
||||
int p = 0;
|
||||
|
||||
if (inthash_readptr(NewLangList, "command", &adr)) {
|
||||
if (coucal_readptr(NewLangList, "command", &adr)) {
|
||||
if (strcmp((char *) adr, "cancel") == 0) {
|
||||
if (commandRunning) {
|
||||
if (!commandEndRequested) {
|
||||
@@ -706,15 +674,15 @@ int smallserver(T_SOC soc, char *url, char *method, char *data, char *path) {
|
||||
if (!commandRunning) {
|
||||
intptr_t adrcd = 0;
|
||||
|
||||
if (inthash_readptr(NewLangList, "command_do", &adrcd)) {
|
||||
if (coucal_readptr(NewLangList, "command_do", &adrcd)) {
|
||||
intptr_t adrw = 0;
|
||||
|
||||
if (inthash_readptr(NewLangList, "winprofile", &adrw)) {
|
||||
if (coucal_readptr(NewLangList, "winprofile", &adrw)) {
|
||||
|
||||
/* User general profile */
|
||||
intptr_t adruserprofile = 0;
|
||||
|
||||
if (inthash_readptr
|
||||
if (coucal_readptr
|
||||
(NewLangList, "userprofile", &adruserprofile)
|
||||
&& adruserprofile != 0) {
|
||||
int count = (int) strlen((char *) adruserprofile);
|
||||
@@ -806,7 +774,7 @@ int smallserver(T_SOC soc, char *url, char *method, char *data, char *path) {
|
||||
} else if (strcmp((char *) adr, "quit") == 0) {
|
||||
willexit = 1;
|
||||
}
|
||||
inthash_write(NewLangList, "command", (intptr_t) NULL);
|
||||
coucal_write(NewLangList, "command", (intptr_t) NULL);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -818,7 +786,7 @@ int smallserver(T_SOC soc, char *url, char *method, char *data, char *path) {
|
||||
|
||||
if (url && *++url == '/' && (pos = strchr(url, ' ')) && !(*pos = '\0')) {
|
||||
char fsfile[1024];
|
||||
char *file;
|
||||
const char *file;
|
||||
FILE *fp;
|
||||
char *qpos;
|
||||
|
||||
@@ -859,7 +827,7 @@ int smallserver(T_SOC soc, char *url, char *method, char *data, char *path) {
|
||||
} else {
|
||||
intptr_t adr = 0;
|
||||
|
||||
if (inthash_readptr(NewLangList, "projpath", &adr)) {
|
||||
if (coucal_readptr(NewLangList, "projpath", &adr)) {
|
||||
sprintf(fsfile, "%s%s", (char *) adr, file + 9);
|
||||
}
|
||||
}
|
||||
@@ -880,7 +848,7 @@ int smallserver(T_SOC soc, char *url, char *method, char *data, char *path) {
|
||||
"Server: httrack small server\r\n" "Content-type: text/plain\r\n";
|
||||
|
||||
/* register current page */
|
||||
inthash_write(NewLangList, "thisfile", (intptr_t) strdup(file));
|
||||
coucal_write(NewLangList, "thisfile", (intptr_t) strdup(file));
|
||||
|
||||
/* Force GET for the last request */
|
||||
if (meth == 2 && willexit) {
|
||||
@@ -893,10 +861,10 @@ int smallserver(T_SOC soc, char *url, char *method, char *data, char *path) {
|
||||
"HTTP/1.0 302 Redirect\r\n" "Connection: close\r\n"
|
||||
"Server: httrack-small-server\r\n";
|
||||
intptr_t adr = 0;
|
||||
char *newfile = file;
|
||||
const char *newfile = file;
|
||||
|
||||
if (inthash_readptr(NewLangList, "redirect", &adr) && adr != 0) {
|
||||
char *newadr = (char *) adr;
|
||||
if (coucal_readptr(NewLangList, "redirect", &adr) && adr != 0) {
|
||||
const char *newadr = (char *) adr;
|
||||
|
||||
if (*newadr) {
|
||||
newfile = newadr;
|
||||
@@ -911,7 +879,7 @@ int smallserver(T_SOC soc, char *url, char *method, char *data, char *path) {
|
||||
StringMemcat(headers, tmp, strlen(tmp));
|
||||
}
|
||||
}
|
||||
inthash_write(NewLangList, "redirect", (intptr_t) NULL);
|
||||
coucal_write(NewLangList, "redirect", (intptr_t) NULL);
|
||||
} else if (is_html(file)) {
|
||||
int outputmode = 0;
|
||||
|
||||
@@ -936,7 +904,7 @@ int smallserver(T_SOC soc, char *url, char *method, char *data, char *path) {
|
||||
&& (n = (pos - str)) && n < 1024) {
|
||||
char name_[1024 + 2];
|
||||
char *name = name_;
|
||||
char *langstr = NULL;
|
||||
const char *langstr = NULL;
|
||||
int p;
|
||||
int format = 0;
|
||||
int listDefault = 0;
|
||||
@@ -964,13 +932,14 @@ int smallserver(T_SOC soc, char *url, char *method, char *data, char *path) {
|
||||
if (pos2 != NULL) {
|
||||
*pos2 = '\0';
|
||||
if (strstr(name, "..") == NULL) {
|
||||
if (fexist(fconcat(catbuff, path, name))) {
|
||||
if (fexist(fconcat(catbuff, sizeof(catbuff), path, name))) {
|
||||
langstr = pos2 + 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
} else if ((p = strfield(name, "do:"))) {
|
||||
char *pos2;
|
||||
char empty[2] = "";
|
||||
|
||||
name += p;
|
||||
format = 1;
|
||||
@@ -980,7 +949,7 @@ int smallserver(T_SOC soc, char *url, char *method, char *data, char *path) {
|
||||
*pos2 = '\0';
|
||||
pos2++;
|
||||
} else {
|
||||
pos2 = "";
|
||||
pos2 = empty;
|
||||
}
|
||||
if (strcmp(name, "output-mode") == 0) {
|
||||
if (strcmp(pos2, "html") == 0) {
|
||||
@@ -994,34 +963,34 @@ int smallserver(T_SOC soc, char *url, char *method, char *data, char *path) {
|
||||
}
|
||||
} else if (strcmp(name, "if-file-exists") == 0) {
|
||||
if (strstr(pos2, "..") == NULL) {
|
||||
if (!fexist(fconcat(catbuff, path, pos2))) {
|
||||
if (!fexist(fconcat(catbuff, sizeof(catbuff), path, pos2))) {
|
||||
outputmode = -1;
|
||||
}
|
||||
}
|
||||
} else if (strcmp(name, "if-project-file-exists") == 0) {
|
||||
if (strstr(pos2, "..") == NULL) {
|
||||
if (!fexist
|
||||
(fconcat(catbuff, StringBuff(fspath), pos2))) {
|
||||
(fconcat(catbuff, sizeof(catbuff), StringBuff(fspath), pos2))) {
|
||||
outputmode = -1;
|
||||
}
|
||||
}
|
||||
} else if (strcmp(name, "if-file-do-not-exists") == 0) {
|
||||
if (strstr(pos2, "..") == NULL) {
|
||||
if (fexist(fconcat(catbuff, path, pos2))) {
|
||||
if (fexist(fconcat(catbuff, sizeof(catbuff), path, pos2))) {
|
||||
outputmode = -1;
|
||||
}
|
||||
}
|
||||
} else if (strcmp(name, "if-not-empty") == 0) {
|
||||
intptr_t adr = 0;
|
||||
|
||||
if (!inthash_readptr(NewLangList, pos2, &adr)
|
||||
if (!coucal_readptr(NewLangList, pos2, &adr)
|
||||
|| *((char *) adr) == 0) {
|
||||
outputmode = -1;
|
||||
}
|
||||
} else if (strcmp(name, "if-empty") == 0) {
|
||||
intptr_t adr = 0;
|
||||
|
||||
if (inthash_readptr(NewLangList, pos2, &adr)
|
||||
if (coucal_readptr(NewLangList, pos2, &adr)
|
||||
&& *((char *) adr) != 0) {
|
||||
outputmode = -1;
|
||||
}
|
||||
@@ -1030,7 +999,7 @@ int smallserver(T_SOC soc, char *url, char *method, char *data, char *path) {
|
||||
} else if (strcmp(name, "loadhash") == 0) {
|
||||
intptr_t adr = 0;
|
||||
|
||||
if (inthash_readptr(NewLangList, "path", &adr)) {
|
||||
if (coucal_readptr(NewLangList, "path", &adr)) {
|
||||
char *rpath = (char *) adr;
|
||||
|
||||
//find_handle h;
|
||||
@@ -1043,9 +1012,9 @@ int smallserver(T_SOC soc, char *url, char *method, char *data, char *path) {
|
||||
const char *profiles = hts_getcategories(rpath, 0);
|
||||
const char *categ = hts_getcategories(rpath, 1);
|
||||
|
||||
inthash_write(NewLangList, "winprofile",
|
||||
coucal_write(NewLangList, "winprofile",
|
||||
(intptr_t) profiles);
|
||||
inthash_write(NewLangList, "wincateg",
|
||||
coucal_write(NewLangList, "wincateg",
|
||||
(intptr_t) categ);
|
||||
}
|
||||
}
|
||||
@@ -1057,10 +1026,10 @@ int smallserver(T_SOC soc, char *url, char *method, char *data, char *path) {
|
||||
intptr_t adr = 0;
|
||||
|
||||
*pos3++ = '\0';
|
||||
if (inthash_readptr(NewLangList, pos2, &adr)) {
|
||||
inthash_write(NewLangList, pos3,
|
||||
if (coucal_readptr(NewLangList, pos2, &adr)) {
|
||||
coucal_write(NewLangList, pos3,
|
||||
(intptr_t) strdup((char *) adr));
|
||||
inthash_write(NewLangList, pos2, (intptr_t) NULL);
|
||||
coucal_write(NewLangList, pos2, (intptr_t) NULL);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1070,10 +1039,10 @@ int smallserver(T_SOC soc, char *url, char *method, char *data, char *path) {
|
||||
|
||||
if (pos3) {
|
||||
*pos3++ = '\0';
|
||||
inthash_write(NewLangList, pos2,
|
||||
coucal_write(NewLangList, pos2,
|
||||
(intptr_t) strdup(pos3));
|
||||
} else {
|
||||
inthash_write(NewLangList, pos2, (intptr_t) NULL);
|
||||
coucal_write(NewLangList, pos2, (intptr_t) NULL);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1094,8 +1063,8 @@ int smallserver(T_SOC soc, char *url, char *method, char *data, char *path) {
|
||||
pos2 = strchr(name, ':');
|
||||
if (pos2 != NULL) {
|
||||
*pos2 = '\0';
|
||||
if (inthash_readptr(NewLangList, name, &adr) || ztest) {
|
||||
char *newadr = (char *) adr;
|
||||
if (coucal_readptr(NewLangList, name, &adr) || ztest) {
|
||||
const char *newadr = (char *) adr;
|
||||
|
||||
if (!newadr)
|
||||
newadr = "";
|
||||
@@ -1154,7 +1123,7 @@ int smallserver(T_SOC soc, char *url, char *method, char *data, char *path) {
|
||||
|
||||
dname[0] = '\0';
|
||||
strncatbuff(dname, name, n2);
|
||||
if (inthash_readptr(NewLangList, dname, &adr)) {
|
||||
if (coucal_readptr(NewLangList, dname, &adr)) {
|
||||
int n = 0;
|
||||
|
||||
if (sscanf((char *) adr, "%d", &n) == 1) {
|
||||
@@ -1171,15 +1140,15 @@ int smallserver(T_SOC soc, char *url, char *method, char *data, char *path) {
|
||||
if (langstr == NULL) {
|
||||
if (strfield2(name, "#iso")) {
|
||||
langstr = line2;
|
||||
langstr[0] = '\0';
|
||||
LANG_LIST(path, langstr);
|
||||
line2[0] = '\0';
|
||||
LANG_LIST(path, line2, sizeof(line2));
|
||||
assertf(strlen(langstr) < sizeof(line2) - 2);
|
||||
} else {
|
||||
langstr = LANGSEL(name);
|
||||
if (langstr == NULL || *langstr == '\0') {
|
||||
intptr_t adr = 0;
|
||||
|
||||
if (inthash_readptr(NewLangList, name, &adr)) {
|
||||
if (coucal_readptr(NewLangList, name, &adr)) {
|
||||
char *newadr = (char *) adr;
|
||||
|
||||
langstr = newadr;
|
||||
@@ -1191,7 +1160,7 @@ int smallserver(T_SOC soc, char *url, char *method, char *data, char *path) {
|
||||
switch (format) {
|
||||
case 0:
|
||||
{
|
||||
char *a = langstr;
|
||||
const char *a = langstr;
|
||||
|
||||
while(*a) {
|
||||
if (a[0] == '\\' && isxdigit(a[1])
|
||||
@@ -1237,7 +1206,7 @@ int smallserver(T_SOC soc, char *url, char *method, char *data, char *path) {
|
||||
default:
|
||||
if (*langstr) {
|
||||
int id = 1;
|
||||
char *fstr = langstr;
|
||||
const char *fstr = langstr;
|
||||
|
||||
StringClear(tmpbuff);
|
||||
if (format == 2) {
|
||||
@@ -1442,11 +1411,12 @@ int smallserver(T_SOC soc, char *url, char *method, char *data, char *path) {
|
||||
|
||||
int htslang_init(void) {
|
||||
if (NewLangList == NULL) {
|
||||
NewLangList = inthash_new(0);
|
||||
NewLangList = coucal_new(0);
|
||||
coucal_set_name(NewLangList, "NewLangList");
|
||||
if (NewLangList == NULL) {
|
||||
abortLog("Error in lang.h: not enough memory");
|
||||
} else {
|
||||
inthash_value_is_malloc(NewLangList, 1);
|
||||
coucal_value_is_malloc(NewLangList, 1);
|
||||
}
|
||||
}
|
||||
return 1;
|
||||
@@ -1454,29 +1424,30 @@ int htslang_init(void) {
|
||||
|
||||
int htslang_uninit(void) {
|
||||
if (NewLangList != NULL) {
|
||||
inthash_delete(&NewLangList);
|
||||
coucal_delete(&NewLangList);
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
int smallserver_setkey(char *key, char *value) {
|
||||
return inthash_write(NewLangList, key, (intptr_t) strdup(value));
|
||||
int smallserver_setkey(const char *key, const char *value) {
|
||||
return coucal_write(NewLangList, key, (intptr_t) strdup(value));
|
||||
}
|
||||
int smallserver_setkeyint(char *key, LLint value) {
|
||||
|
||||
int smallserver_setkeyint(const char *key, LLint value) {
|
||||
char tmp[256];
|
||||
|
||||
sprintf(tmp, LLintP, value);
|
||||
return inthash_write(NewLangList, key, (intptr_t) strdup(tmp));
|
||||
snprintf(tmp, sizeof(tmp), LLintP, value);
|
||||
return coucal_write(NewLangList, key, (intptr_t) strdup(tmp));
|
||||
}
|
||||
int smallserver_setkeyarr(char *key, int id, char *key2, char *value) {
|
||||
int smallserver_setkeyarr(const char *key, int id, const char *key2, const char *value) {
|
||||
char tmp[256];
|
||||
|
||||
sprintf(tmp, "%s%d%s", key, id, key2);
|
||||
return inthash_write(NewLangList, tmp, (intptr_t) strdup(value));
|
||||
snprintf(tmp, sizeof(tmp), "%s%d%s", key, id, key2);
|
||||
return coucal_write(NewLangList, tmp, (intptr_t) strdup(value));
|
||||
}
|
||||
|
||||
static int htslang_load(char *limit_to, char *path) {
|
||||
char *hashname;
|
||||
static int htslang_load(char *limit_to, const char *path) {
|
||||
const char *hashname;
|
||||
char catbuff[CATBUFF_SIZE];
|
||||
|
||||
//
|
||||
@@ -1485,20 +1456,22 @@ static int htslang_load(char *limit_to, char *path) {
|
||||
//
|
||||
if (!limit_to) {
|
||||
LANG_DELETE();
|
||||
NewLangStr = inthash_new(0);
|
||||
NewLangStrKeys = inthash_new(0);
|
||||
NewLangStr = coucal_new(0);
|
||||
NewLangStrKeys = coucal_new(0);
|
||||
coucal_set_name(NewLangStr, "NewLangStr");
|
||||
coucal_set_name(NewLangStrKeys, "NewLangStrKeys");
|
||||
if ((NewLangStr == NULL) || (NewLangStrKeys == NULL)) {
|
||||
abortLog("Error in lang.h: not enough memory");
|
||||
} else {
|
||||
inthash_value_is_malloc(NewLangStr, 1);
|
||||
inthash_value_is_malloc(NewLangStrKeys, 1);
|
||||
coucal_value_is_malloc(NewLangStr, 1);
|
||||
coucal_value_is_malloc(NewLangStrKeys, 1);
|
||||
}
|
||||
}
|
||||
|
||||
/* Load master file (list of keys and internal keys) */
|
||||
if (!limit_to) {
|
||||
char *mname = "lang.def";
|
||||
FILE *fp = fopen(fconcat(catbuff, path, mname), "rb");
|
||||
const char *mname = "lang.def";
|
||||
FILE *fp = fopen(fconcat(catbuff, sizeof(catbuff), path, mname), "rb");
|
||||
|
||||
if (fp) {
|
||||
char intkey[8192];
|
||||
@@ -1508,7 +1481,7 @@ static int htslang_load(char *limit_to, char *path) {
|
||||
linput_cpp(fp, intkey, 8000);
|
||||
linput_cpp(fp, key, 8000);
|
||||
if (strnotempty(intkey) && strnotempty(key)) {
|
||||
char *test = LANGINTKEY(key);
|
||||
const char *test = LANGINTKEY(key);
|
||||
|
||||
/* Increment for multiple definitions */
|
||||
if (strnotempty(test)) {
|
||||
@@ -1524,14 +1497,12 @@ static int htslang_load(char *limit_to, char *path) {
|
||||
|
||||
if (!strnotempty(test)) { // éviter doublons
|
||||
// conv_printf(key,key);
|
||||
int len;
|
||||
char *buff;
|
||||
const size_t len = strlen(intkey);
|
||||
char *const buff = (char *) malloc(len + 1);
|
||||
|
||||
len = (int) strlen(intkey);
|
||||
buff = (char *) malloc(len + 2);
|
||||
if (buff) {
|
||||
strcpybuff(buff, intkey);
|
||||
inthash_add(NewLangStrKeys, key, (intptr_t) buff);
|
||||
coucal_add(NewLangStrKeys, key, (intptr_t) buff);
|
||||
}
|
||||
}
|
||||
} // if
|
||||
@@ -1579,7 +1550,7 @@ static int htslang_load(char *limit_to, char *path) {
|
||||
hashname = LANGINTKEY(name);
|
||||
}
|
||||
sprintf(lbasename, "lang/%s.txt", hashname);
|
||||
fp = fopen(fconcat(catbuff, path, lbasename), "rb");
|
||||
fp = fopen(fconcat(catbuff, sizeof(catbuff), path, lbasename), "rb");
|
||||
if (fp) {
|
||||
char extkey[8192];
|
||||
char value[8192];
|
||||
@@ -1588,9 +1559,7 @@ static int htslang_load(char *limit_to, char *path) {
|
||||
linput_cpp(fp, extkey, 8000);
|
||||
linput_cpp(fp, value, 8000);
|
||||
if (strnotempty(extkey) && strnotempty(value)) {
|
||||
int len;
|
||||
char *buff;
|
||||
char *intkey;
|
||||
const char *intkey;
|
||||
|
||||
intkey = LANGINTKEY(extkey);
|
||||
|
||||
@@ -1598,7 +1567,7 @@ static int htslang_load(char *limit_to, char *path) {
|
||||
|
||||
/* Increment for multiple definitions */
|
||||
{
|
||||
char *test = LANGSEL(intkey);
|
||||
const char *test = LANGSEL(intkey);
|
||||
|
||||
if (strnotempty(test)) {
|
||||
if (loops == 0) {
|
||||
@@ -1626,11 +1595,11 @@ static int htslang_load(char *limit_to, char *path) {
|
||||
|
||||
/* Add key */
|
||||
if (strnotempty(intkey)) {
|
||||
len = (int) strlen(value);
|
||||
buff = (char *) malloc(len + 2);
|
||||
const size_t len = strlen(value);
|
||||
char *const buff = (char *) malloc(len + 1);
|
||||
if (buff) {
|
||||
conv_printf(value, buff);
|
||||
inthash_add(NewLangStr, intkey, (intptr_t) buff);
|
||||
coucal_add(NewLangStr, intkey, (intptr_t) buff);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1652,7 +1621,7 @@ static int htslang_load(char *limit_to, char *path) {
|
||||
}
|
||||
|
||||
/* NOTE : also contains the "webhttrack" hack */
|
||||
static void conv_printf(char *from, char *to) {
|
||||
static void conv_printf(const char *from, char *to) {
|
||||
int i = 0, j = 0, len;
|
||||
|
||||
len = (int) strlen(from);
|
||||
@@ -1721,12 +1690,12 @@ static void conv_printf(char *from, char *to) {
|
||||
}
|
||||
|
||||
static void LANG_DELETE(void) {
|
||||
inthash_delete(&NewLangStr);
|
||||
inthash_delete(&NewLangStrKeys);
|
||||
coucal_delete(&NewLangStr);
|
||||
coucal_delete(&NewLangStrKeys);
|
||||
}
|
||||
|
||||
// sélection de la langue
|
||||
static void LANG_INIT(char *path) {
|
||||
static void LANG_INIT(const char *path) {
|
||||
//CWinApp* pApp = AfxGetApp();
|
||||
//if (pApp) {
|
||||
/* pApp->GetProfileInt("Language","IntId",0); */
|
||||
@@ -1734,7 +1703,7 @@ static void LANG_INIT(char *path) {
|
||||
//}
|
||||
}
|
||||
|
||||
static int LANG_T(char *path, int l) {
|
||||
static int LANG_T(const char *path, int l) {
|
||||
if (l >= 0) {
|
||||
QLANG_T(l);
|
||||
htslang_load(NULL, path);
|
||||
@@ -1742,7 +1711,7 @@ static int LANG_T(char *path, int l) {
|
||||
return QLANG_T(-1); // 0=default (english)
|
||||
}
|
||||
|
||||
static int LANG_SEARCH(char *path, char *iso) {
|
||||
static int LANG_SEARCH(const char *path, const char *iso) {
|
||||
char lang_str[1024];
|
||||
int i = 0;
|
||||
int curr_lng = LANG_T(path, -1);
|
||||
@@ -1761,7 +1730,7 @@ static int LANG_SEARCH(char *path, char *iso) {
|
||||
return found;
|
||||
}
|
||||
|
||||
static int LANG_LIST(char *path, char *buffer) {
|
||||
static int LANG_LIST(const char *path, char *buffer, size_t buffer_size) {
|
||||
char lang_str[1024];
|
||||
int i = 0;
|
||||
int curr_lng = LANG_T(path, -1);
|
||||
@@ -1769,12 +1738,12 @@ static int LANG_LIST(char *path, char *buffer) {
|
||||
buffer[0] = '\0';
|
||||
do {
|
||||
QLANG_T(i);
|
||||
strcpybuff(lang_str, "LANGUAGE_NAME");
|
||||
strlcpybuff(lang_str, "LANGUAGE_NAME", buffer_size);
|
||||
htslang_load(lang_str, path);
|
||||
if (strlen(lang_str) > 0) {
|
||||
if (buffer[0])
|
||||
strcatbuff(buffer, "\n");
|
||||
strcatbuff(buffer, lang_str);
|
||||
strlcatbuff(buffer, lang_str, buffer_size);
|
||||
}
|
||||
i++;
|
||||
} while(strlen(lang_str) > 0);
|
||||
@@ -1791,28 +1760,26 @@ static int QLANG_T(int l) {
|
||||
return lng; // 0=default (english)
|
||||
}
|
||||
|
||||
static char *LANGSEL(char *name) {
|
||||
intptr_t adr = 0;
|
||||
|
||||
if (NewLangStr)
|
||||
if (!inthash_read(NewLangStr, name, &adr))
|
||||
adr = 0;
|
||||
if (adr) {
|
||||
return (char *) adr;
|
||||
const char* LANGSEL(const char* name) {
|
||||
coucal_value value;
|
||||
if (NewLangStr != NULL
|
||||
&& coucal_read_value(NewLangStr, name, &value) != 0
|
||||
&& value.ptr != NULL) {
|
||||
return (char*) value.ptr;
|
||||
} else {
|
||||
return "";
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
static char *LANGINTKEY(char *name) {
|
||||
intptr_t adr = 0;
|
||||
|
||||
if (NewLangStrKeys)
|
||||
if (!inthash_read(NewLangStrKeys, name, &adr))
|
||||
adr = 0;
|
||||
if (adr) {
|
||||
return (char *) adr;
|
||||
const char* LANGINTKEY(const char* name) {
|
||||
coucal_value value;
|
||||
if (NewLangStrKeys != NULL
|
||||
&& coucal_read_value(NewLangStrKeys, name, &value) != 0
|
||||
&& value.ptr != NULL) {
|
||||
return (char*) value.ptr;
|
||||
} else {
|
||||
return "";
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
/* *** Various functions *** */
|
||||
@@ -1845,7 +1812,7 @@ static int check_readinput(htsblk * r) {
|
||||
FD_SET(r->soc, &fds);
|
||||
tv.tv_sec = 0;
|
||||
tv.tv_usec = 0;
|
||||
select(r->soc + 1, &fds, NULL, NULL, &tv);
|
||||
select((int) r->soc + 1, &fds, NULL, NULL, &tv);
|
||||
if (FD_ISSET(r->soc, &fds))
|
||||
return 1;
|
||||
else
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/* ------------------------------------------------------------ */
|
||||
/*
|
||||
HTTrack Website Copier, Offline Browser for Windows and Unix
|
||||
Copyright (C) 1998-2013 Xavier Roche and other contributors
|
||||
Copyright (C) 1998-2014 Xavier Roche and other contributors
|
||||
|
||||
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
|
||||
@@ -71,11 +71,11 @@ int smallserver(T_SOC soc, char *url, char *method, char *data, char *path);
|
||||
"\r\n"\
|
||||
|
||||
extern int NewLangStrSz;
|
||||
extern inthash NewLangStr;
|
||||
extern coucal NewLangStr;
|
||||
extern int NewLangStrKeysSz;
|
||||
extern inthash NewLangStrKeys;
|
||||
extern coucal NewLangStrKeys;
|
||||
extern int NewLangListSz;
|
||||
extern inthash NewLangList;
|
||||
extern coucal NewLangList;
|
||||
|
||||
extern httrackp *global_opt;
|
||||
|
||||
@@ -91,16 +91,16 @@ extern httrackp *global_opt;
|
||||
#define min(a,b) ((a)>(b)?(b):(a))
|
||||
#define max(a,b) ((a)>(b)?(a):(b))
|
||||
|
||||
extern int smallserver_setkey(char *key, char *value);
|
||||
extern int smallserver_setkeyint(char *key, LLint value);
|
||||
extern int smallserver_setkeyarr(char *key, int id, char *key2, char *value);
|
||||
extern int smallserver_setkey(const char *key, const char *value);
|
||||
extern int smallserver_setkeyint(const char *key, LLint value);
|
||||
extern int smallserver_setkeyarr(const char *key, int id, const char *key2, const char *value);
|
||||
|
||||
int htslang_init(void);
|
||||
int htslang_uninit(void);
|
||||
|
||||
/* Static definitions */
|
||||
|
||||
HTS_UNUSED static char *gethomedir(void);
|
||||
HTS_UNUSED static const char *gethomedir(void);
|
||||
HTS_UNUSED static int linput_cpp(FILE * fp, char *s, int max);
|
||||
HTS_UNUSED static int linput_trim(FILE * fp, char *s, int max);
|
||||
HTS_UNUSED static int fexist(const char *s);
|
||||
@@ -147,7 +147,7 @@ HTS_UNUSED static int check_readinput_t(T_SOC soc, int timeout) {
|
||||
FD_SET(soc, &fds);
|
||||
tv.tv_sec = timeout;
|
||||
tv.tv_usec = 0;
|
||||
select(soc + 1, &fds, NULL, NULL, &tv);
|
||||
select((int) soc + 1, &fds, NULL, NULL, &tv);
|
||||
if (FD_ISSET(soc, &fds))
|
||||
return 1;
|
||||
else
|
||||
@@ -163,8 +163,8 @@ HTS_UNUSED static int linputsoc_t(T_SOC soc, char *s, int max, int timeout) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
static char *gethomedir(void) {
|
||||
char *home = getenv("HOME");
|
||||
static const char *gethomedir(void) {
|
||||
const char *home = getenv("HOME");
|
||||
|
||||
if (home)
|
||||
return home;
|
||||
@@ -228,7 +228,7 @@ static int linput(FILE * fp, char *s, int max) {
|
||||
}
|
||||
static int linput_trim(FILE * fp, char *s, int max) {
|
||||
int rlen = 0;
|
||||
char *ls = (char *) malloc(max + 2);
|
||||
char *ls = (char *) malloc(max + 1);
|
||||
|
||||
s[0] = '\0';
|
||||
if (ls) {
|
||||
@@ -267,11 +267,11 @@ static int ehexh(char c) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int ehex(char *s) {
|
||||
static int ehex(const char *s) {
|
||||
return 16 * ehexh(*s) + ehexh(*(s + 1));
|
||||
}
|
||||
|
||||
HTS_UNUSED static void unescapehttp(char *s, String * tempo) {
|
||||
HTS_UNUSED static void unescapehttp(const char *s, String * tempo) {
|
||||
size_t i;
|
||||
|
||||
for(i = 0; s[i] != '\0'; i++) {
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/* ------------------------------------------------------------ */
|
||||
/*
|
||||
HTTrack Website Copier, Offline Browser for Windows and Unix
|
||||
Copyright (C) 1998-2013 Xavier Roche and other contributors
|
||||
Copyright (C) 1998-2014 Xavier Roche and other contributors
|
||||
|
||||
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
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/* ------------------------------------------------------------ */
|
||||
/*
|
||||
HTTrack Website Copier, Offline Browser for Windows and Unix
|
||||
Copyright (C) 1998-2013 Xavier Roche and other contributors
|
||||
Copyright (C) 1998-2014 Xavier Roche and other contributors
|
||||
|
||||
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
|
||||
@@ -36,6 +36,7 @@ Please visit our Website: http://www.httrack.com
|
||||
#include "htsglobal.h"
|
||||
#include "htsbase.h"
|
||||
#include "htsthread.h"
|
||||
#include "httrack-library.h"
|
||||
|
||||
#if USE_BEGINTHREAD
|
||||
#ifdef _WIN32
|
||||
@@ -196,7 +197,7 @@ HTSEXT_API void hts_mutexlock(htsmutex * mutex) {
|
||||
}
|
||||
assertf(*mutex != NULL);
|
||||
#ifdef _WIN32
|
||||
assert((*mutex)->handle != NULL);
|
||||
assertf((*mutex)->handle != NULL);
|
||||
WaitForSingleObject((*mutex)->handle, INFINITE);
|
||||
#else
|
||||
pthread_mutex_lock(&(*mutex)->handle);
|
||||
@@ -206,7 +207,7 @@ HTSEXT_API void hts_mutexlock(htsmutex * mutex) {
|
||||
HTSEXT_API void hts_mutexrelease(htsmutex * mutex) {
|
||||
assertf(mutex != NULL && *mutex != NULL);
|
||||
#ifdef _WIN32
|
||||
assert((*mutex)->handle != NULL);
|
||||
assertf((*mutex)->handle != NULL);
|
||||
ReleaseMutex((*mutex)->handle);
|
||||
#else
|
||||
pthread_mutex_unlock(&(*mutex)->handle);
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/* ------------------------------------------------------------ */
|
||||
/*
|
||||
HTTrack Website Copier, Offline Browser for Windows and Unix
|
||||
Copyright (C) 1998-2013 Xavier Roche and other contributors
|
||||
Copyright (C) 1998-2014 Xavier Roche and other contributors
|
||||
|
||||
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
|
||||
@@ -64,9 +64,6 @@ struct htsmutex_s {
|
||||
/* Library internal definictions */
|
||||
HTSEXT_API int hts_newthread(void (*fun) (void *arg), void *arg);
|
||||
|
||||
#ifndef HTTRACK_DEFLIB
|
||||
HTSEXT_API void htsthread_wait(void);
|
||||
#endif
|
||||
HTSEXT_API void htsthread_wait_n(int n_wait);
|
||||
|
||||
/* Locking functions */
|
||||
|
||||
275
src/htstools.c
275
src/htstools.c
@@ -1,7 +1,7 @@
|
||||
/* ------------------------------------------------------------ */
|
||||
/*
|
||||
HTTrack Website Copier, Offline Browser for Windows and Unix
|
||||
Copyright (C) 1998-2013 Xavier Roche and other contributors
|
||||
Copyright (C) 1998-2014 Xavier Roche and other contributors
|
||||
|
||||
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
|
||||
@@ -68,16 +68,16 @@ struct find_handle_struct {
|
||||
char path[2048];
|
||||
};
|
||||
#endif
|
||||
#ifndef HTS_DEF_FWSTRUCT_topindex_chain
|
||||
#define HTS_DEF_FWSTRUCT_topindex_chain
|
||||
typedef struct topindex_chain topindex_chain;
|
||||
#endif
|
||||
struct topindex_chain {
|
||||
int level; /* sort level */
|
||||
char *category; /* category */
|
||||
char name[2048]; /* path */
|
||||
struct topindex_chain *next; /* next element */
|
||||
};
|
||||
//#ifndef HTS_DEF_FWSTRUCT_topindex_chain
|
||||
//#define HTS_DEF_FWSTRUCT_topindex_chain
|
||||
//typedef struct topindex_chain topindex_chain;
|
||||
//#endif
|
||||
//struct topindex_chain {
|
||||
// int level; /* sort level */
|
||||
// char *category; /* category */
|
||||
// char name[2048]; /* path */
|
||||
// struct topindex_chain *next; /* next element */
|
||||
//};
|
||||
|
||||
/* Tools */
|
||||
|
||||
@@ -91,11 +91,11 @@ static int ehexh(char c) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int ehex(char *s) {
|
||||
static int ehex(const char *s) {
|
||||
return 16 * ehexh(*s) + ehexh(*(s + 1));
|
||||
}
|
||||
|
||||
static void unescapehttp(char *s, String * tempo) {
|
||||
static void unescapehttp(const char *s, String * tempo) {
|
||||
size_t i;
|
||||
|
||||
for(i = 0; s[i] != '\0'; i++) {
|
||||
@@ -122,12 +122,15 @@ static void unescapehttp(char *s, String * tempo) {
|
||||
// -1 : erreur
|
||||
// -2 : protocole non supporté (ftp)
|
||||
int ident_url_relatif(const char *lien, const char *origin_adr,
|
||||
const char *origin_fil, char *adr, char *fil) {
|
||||
const char *origin_fil,
|
||||
lien_adrfil* const adrfil) {
|
||||
int ok = 0;
|
||||
int scheme = 0;
|
||||
|
||||
adr[0] = '\0';
|
||||
fil[0] = '\0'; //effacer buffers
|
||||
assertf(adrfil != NULL);
|
||||
|
||||
adrfil->adr[0] = '\0';
|
||||
adrfil->fil[0] = '\0'; //effacer buffers
|
||||
|
||||
// lien non vide!
|
||||
if (strnotempty(lien) == 0)
|
||||
@@ -149,13 +152,13 @@ int ident_url_relatif(const char *lien, const char *origin_adr,
|
||||
|| (strfield(lien, "file://")) // scheme+//
|
||||
|| (strncmp(lien, "//", 2) == 0) // // sans scheme (-> default)
|
||||
) {
|
||||
if (ident_url_absolute(lien, adr, fil) == -1) {
|
||||
if (ident_url_absolute(lien, adrfil) == -1) {
|
||||
ok = -1; // erreur URL
|
||||
}
|
||||
} else if (strfield(lien, "ftp://")) {
|
||||
// Note: ftp:foobar.gif is not valid
|
||||
if (ftp_available()) { // ftp supporté
|
||||
if (ident_url_absolute(lien, adr, fil) == -1) {
|
||||
if (ident_url_absolute(lien, adrfil) == -1) {
|
||||
ok = -1; // erreur URL
|
||||
}
|
||||
} else {
|
||||
@@ -164,7 +167,7 @@ int ident_url_relatif(const char *lien, const char *origin_adr,
|
||||
#if HTS_USEOPENSSL
|
||||
} else if (strfield(lien, "https://")) {
|
||||
// Note: ftp:foobar.gif is not valid
|
||||
if (ident_url_absolute(lien, adr, fil) == -1) {
|
||||
if (ident_url_absolute(lien, adrfil) == -1) {
|
||||
ok = -1; // erreur URL
|
||||
}
|
||||
#endif
|
||||
@@ -191,30 +194,30 @@ int ident_url_relatif(const char *lien, const char *origin_adr,
|
||||
/* patch scheme if necessary */
|
||||
if (strfield(lien, "http:")) {
|
||||
lien += 5;
|
||||
strcpybuff(adr, jump_protocol(origin_adr)); // même adresse ; protocole vide (http)
|
||||
strcpybuff(adrfil->adr, jump_protocol_const(origin_adr)); // même adresse ; protocole vide (http)
|
||||
} else if (strfield(lien, "https:")) {
|
||||
lien += 6;
|
||||
strcpybuff(adr, "https://"); // même adresse forcée en https
|
||||
strcatbuff(adr, jump_protocol(origin_adr));
|
||||
strcpybuff(adrfil->adr, "https://"); // même adresse forcée en https
|
||||
strcatbuff(adrfil->adr, jump_protocol_const(origin_adr));
|
||||
} else if (strfield(lien, "ftp:")) {
|
||||
lien += 4;
|
||||
strcpybuff(adr, "ftp://"); // même adresse forcée en ftp
|
||||
strcatbuff(adr, jump_protocol(origin_adr));
|
||||
strcpybuff(adrfil->adr, "ftp://"); // même adresse forcée en ftp
|
||||
strcatbuff(adrfil->adr, jump_protocol_const(origin_adr));
|
||||
} else {
|
||||
strcpybuff(adr, origin_adr); // même adresse ; et même éventuel protocole
|
||||
strcpybuff(adrfil->adr, origin_adr); // même adresse ; et même éventuel protocole
|
||||
}
|
||||
|
||||
if (*lien != '/') { // sinon c'est un lien absolu
|
||||
if (*lien == '\0') {
|
||||
strcpybuff(fil, origin_fil);
|
||||
strcpybuff(adrfil->fil, origin_fil);
|
||||
} else if (*lien == '?') { // example: a href="?page=2"
|
||||
char *a;
|
||||
|
||||
strcpybuff(fil, origin_fil);
|
||||
a = strchr(fil, '?');
|
||||
strcpybuff(adrfil->fil, origin_fil);
|
||||
a = strchr(adrfil->fil, '?');
|
||||
if (a)
|
||||
*a = '\0';
|
||||
strcatbuff(fil, lien);
|
||||
strcatbuff(adrfil->fil, lien);
|
||||
} else {
|
||||
const char *a = strchr(origin_fil, '?');
|
||||
|
||||
@@ -225,14 +228,14 @@ int ident_url_relatif(const char *lien, const char *origin_adr,
|
||||
if (*a == '/') { // ok on a un '/'
|
||||
if ((((int) (a - origin_fil)) + 1 + strlen(lien)) < HTS_URLMAXSIZE) {
|
||||
// copier chemin
|
||||
strncpy(fil, origin_fil, ((int) (a - origin_fil)) + 1);
|
||||
*(fil + ((int) (a - origin_fil)) + 1) = '\0';
|
||||
strncpy(adrfil->fil, origin_fil, ((int) (a - origin_fil)) + 1);
|
||||
*(adrfil->fil + ((int) (a - origin_fil)) + 1) = '\0';
|
||||
|
||||
// copier chemin relatif
|
||||
if (((int) strlen(fil) + (int) strlen(lien)) < HTS_URLMAXSIZE) {
|
||||
strcatbuff(fil, lien + ((*lien == '/') ? 1 : 0));
|
||||
if (((int) strlen(adrfil->fil) + (int) strlen(lien)) < HTS_URLMAXSIZE) {
|
||||
strcatbuff(adrfil->fil, lien + ((*lien == '/') ? 1 : 0));
|
||||
// simplifier url pour les ../
|
||||
fil_simplifie(fil);
|
||||
fil_simplifie(adrfil->fil);
|
||||
} else
|
||||
ok = -1; // erreur
|
||||
} else { // erreur
|
||||
@@ -244,8 +247,8 @@ int ident_url_relatif(const char *lien, const char *origin_adr,
|
||||
}
|
||||
} else { // chemin absolu
|
||||
// copier chemin directement
|
||||
strcatbuff(fil, lien);
|
||||
fil_simplifie(fil);
|
||||
strcatbuff(adrfil->fil, lien);
|
||||
fil_simplifie(adrfil->fil);
|
||||
} // *lien!='/'
|
||||
} else
|
||||
ok = -1;
|
||||
@@ -254,7 +257,7 @@ int ident_url_relatif(const char *lien, const char *origin_adr,
|
||||
|
||||
// case insensitive pour adresse
|
||||
{
|
||||
char *a = jump_identification(adr);
|
||||
char *a = jump_identification(adrfil->adr);
|
||||
|
||||
while(*a) {
|
||||
if ((*a >= 'A') && (*a <= 'Z'))
|
||||
@@ -264,8 +267,8 @@ int ident_url_relatif(const char *lien, const char *origin_adr,
|
||||
}
|
||||
|
||||
// IDNA / RFC 3492 (Punycode) handling for HTTP(s)
|
||||
if (!link_has_authority(adr) || strfield(adr, "https:")) {
|
||||
char *const a = jump_identification(adr);
|
||||
if (!link_has_authority(adrfil->adr) || strfield(adrfil->adr, "https:")) {
|
||||
char *const a = jump_identification(adrfil->adr);
|
||||
// Non-ASCII characters (theorically forbidden, but browsers are lenient)
|
||||
if (!hts_isStringAscii(a, strlen(a))) {
|
||||
char *const idna = hts_convertStringUTF8ToIDNA(a, strlen(a));
|
||||
@@ -392,7 +395,7 @@ int link_has_authority(const char *lien) {
|
||||
}
|
||||
|
||||
int link_has_authorization(const char *lien) {
|
||||
const char *adr = jump_protocol(lien);
|
||||
const char *adr = jump_protocol_const(lien);
|
||||
const char *firstslash = strchr(adr, '/');
|
||||
const char *detect = strchr(adr, '@');
|
||||
|
||||
@@ -412,14 +415,15 @@ void long_to_83(int mode, char *n83, char *save) {
|
||||
|
||||
while(*save) {
|
||||
char fn83[256], fnl[256];
|
||||
int i = 0;
|
||||
size_t i, j;
|
||||
|
||||
fn83[0] = fnl[0] = '\0';
|
||||
while((save[i]) && (save[i] != '/')) {
|
||||
fnl[i] = save[i];
|
||||
i++;
|
||||
for(i = j = 0 ; save[i] && save[i] != '/' ; i++) {
|
||||
if (j + 1 < sizeof(fnl)) {
|
||||
fnl[j++] = save[i];
|
||||
}
|
||||
}
|
||||
fnl[i] = '\0';
|
||||
fnl[j] = '\0';
|
||||
// conversion
|
||||
longfile_to_83(mode, fn83, fnl);
|
||||
strcatbuff(n83, fn83);
|
||||
@@ -541,11 +545,11 @@ int verif_backblue(httrackp * opt, const char *base) {
|
||||
return 0;
|
||||
}
|
||||
if ((!*done)
|
||||
|| (fsize_utf8(fconcat(OPT_GET_BUFF(opt), base, "backblue.gif")) !=
|
||||
|| (fsize_utf8(fconcat(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), base, "backblue.gif")) !=
|
||||
HTS_DATA_BACK_GIF_LEN)) {
|
||||
FILE *fp =
|
||||
filecreate(&opt->state.strc,
|
||||
fconcat(OPT_GET_BUFF(opt), base, "backblue.gif"));
|
||||
fconcat(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), base, "backblue.gif"));
|
||||
*done = 1;
|
||||
if (fp) {
|
||||
if (fwrite(HTS_DATA_BACK_GIF, HTS_DATA_BACK_GIF_LEN, 1, fp) !=
|
||||
@@ -553,19 +557,19 @@ int verif_backblue(httrackp * opt, const char *base) {
|
||||
ret = 1;
|
||||
fclose(fp);
|
||||
usercommand(opt, 0, NULL,
|
||||
fconcat(OPT_GET_BUFF(opt), base, "backblue.gif"), "", "");
|
||||
fconcat(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), base, "backblue.gif"), "", "");
|
||||
} else
|
||||
ret = 1;
|
||||
//
|
||||
fp =
|
||||
filecreate(&opt->state.strc,
|
||||
fconcat(OPT_GET_BUFF(opt), base, "fade.gif"));
|
||||
fconcat(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), base, "fade.gif"));
|
||||
if (fp) {
|
||||
if (fwrite(HTS_DATA_FADE_GIF, HTS_DATA_FADE_GIF_LEN, 1, fp) !=
|
||||
HTS_DATA_FADE_GIF_LEN)
|
||||
ret = 1;
|
||||
fclose(fp);
|
||||
usercommand(opt, 0, NULL, fconcat(OPT_GET_BUFF(opt), base, "fade.gif"),
|
||||
usercommand(opt, 0, NULL, fconcat(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), base, "fade.gif"),
|
||||
"", "");
|
||||
} else
|
||||
ret = 1;
|
||||
@@ -708,19 +712,18 @@ HTS_INLINE int rech_sampletag(const char *adr, const char *s) {
|
||||
}
|
||||
|
||||
// teste si le tag contenu dans from est égal à "tag"
|
||||
HTS_INLINE int check_tag(char *from, const char *tag) {
|
||||
char *a = from + 1;
|
||||
HTS_INLINE int check_tag(const char *from, const char *tag) {
|
||||
const char *a = from + 1;
|
||||
int i = 0;
|
||||
char s[256];
|
||||
|
||||
while(is_space(*a))
|
||||
a++;
|
||||
while((isalnum((unsigned char) *a) || (*a == '/')) && (i < 250)) {
|
||||
s[i++] = *a;
|
||||
a++;
|
||||
for( ; (isalnum((unsigned char) *a) || (*a == '/')) && i + 1 < sizeof(s) ; i++, a++) {
|
||||
s[i] = *a;
|
||||
}
|
||||
s[i++] = '\0';
|
||||
return (strfield2(s, tag)); // comparer
|
||||
s[i] = '\0';
|
||||
return strfield2(s, tag); // comparer
|
||||
}
|
||||
|
||||
// teste si un fichier dépasse le quota
|
||||
@@ -746,8 +749,8 @@ int istoobig(httrackp * opt, LLint size, LLint maxhtml, LLint maxnhtml,
|
||||
|
||||
static int sortTopIndexFnc(const void *a_, const void *b_) {
|
||||
int cmp;
|
||||
topindex_chain **a = (topindex_chain **) a_;
|
||||
topindex_chain **b = (topindex_chain **) b_;
|
||||
const topindex_chain *const*const a = (const topindex_chain *const*) a_;
|
||||
const topindex_chain *const*const b = (const topindex_chain *const*) b_;
|
||||
|
||||
/* Category first, then name */
|
||||
if ((cmp = (*a)->level - (*b)->level) == 0) {
|
||||
@@ -758,7 +761,117 @@ static int sortTopIndexFnc(const void *a_, const void *b_) {
|
||||
return cmp;
|
||||
}
|
||||
|
||||
HTSEXT_API char *hts_getcategory(const char *filename);
|
||||
typedef struct hts_template_format_buf {
|
||||
FILE *fp;
|
||||
char *buffer;
|
||||
size_t size;
|
||||
size_t offset;
|
||||
} hts_template_format_buf;
|
||||
|
||||
// note: upstream arg list MUST be NULL-terminated for safety
|
||||
// returns a negative value upon error
|
||||
static int hts_template_formatv(hts_template_format_buf *buf,
|
||||
const char *format, va_list args) {
|
||||
#undef FPUTC
|
||||
#undef FPUTS
|
||||
#define FPUTC(C) do { \
|
||||
if (buf->fp != NULL) { \
|
||||
assertf(buf->buffer == NULL); \
|
||||
if (fputc(C, buf->fp) < 0) { \
|
||||
return -1; \
|
||||
} \
|
||||
} else { \
|
||||
assertf(buf->buffer != NULL); \
|
||||
if (buf->offset + 1 < buf->size) { \
|
||||
buf->buffer[buf->offset++] = (C); \
|
||||
} else { \
|
||||
return -1; \
|
||||
} \
|
||||
} \
|
||||
} while(0)
|
||||
#define FPUTS(S) do { \
|
||||
size_t i; \
|
||||
const char *const str_ = (S); \
|
||||
assertf(str_ != NULL); \
|
||||
for(i = 0 ; str_[i] != '\0' ; i++) { \
|
||||
FPUTC(str_[i]); \
|
||||
} \
|
||||
} while(0)
|
||||
|
||||
if (buf != NULL && format != NULL) {
|
||||
const char *arg_expanded[32];
|
||||
size_t i, nbArgs, posArgs;
|
||||
/* Expand internal code args. */
|
||||
const char *str;
|
||||
for(nbArgs = 0 ; ( str = va_arg(args, const char*) ) != NULL ; nbArgs++) {
|
||||
assertf(nbArgs < sizeof(arg_expanded)/sizeof(arg_expanded[0]));
|
||||
arg_expanded[nbArgs] = str;
|
||||
}
|
||||
/* Expand user-injected format string. */
|
||||
for(posArgs = 0, i = 0 ; format[i] != '\0' ; i++) {
|
||||
const unsigned char c = format[i];
|
||||
if (c == '%') {
|
||||
const unsigned char cFormat = format[++i];
|
||||
switch(cFormat) {
|
||||
case '%':
|
||||
FPUTC('%');
|
||||
break;
|
||||
case 's':
|
||||
if (posArgs < nbArgs) {
|
||||
assertf(arg_expanded[posArgs] != NULL);
|
||||
FPUTS(arg_expanded[posArgs]);
|
||||
posArgs++;
|
||||
} else {
|
||||
FPUTS("???"); /* error (args overflow) */
|
||||
}
|
||||
break;
|
||||
default: /* ignored */
|
||||
FPUTC('%');
|
||||
FPUTC(cFormat);
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
FPUTC(c);
|
||||
}
|
||||
}
|
||||
/* Terminating NULL. */
|
||||
if (buf->buffer != NULL) {
|
||||
buf->buffer[buf->offset] = 0;
|
||||
}
|
||||
return 1;
|
||||
} else {
|
||||
return -1;
|
||||
}
|
||||
#undef FPUTC
|
||||
#undef FPUTS
|
||||
}
|
||||
|
||||
// note: upstream arg list MUST be NULL-terminated for safety
|
||||
// returns a negative value upon error
|
||||
int hts_template_format(FILE *const out, const char *format, ...) {
|
||||
int success;
|
||||
hts_template_format_buf buf = { NULL, NULL, 0, 0 };
|
||||
va_list args;
|
||||
buf.fp = out;
|
||||
va_start(args, format);
|
||||
success = hts_template_formatv(&buf, format, args);
|
||||
va_end(args);
|
||||
return success;
|
||||
}
|
||||
|
||||
// note: upstream arg list MUST be NULL-terminated for safety
|
||||
// returns a negative value upon error
|
||||
int hts_template_format_str(char *buffer, size_t size, const char *format, ...) {
|
||||
int success;
|
||||
hts_template_format_buf buf = { NULL, NULL, 0, 0 };
|
||||
va_list args;
|
||||
buf.buffer = buffer;
|
||||
buf.size = size;
|
||||
va_start(args, format);
|
||||
success = hts_template_formatv(&buf, format, args);
|
||||
va_end(args);
|
||||
return success;
|
||||
}
|
||||
|
||||
/* Note: NOT utf-8 */
|
||||
HTSEXT_API int hts_buildtopindex(httrackp * opt, const char *path,
|
||||
@@ -772,16 +885,16 @@ HTSEXT_API int hts_buildtopindex(httrackp * opt, const char *path,
|
||||
|
||||
// et templates html
|
||||
toptemplate_header =
|
||||
readfile_or(fconcat(catbuff, binpath, "templates/topindex-header.html"),
|
||||
readfile_or(fconcat(catbuff, sizeof(catbuff), binpath, "templates/topindex-header.html"),
|
||||
HTS_INDEX_HEADER);
|
||||
toptemplate_body =
|
||||
readfile_or(fconcat(catbuff, binpath, "templates/topindex-body.html"),
|
||||
readfile_or(fconcat(catbuff, sizeof(catbuff), binpath, "templates/topindex-body.html"),
|
||||
HTS_INDEX_BODY);
|
||||
toptemplate_bodycat =
|
||||
readfile_or(fconcat(catbuff, binpath, "templates/topindex-bodycat.html"),
|
||||
readfile_or(fconcat(catbuff, sizeof(catbuff), binpath, "templates/topindex-bodycat.html"),
|
||||
HTS_INDEX_BODYCAT);
|
||||
toptemplate_footer =
|
||||
readfile_or(fconcat(catbuff, binpath, "templates/topindex-footer.html"),
|
||||
readfile_or(fconcat(catbuff, sizeof(catbuff), binpath, "templates/topindex-footer.html"),
|
||||
HTS_INDEX_FOOTER);
|
||||
|
||||
if (toptemplate_header && toptemplate_body && toptemplate_footer
|
||||
@@ -793,15 +906,15 @@ HTSEXT_API int hts_buildtopindex(httrackp * opt, const char *path,
|
||||
rpath[strlen(rpath) - 1] = '\0';
|
||||
}
|
||||
|
||||
fpo = fopen(fconcat(catbuff, rpath, "/index.html"), "wb");
|
||||
fpo = fopen(fconcat(catbuff, sizeof(catbuff), rpath, "/index.html"), "wb");
|
||||
if (fpo) {
|
||||
find_handle h;
|
||||
|
||||
verif_backblue(opt, concat(catbuff, rpath, "/")); // générer gif
|
||||
verif_backblue(opt, concat(catbuff, sizeof(catbuff), rpath, "/")); // générer gif
|
||||
// Header
|
||||
fprintf(fpo, toptemplate_header,
|
||||
hts_template_format(fpo, toptemplate_header,
|
||||
"<!-- Mirror and index made by HTTrack Website Copier/"
|
||||
HTTRACK_VERSION " " HTTRACK_AFF_AUTHORS " -->");
|
||||
HTTRACK_VERSION " " HTTRACK_AFF_AUTHORS " -->", /* EOF */ NULL);
|
||||
|
||||
/* Find valid project names */
|
||||
h = hts_findfirst(rpath);
|
||||
@@ -870,7 +983,7 @@ HTSEXT_API int hts_buildtopindex(httrackp * opt, const char *path,
|
||||
assertf(sortedElts != NULL);
|
||||
if (sortedElts != NULL) {
|
||||
int i;
|
||||
char *category = "";
|
||||
const char *category = "";
|
||||
|
||||
/* Build array */
|
||||
struct topindex_chain *chain = startchain;
|
||||
@@ -887,15 +1000,14 @@ HTSEXT_API int hts_buildtopindex(httrackp * opt, const char *path,
|
||||
for(i = 0; i < chainSize; i++) {
|
||||
char BIGSTK hname[HTS_URLMAXSIZE * 2];
|
||||
|
||||
strcpybuff(hname, sortedElts[i]->name);
|
||||
escape_uri_utf(hname);
|
||||
escape_uri_utf(sortedElts[i]->name, hname, sizeof(hname));
|
||||
|
||||
/* Changed category */
|
||||
if (strcmp(category, sortedElts[i]->category) != 0) {
|
||||
category = sortedElts[i]->category;
|
||||
fprintf(fpo, toptemplate_bodycat, category);
|
||||
hts_template_format(fpo, toptemplate_bodycat, category, /* EOF */ NULL);
|
||||
}
|
||||
fprintf(fpo, toptemplate_body, hname, sortedElts[i]->name);
|
||||
hts_template_format(fpo, toptemplate_body, hname, sortedElts[i]->name, /* EOF */ NULL);
|
||||
}
|
||||
|
||||
/* Wipe elements */
|
||||
@@ -913,9 +1025,9 @@ HTSEXT_API int hts_buildtopindex(httrackp * opt, const char *path,
|
||||
|
||||
}
|
||||
// Footer
|
||||
fprintf(fpo, toptemplate_footer,
|
||||
hts_template_format(fpo, toptemplate_footer,
|
||||
"<!-- Mirror and index made by HTTrack Website Copier/"
|
||||
HTTRACK_VERSION " " HTTRACK_AFF_AUTHORS " -->");
|
||||
HTTRACK_VERSION " " HTTRACK_AFF_AUTHORS " -->", /* EOF */ NULL);
|
||||
|
||||
fclose(fpo);
|
||||
|
||||
@@ -968,7 +1080,7 @@ HTSEXT_API char *hts_getcategories(char *path, int type) {
|
||||
String profiles = STRING_EMPTY;
|
||||
char *rpath = path;
|
||||
find_handle h;
|
||||
inthash hashCateg = NULL;
|
||||
coucal hashCateg = NULL;
|
||||
|
||||
if (rpath[0]) {
|
||||
if (rpath[strlen(rpath) - 1] == '/') {
|
||||
@@ -980,7 +1092,8 @@ HTSEXT_API char *hts_getcategories(char *path, int type) {
|
||||
String iname = STRING_EMPTY;
|
||||
|
||||
if (type == 1) {
|
||||
hashCateg = inthash_new(0);
|
||||
hashCateg = coucal_new(0);
|
||||
coucal_set_name(hashCateg, "hashCateg");
|
||||
StringCat(categ, "Test category 1");
|
||||
StringCat(categ, "\r\nTest category 2");
|
||||
}
|
||||
@@ -1005,8 +1118,8 @@ HTSEXT_API char *hts_getcategories(char *path, int type) {
|
||||
if (n > 0) {
|
||||
if (strfield(line2, "category=")) {
|
||||
if (*(line2 + 9)) {
|
||||
if (!inthash_read(hashCateg, line2 + 9, NULL)) {
|
||||
inthash_write(hashCateg, line2 + 9, 0);
|
||||
if (!coucal_read(hashCateg, line2 + 9, NULL)) {
|
||||
coucal_write(hashCateg, line2 + 9, 0);
|
||||
if (StringLength(categ) > 0) {
|
||||
StringCat(categ, "\r\n");
|
||||
}
|
||||
@@ -1034,7 +1147,7 @@ HTSEXT_API char *hts_getcategories(char *path, int type) {
|
||||
StringFree(iname);
|
||||
}
|
||||
if (hashCateg) {
|
||||
inthash_delete(&hashCateg);
|
||||
coucal_delete(&hashCateg);
|
||||
hashCateg = NULL;
|
||||
}
|
||||
if (type == 1)
|
||||
@@ -1111,7 +1224,7 @@ HTSEXT_API int hts_findnext(find_handle find) {
|
||||
if ((find->dirp = readdir(find->hdir)))
|
||||
if (find->dirp->d_name)
|
||||
if (!STAT
|
||||
(concat(catbuff, find->path, find->dirp->d_name), &find->filestat))
|
||||
(concat(catbuff, sizeof(catbuff), find->path, find->dirp->d_name), &find->filestat))
|
||||
return 1;
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/* ------------------------------------------------------------ */
|
||||
/*
|
||||
HTTrack Website Copier, Offline Browser for Windows and Unix
|
||||
Copyright (C) 1998-2013 Xavier Roche and other contributors
|
||||
Copyright (C) 1998-2014 Xavier Roche and other contributors
|
||||
|
||||
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
|
||||
@@ -47,11 +47,20 @@ typedef struct httrackp httrackp;
|
||||
typedef struct find_handle_struct find_handle_struct;
|
||||
typedef find_handle_struct *find_handle;
|
||||
#endif
|
||||
#ifndef HTS_DEF_FWSTRUCT_lien_adrfil
|
||||
#define HTS_DEF_FWSTRUCT_lien_adrfil
|
||||
typedef struct lien_adrfil lien_adrfil;
|
||||
#endif
|
||||
#ifndef HTS_DEF_FWSTRUCT_lien_adrfilsave
|
||||
#define HTS_DEF_FWSTRUCT_lien_adrfilsave
|
||||
typedef struct lien_adrfilsave lien_adrfilsave;
|
||||
#endif
|
||||
|
||||
/* Library internal definictions */
|
||||
#ifdef HTS_INTERNAL_BYTECODE
|
||||
int ident_url_relatif(const char *lien, const char *urladr, const char *urlfil,
|
||||
char *adr, char *fil);
|
||||
int ident_url_relatif(const char *lien, const char *origin_adr,
|
||||
const char *origin_fil,
|
||||
lien_adrfil* const adrfil);
|
||||
int lienrelatif(char *s, const char *link, const char *curr);
|
||||
int link_has_authority(const char *lien);
|
||||
int link_has_authorization(const char *lien);
|
||||
@@ -61,6 +70,9 @@ HTS_INLINE int __rech_tageq(const char *adr, const char *s);
|
||||
HTS_INLINE int __rech_tageqbegdigits(const char *adr, const char *s);
|
||||
HTS_INLINE int rech_tageq_all(const char *adr, const char *s);
|
||||
|
||||
int hts_template_format(FILE *const out, const char *format, ...);
|
||||
int hts_template_format_str(char *buffer, size_t size, const char *format, ...);
|
||||
|
||||
#define rech_tageq(adr,s) \
|
||||
( \
|
||||
( (*((adr)-1)=='<') || (is_space(*((adr)-1))) ) ? \
|
||||
@@ -84,7 +96,7 @@ HTS_INLINE int rech_tageq_all(const char *adr, const char *s);
|
||||
//HTS_INLINE int rech_tageq(const char* adr,const char* s);
|
||||
HTS_INLINE int rech_sampletag(const char *adr, const char *s);
|
||||
HTS_INLINE int rech_endtoken(const char *adr, const char **start);
|
||||
HTS_INLINE int check_tag(char *from, const char *tag);
|
||||
HTS_INLINE int check_tag(const char *from, const char *tag);
|
||||
int verif_backblue(httrackp * opt, const char *base);
|
||||
int verif_external(httrackp * opt, int nb, int test);
|
||||
|
||||
@@ -106,11 +118,6 @@ HTSEXT_API int hts_findisdir(find_handle find);
|
||||
HTSEXT_API int hts_findisfile(find_handle find);
|
||||
HTSEXT_API int hts_findissystem(find_handle find);
|
||||
|
||||
#ifndef HTTRACK_DEFLIB
|
||||
HTSEXT_API char *hts_getcategory(const char *filename);
|
||||
HTSEXT_API char *hts_getcategories(char *path, int type);
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
16
src/htsweb.c
16
src/htsweb.c
@@ -1,7 +1,7 @@
|
||||
/* ------------------------------------------------------------ */
|
||||
/*
|
||||
HTTrack Website Copier, Offline Browser for Windows and Unix
|
||||
Copyright (C) 1998-2013 Xavier Roche and other contributors
|
||||
Copyright (C) 1998-2014 Xavier Roche and other contributors
|
||||
|
||||
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
|
||||
@@ -58,10 +58,9 @@ Please visit our Website: http://www.httrack.com
|
||||
#include "htsthread.h"
|
||||
|
||||
/* External modules */
|
||||
#include "htsinthash.c"
|
||||
#include "coucal.c"
|
||||
#include "htsmd5.c"
|
||||
#include "md5.c"
|
||||
#undef HTS_PRINTF_FUN
|
||||
|
||||
#include "htsserver.h"
|
||||
#include "htsweb.h"
|
||||
@@ -179,6 +178,14 @@ int main(int argc, char *argv[]) {
|
||||
}
|
||||
smallserver_setkey("HTTRACK_WEB", HTTRACK_WEB);
|
||||
|
||||
/* Check version compatibility */
|
||||
if (hts_sizeof_opt() != sizeof(httrackp)) {
|
||||
fprintf(stderr,
|
||||
"** CRITICAL: incompatible current httrack library version %s, expected version %s",
|
||||
hts_version(), HTTRACK_VERSIONID);
|
||||
smallserver_setkey("HTTRACK_INCOMPATIBLE_VERSIONID", hts_version());
|
||||
}
|
||||
|
||||
/* protected session-id */
|
||||
{
|
||||
char buff[1024];
|
||||
@@ -239,7 +246,7 @@ static void back_launch_cmd(void *pP) {
|
||||
commandReturnCmdl = strdup(cmd);
|
||||
|
||||
/* split */
|
||||
argv[0] = "webhttrack";
|
||||
argv[0] = strdup("webhttrack");
|
||||
argv[1] = cmd;
|
||||
argc++;
|
||||
i = 0;
|
||||
@@ -265,6 +272,7 @@ static void back_launch_cmd(void *pP) {
|
||||
/* init */
|
||||
hts_init();
|
||||
global_opt = opt = hts_create_opt();
|
||||
assert(opt->size_httrackp == sizeof(httrackp));
|
||||
|
||||
/* run */
|
||||
commandReturn = webhttrack_runmain(opt, argc, argv);
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/* ------------------------------------------------------------ */
|
||||
/*
|
||||
HTTrack Website Copier, Offline Browser for Windows and Unix
|
||||
Copyright (C) 1998-2013 Xavier Roche and other contributors
|
||||
Copyright (C) 1998-2014 Xavier Roche and other contributors
|
||||
|
||||
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
|
||||
|
||||
138
src/htswizard.c
138
src/htswizard.c
@@ -1,7 +1,7 @@
|
||||
/* ------------------------------------------------------------ */
|
||||
/*
|
||||
HTTrack Website Copier, Offline Browser for Windows and Unix
|
||||
Copyright (C) 1998-2013 Xavier Roche and other contributors
|
||||
Copyright (C) 1998-2014 Xavier Roche and other contributors
|
||||
|
||||
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
|
||||
@@ -42,10 +42,6 @@ Please visit our Website: http://www.httrack.com
|
||||
#include <ctype.h>
|
||||
/* END specific definitions */
|
||||
|
||||
// pour alléger la syntaxe, des raccourcis sont créés
|
||||
#define urladr (liens[ptr]->adr)
|
||||
#define urlfil (liens[ptr]->fil)
|
||||
|
||||
// libérer filters[0] pour insérer un élément dans filters[0]
|
||||
#define HT_INSERT_FILTERS0 do {\
|
||||
int i;\
|
||||
@@ -60,8 +56,8 @@ Please visit our Website: http://www.httrack.com
|
||||
} while(0)
|
||||
|
||||
typedef struct htspair_t {
|
||||
char *tag;
|
||||
char *attr;
|
||||
const char *tag;
|
||||
const char *attr;
|
||||
} htspair_t;
|
||||
|
||||
/* "embedded" */
|
||||
@@ -79,9 +75,9 @@ htspair_t hts_detect_embed[] = {
|
||||
};
|
||||
|
||||
/* Internal */
|
||||
static int hts_acceptlink_(httrackp * opt, int ptr, int lien_tot,
|
||||
lien_url ** liens, char *adr, char *fil, char *tag,
|
||||
char *attribute, int *set_prio_to,
|
||||
static int hts_acceptlink_(httrackp * opt, int ptr, const char *adr,
|
||||
const char *fil, const char *tag,
|
||||
const char *attribute, int *set_prio_to,
|
||||
int *just_test_it);
|
||||
|
||||
/*
|
||||
@@ -104,10 +100,11 @@ retour:
|
||||
-1 pas d'avis
|
||||
*/
|
||||
|
||||
int hts_acceptlink(httrackp * opt, int ptr, int lien_tot, lien_url ** liens,
|
||||
char *adr, char *fil, char *tag, char *attribute,
|
||||
int hts_acceptlink(httrackp * opt, int ptr,
|
||||
const char *adr, const char *fil,
|
||||
const char *tag, const char *attribute,
|
||||
int *set_prio_to, int *just_test_it) {
|
||||
int forbidden_url = hts_acceptlink_(opt, ptr, lien_tot, liens,
|
||||
int forbidden_url = hts_acceptlink_(opt, ptr,
|
||||
adr, fil, tag, attribute, set_prio_to,
|
||||
just_test_it);
|
||||
int prev_prio = set_prio_to ? *set_prio_to : 0;
|
||||
@@ -133,9 +130,9 @@ static int cmp_token(const char *tag, const char *cmp) {
|
||||
&& !isalnum((unsigned char) tag[p]));
|
||||
}
|
||||
|
||||
static int hts_acceptlink_(httrackp * opt, int ptr, int lien_tot,
|
||||
lien_url ** liens, char *adr, char *fil, char *tag,
|
||||
char *attribute, int *set_prio_to,
|
||||
static int hts_acceptlink_(httrackp * opt, int ptr,
|
||||
const char *adr, const char *fil, const char *tag,
|
||||
const char *attribute, int *set_prio_to,
|
||||
int *just_test_it) {
|
||||
int forbidden_url = -1;
|
||||
int meme_adresse;
|
||||
@@ -187,8 +184,8 @@ static int hts_acceptlink_(httrackp * opt, int ptr, int lien_tot,
|
||||
|
||||
/* Niveau 1: ne pas parser suivant! */
|
||||
if (ptr > 0) {
|
||||
if ((liens[ptr]->depth <= 0)
|
||||
|| (liens[ptr]->depth <= 1 && !embedded_triggered)) {
|
||||
if ((heap(ptr)->depth <= 0)
|
||||
|| (heap(ptr)->depth <= 1 && !embedded_triggered)) {
|
||||
forbidden_url = 1; // interdire récupération du lien
|
||||
hts_log_print(opt, LOG_DEBUG,
|
||||
"file from too far level ignored at %s : %s", adr, fil);
|
||||
@@ -203,11 +200,11 @@ static int hts_acceptlink_(httrackp * opt, int ptr, int lien_tot,
|
||||
|
||||
// ------------------------------------------------------
|
||||
// doit-on traiter ce lien?.. vérifier droits de déplacement
|
||||
meme_adresse = strfield2(adr, urladr);
|
||||
meme_adresse = strfield2(adr, urladr());
|
||||
if (meme_adresse)
|
||||
hts_log_print(opt, LOG_DEBUG, "Compare addresses: %s=%s", adr, urladr);
|
||||
hts_log_print(opt, LOG_DEBUG, "Compare addresses: %s=%s", adr, urladr());
|
||||
else
|
||||
hts_log_print(opt, LOG_DEBUG, "Compare addresses: %s!=%s", adr, urladr);
|
||||
hts_log_print(opt, LOG_DEBUG, "Compare addresses: %s!=%s", adr, urladr());
|
||||
if (meme_adresse) { // même adresse
|
||||
{ // tester interdiction de descendre
|
||||
// MODIFIE : en cas de remontée puis de redescente, il se pouvait qu'on ne puisse pas atteindre certains fichiers
|
||||
@@ -220,15 +217,15 @@ static int hts_acceptlink_(httrackp * opt, int ptr, int lien_tot,
|
||||
// note (up/down): on calcule à partir du lien primaire, ET du lien précédent.
|
||||
// ex: si on descend 2 fois on peut remonter 1 fois
|
||||
|
||||
if (lienrelatif(tempo, fil, liens[liens[ptr]->premier]->fil) == 0) {
|
||||
if (lienrelatif(tempo2, fil, liens[ptr]->fil) == 0) {
|
||||
if (lienrelatif(tempo, fil, heap(heap(ptr)->premier)->fil) == 0) {
|
||||
if (lienrelatif(tempo2, fil, heap(ptr)->fil) == 0) {
|
||||
hts_log_print(opt, LOG_DEBUG,
|
||||
"build relative links to test: %s %s (with %s and %s)",
|
||||
tempo, tempo2, liens[liens[ptr]->premier]->fil,
|
||||
liens[ptr]->fil);
|
||||
tempo, tempo2, heap(heap(ptr)->premier)->fil,
|
||||
heap(ptr)->fil);
|
||||
|
||||
// si vient de primary, ne pas tester lienrelatif avec (car host "différent")
|
||||
/*if (liens[liens[ptr]->premier] == 0) { // vient de primary
|
||||
/*if (heap(heap(ptr)->premier) == 0) { // vient de primary
|
||||
}
|
||||
*/
|
||||
|
||||
@@ -242,7 +239,7 @@ static int hts_acceptlink_(httrackp * opt, int ptr, int lien_tot,
|
||||
|| (tempo2[0] != '\0' && tempo2[1] != '\0'
|
||||
&& strchr(tempo2 + 1, '/') == 0)
|
||||
) {
|
||||
if (!liens[ptr]->link_import) { // ne résulte pas d'un 'moved'
|
||||
if (!heap(ptr)->link_import) { // ne résulte pas d'un 'moved'
|
||||
forbidden_url = 0;
|
||||
hts_log_print(opt, LOG_DEBUG, "same level link authorized: %s%s",
|
||||
adr, fil);
|
||||
@@ -267,7 +264,7 @@ static int hts_acceptlink_(httrackp * opt, int ptr, int lien_tot,
|
||||
hts_log_print(opt, LOG_DEBUG, "lower link canceled: %s%s", adr,
|
||||
fil);
|
||||
} else { // autorisé à priori - NEW
|
||||
if (!liens[ptr]->link_import) { // ne résulte pas d'un 'moved'
|
||||
if (!heap(ptr)->link_import) { // ne résulte pas d'un 'moved'
|
||||
forbidden_url = 0;
|
||||
hts_log_print(opt, LOG_DEBUG, "lower link authorized: %s%s",
|
||||
adr, fil);
|
||||
@@ -275,7 +272,7 @@ static int hts_acceptlink_(httrackp * opt, int ptr, int lien_tot,
|
||||
}
|
||||
} else if ((test1) || (test2)) { // on peut descendre pour accéder au lien
|
||||
if ((opt->seeker & 1) != 0) { // on peut descendre - NEW
|
||||
if (!liens[ptr]->link_import) { // ne résulte pas d'un 'moved'
|
||||
if (!heap(ptr)->link_import) { // ne résulte pas d'un 'moved'
|
||||
forbidden_url = 0;
|
||||
hts_log_print(opt, LOG_DEBUG, "lower link authorized: %s%s",
|
||||
adr, fil);
|
||||
@@ -291,7 +288,7 @@ static int hts_acceptlink_(httrackp * opt, int ptr, int lien_tot,
|
||||
hts_log_print(opt, LOG_DEBUG, "upper link canceled: %s%s", adr,
|
||||
fil);
|
||||
} else { // autorisé à monter - NEW
|
||||
if (!liens[ptr]->link_import) { // ne résulte pas d'un 'moved'
|
||||
if (!heap(ptr)->link_import) { // ne résulte pas d'un 'moved'
|
||||
forbidden_url = 0;
|
||||
hts_log_print(opt, LOG_DEBUG, "upper link authorized: %s%s",
|
||||
adr, fil);
|
||||
@@ -299,7 +296,7 @@ static int hts_acceptlink_(httrackp * opt, int ptr, int lien_tot,
|
||||
}
|
||||
} else if ((!strncmp(tempo, "../", 3)) || (!strncmp(tempo2, "../", 3))) { // Possible en montant
|
||||
if ((opt->seeker & 2) != 0) { // autorisé à monter - NEW
|
||||
if (!liens[ptr]->link_import) { // ne résulte pas d'un 'moved'
|
||||
if (!heap(ptr)->link_import) { // ne résulte pas d'un 'moved'
|
||||
forbidden_url = 0;
|
||||
hts_log_print(opt, LOG_DEBUG, "upper link authorized: %s%s",
|
||||
adr, fil);
|
||||
@@ -310,11 +307,11 @@ static int hts_acceptlink_(httrackp * opt, int ptr, int lien_tot,
|
||||
} else {
|
||||
hts_log_print(opt, LOG_ERROR,
|
||||
"Error building relative link %s and %s", fil,
|
||||
liens[ptr]->fil);
|
||||
heap(ptr)->fil);
|
||||
}
|
||||
} else {
|
||||
hts_log_print(opt, LOG_ERROR, "Error building relative link %s and %s",
|
||||
fil, liens[liens[ptr]->premier]->fil);
|
||||
fil, heap(heap(ptr)->premier)->fil);
|
||||
}
|
||||
|
||||
} // tester interdiction de descendre?
|
||||
@@ -323,16 +320,16 @@ static int hts_acceptlink_(httrackp * opt, int ptr, int lien_tot,
|
||||
char BIGSTK tempo[HTS_URLMAXSIZE * 2];
|
||||
char BIGSTK tempo2[HTS_URLMAXSIZE * 2];
|
||||
|
||||
if (lienrelatif(tempo, fil, liens[liens[ptr]->premier]->fil) == 0) {
|
||||
if (lienrelatif(tempo2, fil, liens[ptr]->fil) == 0) {
|
||||
if (lienrelatif(tempo, fil, heap(heap(ptr)->premier)->fil) == 0) {
|
||||
if (lienrelatif(tempo2, fil, heap(ptr)->fil) == 0) {
|
||||
} else {
|
||||
hts_log_print(opt, LOG_ERROR,
|
||||
"Error building relative link %s and %s", fil,
|
||||
liens[ptr]->fil);
|
||||
heap(ptr)->fil);
|
||||
}
|
||||
} else {
|
||||
hts_log_print(opt, LOG_ERROR, "Error building relative link %s and %s",
|
||||
fil, liens[liens[ptr]->premier]->fil);
|
||||
fil, heap(heap(ptr)->premier)->fil);
|
||||
|
||||
}
|
||||
} // fin tester interdiction de monter
|
||||
@@ -348,24 +345,24 @@ static int hts_acceptlink_(httrackp * opt, int ptr, int lien_tot,
|
||||
break; // interdicton de sortir au dela de l'adresse
|
||||
case 1:{ // sortie sur le même dom.xxx
|
||||
size_t i = strlen(adr) - 1;
|
||||
size_t j = strlen(urladr) - 1;
|
||||
size_t j = strlen(urladr()) - 1;
|
||||
|
||||
if ((i > 0) && (j > 0)) {
|
||||
while((i > 0) && (adr[i] != '.'))
|
||||
i--;
|
||||
while((j > 0) && (urladr[j] != '.'))
|
||||
while((j > 0) && (urladr()[j] != '.'))
|
||||
j--;
|
||||
if ((i > 0) && (j > 0)) {
|
||||
i--;
|
||||
j--;
|
||||
while((i > 0) && (adr[i] != '.'))
|
||||
i--;
|
||||
while((j > 0) && (urladr[j] != '.'))
|
||||
while((j > 0) && (urladr()[j] != '.'))
|
||||
j--;
|
||||
}
|
||||
}
|
||||
if ((i > 0) && (j > 0)) {
|
||||
if (!strfield2(adr + i, urladr + j)) { // !=
|
||||
if (!strfield2(adr + i, urladr() + j)) { // !=
|
||||
if (!opt->wizard) { // mode non wizard
|
||||
//printf("refused: %s\n",adr);
|
||||
forbidden_url = 1; // pas même domaine
|
||||
@@ -387,14 +384,14 @@ static int hts_acceptlink_(httrackp * opt, int ptr, int lien_tot,
|
||||
break;
|
||||
case 2:{ // sortie sur le même .xxx
|
||||
size_t i = strlen(adr) - 1;
|
||||
size_t j = strlen(urladr) - 1;
|
||||
size_t j = strlen(urladr()) - 1;
|
||||
|
||||
while((i > 0) && (adr[i] != '.'))
|
||||
i--;
|
||||
while((j > 0) && (urladr[j] != '.'))
|
||||
while((j > 0) && (urladr()[j] != '.'))
|
||||
j--;
|
||||
if ((i > 0) && (j > 0)) {
|
||||
if (!strfield2(adr + i, urladr + j)) { // !-
|
||||
if (!strfield2(adr + i, urladr() + j)) { // !-
|
||||
if (!opt->wizard) { // mode non wizard
|
||||
//printf("refused: %s\n",adr);
|
||||
forbidden_url = 1; // pas même .xx
|
||||
@@ -462,7 +459,7 @@ static int hts_acceptlink_(httrackp * opt, int ptr, int lien_tot,
|
||||
question = 0; // pas de question, résolu
|
||||
|
||||
// former URL complète du lien actuel
|
||||
strcpybuff(l, jump_identification(adr));
|
||||
strcpybuff(l, jump_identification_const(adr));
|
||||
if (*fil != '/')
|
||||
strcatbuff(l, "/");
|
||||
strcatbuff(l, fil);
|
||||
@@ -493,7 +490,7 @@ static int hts_acceptlink_(httrackp * opt, int ptr, int lien_tot,
|
||||
// there is no way yet to tag "external" links, and therefore links that are
|
||||
// "weak" (authorized depth < external depth) are just not considered for external
|
||||
// hack
|
||||
if (liens[ptr]->depth > opt->extdepth) {
|
||||
if (heap(ptr)->depth > opt->extdepth) {
|
||||
// *set_prio_to = opt->extdepth + 1;
|
||||
*set_prio_to = 1 + (opt->extdepth);
|
||||
may_set_prio_to = 0; // clear may-set flag
|
||||
@@ -502,11 +499,11 @@ static int hts_acceptlink_(httrackp * opt, int ptr, int lien_tot,
|
||||
if (question) {
|
||||
hts_log_print(opt, LOG_DEBUG,
|
||||
"(wizard) ambiguous link accepted (external depth): link %s at %s%s",
|
||||
l, urladr, urlfil);
|
||||
l, urladr(), urlfil());
|
||||
} else {
|
||||
hts_log_print(opt, LOG_DEBUG,
|
||||
"(wizard) forced to accept link (external depth): link %s at %s%s",
|
||||
l, urladr, urlfil);
|
||||
l, urladr(), urlfil());
|
||||
}
|
||||
|
||||
}
|
||||
@@ -515,7 +512,7 @@ static int hts_acceptlink_(httrackp * opt, int ptr, int lien_tot,
|
||||
// filters
|
||||
{
|
||||
int jok;
|
||||
char *mdepth = "";
|
||||
const char *mdepth = "";
|
||||
|
||||
// filters, 0=sait pas 1=ok -1=interdit
|
||||
{
|
||||
@@ -550,14 +547,14 @@ static int hts_acceptlink_(httrackp * opt, int ptr, int lien_tot,
|
||||
may_set_prio_to = 0; // clear may-set flag
|
||||
hts_log_print(opt, LOG_DEBUG,
|
||||
"(wizard) explicit authorized (%s) link: link %s at %s%s",
|
||||
mdepth, l, urladr, urlfil);
|
||||
mdepth, l, urladr(), urlfil());
|
||||
} else if (jok == -1) { // forbidden
|
||||
filters_answer = 1; // décision prise par les filtres
|
||||
question = 0; // ne pas poser de question:
|
||||
forbidden_url = 1; // URL interdite
|
||||
hts_log_print(opt, LOG_DEBUG,
|
||||
"(wizard) explicit forbidden (%s) link: link %s at %s%s",
|
||||
mdepth, l, urladr, urlfil);
|
||||
mdepth, l, urladr(), urlfil());
|
||||
} // sinon on touche à rien
|
||||
}
|
||||
}
|
||||
@@ -565,14 +562,14 @@ static int hts_acceptlink_(httrackp * opt, int ptr, int lien_tot,
|
||||
// vérifier mode mirror links
|
||||
if (question) {
|
||||
if (opt->mirror_first_page) { // mode mirror links
|
||||
if (liens[ptr]->precedent == 0) { // parent=primary!
|
||||
if (heap(ptr)->precedent == 0) { // parent=primary!
|
||||
forbidden_url = 0; // autorisé
|
||||
may_set_prio_to = 0; // clear may-set flag
|
||||
question = 1; // résolution auto
|
||||
force_mirror = 5; // mirror (5)
|
||||
hts_log_print(opt, LOG_DEBUG,
|
||||
"(wizard) explicit mirror link: link %s at %s%s", l,
|
||||
urladr, urlfil);
|
||||
urladr(), urlfil());
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -584,7 +581,7 @@ static int hts_acceptlink_(httrackp * opt, int ptr, int lien_tot,
|
||||
forbidden_url = 1;
|
||||
hts_log_print(opt, LOG_DEBUG,
|
||||
"(wizard) ambiguous forbidden link: link %s at %s%s", l,
|
||||
urladr, urlfil);
|
||||
urladr(), urlfil());
|
||||
}
|
||||
}
|
||||
// vérifier robots.txt
|
||||
@@ -619,14 +616,14 @@ static int hts_acceptlink_(httrackp * opt, int ptr, int lien_tot,
|
||||
if (!forbidden_url) {
|
||||
hts_log_print(opt, LOG_DEBUG,
|
||||
"(wizard) shared foreign domain link: link %s at %s%s", l,
|
||||
urladr, urlfil);
|
||||
urladr(), urlfil());
|
||||
} else {
|
||||
hts_log_print(opt, LOG_DEBUG,
|
||||
"(wizard) cancelled foreign domain link: link %s at %s%s",
|
||||
l, urladr, urlfil);
|
||||
l, urladr(), urlfil());
|
||||
}
|
||||
#if BDEBUG==3
|
||||
printf("at %s in %s, wizard says: url %s ", urladr, urlfil, l);
|
||||
printf("at %s in %s, wizard says: url %s ", urladr(), urlfil(), l);
|
||||
if (forbidden_url)
|
||||
printf("cancelled");
|
||||
else
|
||||
@@ -714,7 +711,7 @@ static int hts_acceptlink_(httrackp * opt, int ptr, int lien_tot,
|
||||
forbidden_url = 1;
|
||||
HT_INSERT_FILTERS0; // insérer en 0
|
||||
strcpybuff(_FILTERS[0], "-");
|
||||
strcatbuff(_FILTERS[0], jump_identification(adr));
|
||||
strcatbuff(_FILTERS[0], jump_identification_const(adr));
|
||||
if (*fil != '/')
|
||||
strcatbuff(_FILTERS[0], "/");
|
||||
strcatbuff(_FILTERS[0], fil);
|
||||
@@ -730,7 +727,7 @@ static int hts_acceptlink_(httrackp * opt, int ptr, int lien_tot,
|
||||
if (fil[i] == '/') {
|
||||
HT_INSERT_FILTERS0; // insérer en 0
|
||||
strcpybuff(_FILTERS[0], "-");
|
||||
strcatbuff(_FILTERS[0], jump_identification(adr));
|
||||
strcatbuff(_FILTERS[0], jump_identification_const(adr));
|
||||
if (*fil != '/')
|
||||
strcatbuff(_FILTERS[0], "/");
|
||||
strncatbuff(_FILTERS[0], fil, i);
|
||||
@@ -747,7 +744,7 @@ static int hts_acceptlink_(httrackp * opt, int ptr, int lien_tot,
|
||||
forbidden_url = 1;
|
||||
HT_INSERT_FILTERS0; // insérer en 0
|
||||
strcpybuff(_FILTERS[0], "-");
|
||||
strcatbuff(_FILTERS[0], jump_identification(adr));
|
||||
strcatbuff(_FILTERS[0], jump_identification_const(adr));
|
||||
strcatbuff(_FILTERS[0], "*");
|
||||
break;
|
||||
|
||||
@@ -789,7 +786,7 @@ static int hts_acceptlink_(httrackp * opt, int ptr, int lien_tot,
|
||||
if (fil[i] == '/') {
|
||||
HT_INSERT_FILTERS0; // insérer en 0
|
||||
strcpybuff(_FILTERS[0], "+");
|
||||
strcatbuff(_FILTERS[0], jump_identification(adr));
|
||||
strcatbuff(_FILTERS[0], jump_identification_const(adr));
|
||||
if (*fil != '/')
|
||||
strcatbuff(_FILTERS[0], "/");
|
||||
strncatbuff(_FILTERS[0], fil, i + 1);
|
||||
@@ -798,7 +795,7 @@ static int hts_acceptlink_(httrackp * opt, int ptr, int lien_tot,
|
||||
} else { // autoriser domaine alors!!
|
||||
HT_INSERT_FILTERS0; // insérer en 0 strcpybuff(filters[filptr],"+");
|
||||
strcpybuff(_FILTERS[0], "+");
|
||||
strcatbuff(_FILTERS[0], jump_identification(adr));
|
||||
strcatbuff(_FILTERS[0], jump_identification_const(adr));
|
||||
strcatbuff(_FILTERS[0], "*");
|
||||
}
|
||||
break;
|
||||
@@ -806,7 +803,7 @@ static int hts_acceptlink_(httrackp * opt, int ptr, int lien_tot,
|
||||
case 6: // same domain
|
||||
HT_INSERT_FILTERS0; // insérer en 0 strcpybuff(filters[filptr],"+");
|
||||
strcpybuff(_FILTERS[0], "+");
|
||||
strcatbuff(_FILTERS[0], jump_identification(adr));
|
||||
strcatbuff(_FILTERS[0], jump_identification_const(adr));
|
||||
strcatbuff(_FILTERS[0], "*");
|
||||
break;
|
||||
//
|
||||
@@ -819,7 +816,7 @@ static int hts_acceptlink_(httrackp * opt, int ptr, int lien_tot,
|
||||
if (fil[i] == '/') {
|
||||
HT_INSERT_FILTERS0; // insérer en 0
|
||||
strcpybuff(_FILTERS[0], "+");
|
||||
strcatbuff(_FILTERS[0], jump_identification(adr));
|
||||
strcatbuff(_FILTERS[0], jump_identification_const(adr));
|
||||
if (*fil != '/')
|
||||
strcatbuff(_FILTERS[0], "/");
|
||||
strncatbuff(_FILTERS[0], fil, i + 1);
|
||||
@@ -863,13 +860,13 @@ static int hts_acceptlink_(httrackp * opt, int ptr, int lien_tot,
|
||||
#undef _ROBOTS
|
||||
}
|
||||
|
||||
int hts_acceptmime(httrackp * opt, int ptr, int lien_tot, lien_url ** liens,
|
||||
char *adr, char *fil, char *mime) {
|
||||
int hts_acceptmime(httrackp * opt, int ptr,
|
||||
const char *adr, const char *fil, const char *mime) {
|
||||
#define _FILTERS (*opt->filters.filters)
|
||||
#define _FILTERS_PTR (opt->filters.filptr)
|
||||
#define _ROBOTS ((robots_wizard*)opt->robotsptr)
|
||||
int forbidden_url = -1;
|
||||
char *mdepth = "";
|
||||
const char *mdepth = "";
|
||||
int jokDepth = 0;
|
||||
int jok = 0;
|
||||
|
||||
@@ -906,7 +903,7 @@ int hts_acceptmime(httrackp * opt, int ptr, int lien_tot, lien_url ** liens,
|
||||
}
|
||||
|
||||
// tester taille
|
||||
int hts_testlinksize(httrackp * opt, char *adr, char *fil, LLint size) {
|
||||
int hts_testlinksize(httrackp * opt, const char *adr, const char *fil, LLint size) {
|
||||
int jok = 0;
|
||||
|
||||
if (size >= 0) {
|
||||
@@ -918,7 +915,7 @@ int hts_testlinksize(httrackp * opt, char *adr, char *fil, LLint size) {
|
||||
int size_flag = 0;
|
||||
|
||||
// former URL complète du lien actuel
|
||||
strcpybuff(l, jump_identification(adr));
|
||||
strcpybuff(l, jump_identification_const(adr));
|
||||
if (*fil != '/')
|
||||
strcatbuff(l, "/");
|
||||
strcatbuff(l, fil);
|
||||
@@ -984,7 +981,4 @@ int hts_testlinksize(httrackp * opt, char *adr, char *fil, LLint size) {
|
||||
return jok;
|
||||
}
|
||||
|
||||
#undef urladr
|
||||
#undef urlfil
|
||||
|
||||
#undef HT_INSERT_FILTERS0
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/* ------------------------------------------------------------ */
|
||||
/*
|
||||
HTTrack Website Copier, Offline Browser for Windows and Unix
|
||||
Copyright (C) 1998-2013 Xavier Roche and other contributors
|
||||
Copyright (C) 1998-2014 Xavier Roche and other contributors
|
||||
|
||||
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
|
||||
@@ -49,12 +49,13 @@ typedef struct httrackp httrackp;
|
||||
typedef struct lien_url lien_url;
|
||||
#endif
|
||||
|
||||
int hts_acceptlink(httrackp * opt, int ptr, int lien_tot, lien_url ** liens,
|
||||
char *adr, char *fil, char *tag, char *attribute,
|
||||
int hts_acceptlink(httrackp * opt, int ptr,
|
||||
const char *adr, const char *fil,
|
||||
const char *tag, const char *attribute,
|
||||
int *set_prio_to_0, int *just_test_it);
|
||||
int hts_testlinksize(httrackp * opt, char *adr, char *fil, LLint size);
|
||||
int hts_acceptmime(httrackp * opt, int ptr, int lien_tot, lien_url ** liens,
|
||||
char *adr, char *fil, char *mime);
|
||||
int hts_testlinksize(httrackp * opt, const char *adr, const char *fil, LLint size);
|
||||
int hts_acceptmime(httrackp * opt, int ptr,
|
||||
const char *adr, const char *fil, const char *mime);
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/* ------------------------------------------------------------ */
|
||||
/*
|
||||
HTTrack Website Copier, Offline Browser for Windows and Unix
|
||||
Copyright (C) 1998-2013 Xavier Roche and other contributors
|
||||
Copyright (C) 1998-2014 Xavier Roche and other contributors
|
||||
|
||||
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
|
||||
@@ -36,7 +36,7 @@ Please visit our Website: http://www.httrack.com
|
||||
|
||||
#include "htswrap.h"
|
||||
#include "htshash.h"
|
||||
#include "htsinthash.h"
|
||||
#include "coucal.h"
|
||||
#include "htslib.h"
|
||||
|
||||
HTSEXT_API int htswrap_init(void) { // LEGACY
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/* ------------------------------------------------------------ */
|
||||
/*
|
||||
HTTrack Website Copier, Offline Browser for Windows and Unix
|
||||
Copyright (C) 1998-2013 Xavier Roche and other contributors
|
||||
Copyright (C) 1998-2014 Xavier Roche and other contributors
|
||||
|
||||
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
|
||||
@@ -38,7 +38,7 @@ Please visit our Website: http://www.httrack.com
|
||||
#ifdef HTS_INTERNAL_BYTECODE
|
||||
|
||||
#include "htsglobal.h"
|
||||
#include "htsinthash.h"
|
||||
#include "coucal.h"
|
||||
|
||||
/* Forward definitions */
|
||||
#ifndef HTS_DEF_FWSTRUCT_httrackp
|
||||
@@ -46,11 +46,19 @@ Please visit our Website: http://www.httrack.com
|
||||
typedef struct httrackp httrackp;
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
HTSEXT_API int htswrap_init(void); // LEGACY
|
||||
HTSEXT_API int htswrap_free(void); // LEGACY
|
||||
|
||||
HTSEXT_API int htswrap_add(httrackp * opt, const char *name, void *fct);
|
||||
HTSEXT_API uintptr_t htswrap_read(httrackp * opt, const char *name);
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
//HTSEXT_API int htswrap_add(httrackp * opt, const char *name, void *fct);
|
||||
//HTSEXT_API uintptr_t htswrap_read(httrackp * opt, const char *name);
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/* ------------------------------------------------------------ */
|
||||
/*
|
||||
HTTrack Website Copier, Offline Browser for Windows and Unix
|
||||
Copyright (C) 1998-2013 Xavier Roche and other contributors
|
||||
Copyright (C) 1998-2014 Xavier Roche and other contributors
|
||||
|
||||
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
|
||||
@@ -57,13 +57,14 @@ int hts_zunpack(char *filename, char *newfile) {
|
||||
if (filename != NULL && newfile != NULL) {
|
||||
if (filename[0] && newfile[0]) {
|
||||
char catbuff[CATBUFF_SIZE];
|
||||
FILE *const in = FOPEN(fconv(catbuff, filename), "rb");
|
||||
FILE *const in = FOPEN(fconv(catbuff, sizeof(catbuff), filename), "rb");
|
||||
const int fd = in != NULL ? fileno(in) : -1;
|
||||
const int dup_fd = fd != -1 ? dup(fd) : -1;
|
||||
// Note: we must dup to be able to flose cleanly.
|
||||
gzFile gz = fd != -1 ? gzdopen(dup(fd), "rb") : NULL;
|
||||
const gzFile gz = dup_fd != -1 ? gzdopen(dup_fd, "rb") : NULL;
|
||||
|
||||
if (gz) {
|
||||
FILE *const fpout = FOPEN(fconv(catbuff, newfile), "wb");
|
||||
FILE *const fpout = FOPEN(fconv(catbuff, sizeof(catbuff), newfile), "wb");
|
||||
int size = 0;
|
||||
|
||||
if (fpout) {
|
||||
@@ -95,8 +96,8 @@ int hts_zunpack(char *filename, char *newfile) {
|
||||
|
||||
int hts_extract_meta(const char *path) {
|
||||
char catbuff[CATBUFF_SIZE];
|
||||
unzFile zFile = unzOpen(fconcat(catbuff, path, "hts-cache/new.zip"));
|
||||
zipFile zFileOut = zipOpen(fconcat(catbuff, path, "hts-cache/meta.zip"), 0);
|
||||
unzFile zFile = unzOpen(fconcat(catbuff, sizeof(catbuff), path, "hts-cache/new.zip"));
|
||||
zipFile zFileOut = zipOpen(fconcat(catbuff, sizeof(catbuff), path, "hts-cache/meta.zip"), 0);
|
||||
|
||||
if (zFile != NULL && zFileOut != NULL) {
|
||||
if (unzGoToFirstFile(zFile) == Z_OK) {
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/* ------------------------------------------------------------ */
|
||||
/*
|
||||
HTTrack Website Copier, Offline Browser for Windows and Unix
|
||||
Copyright (C) 1998-2013 Xavier Roche and other contributors
|
||||
Copyright (C) 1998-2014 Xavier Roche and other contributors
|
||||
|
||||
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
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
/* ------------------------------------------------------------ */
|
||||
/*
|
||||
HTTrack Website Copier, Offline Browser for Windows and Unix
|
||||
Copyright (C) 1998-2013 Xavier Roche and other contributors
|
||||
Copyright (C) 1998-2014 Xavier Roche and other contributors
|
||||
|
||||
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
|
||||
as published by the Free Software Foundation; either version 2
|
||||
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,
|
||||
@@ -33,8 +33,17 @@ Please visit our Website: http://www.httrack.com
|
||||
#ifndef HTTRACK_DEFLIB
|
||||
#define HTTRACK_DEFLIB
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#include "htsglobal.h"
|
||||
|
||||
#ifndef _WIN32
|
||||
#include <inttypes.h>
|
||||
#endif
|
||||
#include <stdarg.h>
|
||||
|
||||
#ifndef HTS_DEF_FWSTRUCT_httrackp
|
||||
#define HTS_DEF_FWSTRUCT_httrackp
|
||||
typedef struct httrackp httrackp;
|
||||
@@ -61,6 +70,12 @@ typedef enum hts_log_type {
|
||||
typedef struct hts_stat_struct hts_stat_struct;
|
||||
#endif
|
||||
|
||||
/** Assert error callback. **/
|
||||
#ifndef HTS_DEF_FWSTRUCT_htsErrorCallback
|
||||
#define HTS_DEF_FWSTRUCT_htsErrorCallback
|
||||
typedef void (*htsErrorCallback) (const char *msg, const char *file, int line);
|
||||
#endif
|
||||
|
||||
/* Helpers for plugging callbacks
|
||||
requires: htsdefines.h */
|
||||
|
||||
@@ -103,14 +118,23 @@ HTSEXT_API int hts_main2(int argc, char **argv, httrackp * opt);
|
||||
/* Options handling */
|
||||
HTSEXT_API httrackp *hts_create_opt(void);
|
||||
HTSEXT_API void hts_free_opt(httrackp * opt);
|
||||
HTSEXT_API void set_wrappers(httrackp * opt); // DEPRECATED - DUMMY FUNCTION
|
||||
HTSEXT_API size_t hts_sizeof_opt(void);
|
||||
HTSEXT_API const hts_stat_struct* hts_get_stats(httrackp * opt);
|
||||
HTSEXT_API void set_wrappers(httrackp * opt); /* LEGACY */
|
||||
HTSEXT_API int plug_wrapper(httrackp * opt, const char *moduleName,
|
||||
const char *argv);
|
||||
HTSEXT_API void hts_set_error_callback(htsErrorCallback handler);
|
||||
HTSEXT_API htsErrorCallback hts_get_error_callback(void);
|
||||
|
||||
/* Logging */
|
||||
HTSEXT_API int hts_log(httrackp * opt, const char *prefix, const char *msg);
|
||||
HTSEXT_API void hts_log_print(httrackp * opt, int type, const char *format,
|
||||
...);
|
||||
...) HTS_PRINTF_FUN(3, 4);
|
||||
HTSEXT_API void hts_log_vprint(httrackp * opt, int type, const char *format,
|
||||
va_list args);
|
||||
HTSEXT_API void hts_set_log_vprint_callback(void (*callback)(httrackp * opt,
|
||||
int type,
|
||||
const char *format, va_list args));
|
||||
|
||||
/* Infos */
|
||||
HTSEXT_API const char *hts_get_version_info(httrackp * opt);
|
||||
@@ -122,22 +146,22 @@ HTSEXT_API const hts_stat_struct* hts_get_stats(httrackp * opt);
|
||||
HTSEXT_API int htswrap_init(void); // DEPRECATED - DUMMY FUNCTION
|
||||
HTSEXT_API int htswrap_free(void); // DEPRECATED - DUMMY FUNCTION
|
||||
HTSEXT_API int htswrap_add(httrackp * opt, const char *name, void *fct);
|
||||
HTSEXT_API unsigned long int htswrap_read(httrackp * opt, const char *name);
|
||||
HTSEXT_API uintptr_t htswrap_read(httrackp * opt, const char *name);
|
||||
HTSEXT_API int htswrap_set_userdef(httrackp * opt, void *userdef);
|
||||
HTSEXT_API void *htswrap_get_userdef(httrackp * opt);
|
||||
|
||||
/* Internal library allocators, if a different libc is being used by the client */
|
||||
HTSEXT_API char *hts_strdup(const char *string);
|
||||
HTSEXT_API void *hts_malloc(size_t size);
|
||||
HTSEXT_API void *hts_realloc(void *data, size_t size);
|
||||
HTSEXT_API void *hts_realloc(void *const data, const size_t size);
|
||||
HTSEXT_API void hts_free(void *data);
|
||||
|
||||
/* Other functions */
|
||||
HTSEXT_API int hts_resetvar(void); // DEPRECATED - DUMMY FUNCTION
|
||||
HTSEXT_API int hts_buildtopindex(httrackp * opt, const char *path,
|
||||
const char *binpath);
|
||||
HTSEXT_API const char *hts_getcategories(const char *path, int type);
|
||||
HTSEXT_API const char *hts_getcategory(const char *filename);
|
||||
HTSEXT_API char *hts_getcategories(char *path, int type);
|
||||
HTSEXT_API char *hts_getcategory(const char *filename);
|
||||
|
||||
/* Catch-URL */
|
||||
HTSEXT_API T_SOC catch_url_init_std(int *port_prox, char *adr_prox);
|
||||
@@ -150,60 +174,89 @@ HTSEXT_API int hts_is_testing(httrackp * opt);
|
||||
HTSEXT_API int hts_is_exiting(httrackp * opt);
|
||||
|
||||
/*HTSEXT_API int hts_setopt(httrackp* opt); DEPRECATED ; see copy_htsopt() */
|
||||
|
||||
HTSEXT_API int hts_addurl(httrackp * opt, char **url);
|
||||
HTSEXT_API int hts_resetaddurl(httrackp * opt);
|
||||
HTSEXT_API int copy_htsopt(httrackp * from, httrackp * to);
|
||||
HTSEXT_API int copy_htsopt(const httrackp * from, httrackp * to);
|
||||
HTSEXT_API char *hts_errmsg(httrackp * opt);
|
||||
HTSEXT_API int hts_setpause(httrackp * opt, int); // pause transfer
|
||||
HTSEXT_API int hts_setpause(httrackp * opt, int);
|
||||
HTSEXT_API int hts_request_stop(httrackp * opt, int force);
|
||||
HTSEXT_API int hts_cancel_file_push(httrackp * opt, const char *url);
|
||||
HTSEXT_API void hts_cancel_test(httrackp * opt);
|
||||
HTSEXT_API void hts_cancel_parsing(httrackp * opt);
|
||||
HTSEXT_API void hts_cancel_test(httrackp * opt);
|
||||
HTSEXT_API void hts_cancel_parsing(httrackp * opt);
|
||||
HTSEXT_API int hts_has_stopped(httrackp * opt);
|
||||
|
||||
/* Tools */
|
||||
HTSEXT_API int structcheck(const char *path);
|
||||
HTSEXT_API int structcheck_utf8(const char *path);
|
||||
HTSEXT_API int dir_exists(const char *path);
|
||||
HTSEXT_API void infostatuscode(char *msg, int statuscode);
|
||||
HTSEXT_API HTS_INLINE TStamp mtime_local(void);
|
||||
HTSEXT_API TStamp mtime_local(void);
|
||||
HTSEXT_API void qsec2str(char *st, TStamp t);
|
||||
HTSEXT_API char *int2char(strc_int2bytes2 * strc, int n);
|
||||
HTSEXT_API char *int2bytes(strc_int2bytes2 * strc, LLint n);
|
||||
HTSEXT_API char *int2bytessec(strc_int2bytes2 * strc, long int n);
|
||||
HTSEXT_API char **int2bytes2(strc_int2bytes2 * strc, LLint n);
|
||||
HTSEXT_API char *jump_identification(char *);
|
||||
HTSEXT_API const char *jump_identification_const(const char *);
|
||||
HTSEXT_API char *jump_normalized(char *);
|
||||
HTSEXT_API const char *jump_normalized_const(const char *);
|
||||
HTSEXT_API char *jump_toport(char *);
|
||||
HTSEXT_API char *fil_normalized(char *source, char *dest);
|
||||
HTSEXT_API char *adr_normalized(char *source, char *dest);
|
||||
HTSEXT_API char *hts_rootdir(char *file);
|
||||
HTSEXT_API const char *jump_toport_const(const char *);
|
||||
HTSEXT_API char *fil_normalized(const char *source, char *dest);
|
||||
HTSEXT_API char *adr_normalized(const char *source, char *dest);
|
||||
HTSEXT_API const char *hts_rootdir(char *file);
|
||||
|
||||
/* Escaping URLs */
|
||||
HTSEXT_API void unescape_amp(char *s);
|
||||
HTSEXT_API void escape_spc_url(char *s);
|
||||
HTSEXT_API void escape_in_url(char *s);
|
||||
HTSEXT_API void escape_uri(char *s);
|
||||
HTSEXT_API void escape_uri_utf(char *s);
|
||||
HTSEXT_API void escape_check_url(char *s);
|
||||
HTSEXT_API char *escape_check_url_addr(char *s);
|
||||
HTSEXT_API void x_escape_http(char *s, int mode);
|
||||
HTSEXT_API char *unescape_http(char *catbuff, const char *s);
|
||||
HTSEXT_API char *unescape_http_unharm(char *catbuff, const char *s,
|
||||
int no_high);
|
||||
|
||||
HTSEXT_API size_t escape_spc_url(const char *const src, char *const dest, const size_t size);
|
||||
HTSEXT_API size_t escape_in_url(const char *const src, char *const dest, const size_t size);
|
||||
HTSEXT_API size_t escape_uri(const char *const src, char *const dest, const size_t size);
|
||||
HTSEXT_API size_t escape_uri_utf(const char *const src, char *const dest, const size_t size);
|
||||
HTSEXT_API size_t escape_check_url(const char *const src, char *const dest, const size_t size);
|
||||
|
||||
HTSEXT_API size_t append_escape_spc_url(const char *const src, char *const dest, const size_t size);
|
||||
HTSEXT_API size_t append_escape_in_url(const char *const src, char *const dest, const size_t size);
|
||||
HTSEXT_API size_t append_escape_uri(const char *const src, char *const dest, const size_t size);
|
||||
HTSEXT_API size_t append_escape_uri_utf(const char *const src, char *const dest, const size_t size);
|
||||
HTSEXT_API size_t append_escape_check_url(const char *const src, char *const dest, const size_t size);
|
||||
|
||||
HTSEXT_API size_t inplace_escape_spc_url(char *const dest, const size_t size);
|
||||
HTSEXT_API size_t inplace_escape_in_url(char *const dest, const size_t size);
|
||||
HTSEXT_API size_t inplace_escape_uri(char *const dest, const size_t size);
|
||||
HTSEXT_API size_t inplace_escape_uri_utf(char *const dest, const size_t size);
|
||||
HTSEXT_API size_t inplace_escape_check_url(char *const dest, const size_t size);
|
||||
|
||||
HTSEXT_API char *escape_check_url_addr(const char *const src, char *const dest, const size_t size);
|
||||
HTSEXT_API size_t make_content_id(const char *const adr, const char *const fil, char *const dest, const size_t size);
|
||||
|
||||
HTSEXT_API size_t x_escape_http(const char *const s, char *const dest, const size_t max_size, const int mode);
|
||||
HTSEXT_API void escape_remove_control(char *const s);
|
||||
HTSEXT_API size_t escape_for_html_print(const char *const s, char *const dest, const size_t size);
|
||||
HTSEXT_API size_t escape_for_html_print_full(const char *const s, char *const dest, const size_t size);
|
||||
|
||||
HTSEXT_API char *unescape_http(char *const catbuff, const size_t size, const char *const s);
|
||||
HTSEXT_API char *unescape_http_unharm(char *const catbuff, const size_t size, const char *s, const int no_high);
|
||||
HTSEXT_API char *antislash_unescaped(char *catbuff, const char *s);
|
||||
|
||||
HTSEXT_API void escape_remove_control(char *s);
|
||||
HTSEXT_API void get_httptype(httrackp * opt, char *s, const char *fil,
|
||||
int flag);
|
||||
HTSEXT_API int is_knowntype(httrackp * opt, const char *fil);
|
||||
HTSEXT_API int is_userknowntype(httrackp * opt, const char *fil);
|
||||
HTSEXT_API int is_dyntype(const char *fil);
|
||||
HTSEXT_API char *get_ext(char *catbuff, const char *fil);
|
||||
HTSEXT_API const char *get_ext(char *catbuff, size_t size, const char *fil);
|
||||
HTSEXT_API int may_unknown(httrackp * opt, const char *st);
|
||||
HTSEXT_API void guess_httptype(httrackp * opt, char *s, const char *fil);
|
||||
|
||||
/* Ugly string tools */
|
||||
HTSEXT_API char *concat(char *catbuff, const char *a, const char *b);
|
||||
HTSEXT_API char *fconcat(char *catbuff, const char *a, const char *b);
|
||||
HTSEXT_API char *fconv(char *catbuff, const char *a);
|
||||
HTSEXT_API char *concat(char *catbuff, size_t size, const char *a, const char *b);
|
||||
HTSEXT_API char *fconcat(char *catbuff, size_t size, const char *a, const char *b);
|
||||
HTSEXT_API char *fconv(char *catbuff, size_t size, const char *a);
|
||||
HTSEXT_API char *fslash(char *catbuff, size_t size, const char *a);
|
||||
|
||||
/* Debugging */
|
||||
HTSEXT_API void hts_debug(int level);
|
||||
@@ -273,4 +326,23 @@ typedef struct utimbuf STRUCT_UTIMBUF;
|
||||
#define HTS_DEF_FILEAPI
|
||||
#endif
|
||||
|
||||
/** Macro aimed to break at build-time if a size is not a sizeof() strictly
|
||||
* greater than sizeof(char*). **/
|
||||
#undef COMPILE_TIME_CHECK_SIZE
|
||||
#define COMPILE_TIME_CHECK_SIZE(A) (void) ((void (*)(char[A - sizeof(char*) - 1])) NULL)
|
||||
|
||||
/** Macro aimed to break at compile-time if a size is not a sizeof() strictly
|
||||
* greater than sizeof(char*). **/
|
||||
#undef RUNTIME_TIME_CHECK_SIZE
|
||||
#define RUNTIME_TIME_CHECK_SIZE(A) assertf((A) != sizeof(void*))
|
||||
|
||||
#define fconv(A,B,C) (COMPILE_TIME_CHECK_SIZE(B), fconv(A,B,C))
|
||||
#define concat(A,B,C,D) (COMPILE_TIME_CHECK_SIZE(B), concat(A,B,C,D))
|
||||
#define fconcat(A,B,C,D) (COMPILE_TIME_CHECK_SIZE(B), fconcat(A,B,C,D))
|
||||
#define fslash(A,B,C) (COMPILE_TIME_CHECK_SIZE(B), fslash(A,B,C))
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/* ------------------------------------------------------------ */
|
||||
/*
|
||||
HTTrack Website Copier, Offline Browser for Windows and Unix
|
||||
Copyright (C) 1998-2013 Xavier Roche and other contributors
|
||||
Copyright (C) 1998-2014 Xavier Roche and other contributors
|
||||
|
||||
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
|
||||
@@ -223,7 +223,17 @@ int main(int argc, char **argv) {
|
||||
|
||||
signal_handlers();
|
||||
hts_init();
|
||||
|
||||
// Check version compatibility
|
||||
if (hts_sizeof_opt() != sizeof(httrackp)) {
|
||||
fprintf(stderr,
|
||||
"incompatible current httrack library version %s, expected version %s",
|
||||
hts_version(), HTTRACK_VERSIONID);
|
||||
abortLog("incompatible httrack library version, please update both httrack and its library");
|
||||
}
|
||||
|
||||
opt = global_opt = hts_create_opt();
|
||||
assert(opt->size_httrackp == sizeof(httrackp));
|
||||
|
||||
CHAIN_FUNCTION(opt, init, htsshow_init, NULL);
|
||||
CHAIN_FUNCTION(opt, uninit, htsshow_uninit, NULL);
|
||||
|
||||
161
src/httrack.h
161
src/httrack.h
@@ -1,7 +1,7 @@
|
||||
/* ------------------------------------------------------------ */
|
||||
/*
|
||||
HTTrack Website Copier, Offline Browser for Windows and Unix
|
||||
Copyright (C) 1998-2013 Xavier Roche and other contributors
|
||||
Copyright (C) 1998-2014 Xavier Roche and other contributors
|
||||
|
||||
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
|
||||
@@ -35,6 +35,7 @@ Please visit our Website: http://www.httrack.com
|
||||
|
||||
#include "htsglobal.h"
|
||||
#include "htscore.h"
|
||||
#include "htssafe.h"
|
||||
|
||||
#ifndef HTS_DEF_FWSTRUCT_t_StatsBuffer
|
||||
#define HTS_DEF_FWSTRUCT_t_StatsBuffer
|
||||
@@ -83,164 +84,6 @@ struct t_InpInfo {
|
||||
int main(int argc, char **argv);
|
||||
#endif
|
||||
|
||||
/* */
|
||||
|
||||
// Engine internal variables
|
||||
typedef void (*htsErrorCallback) (char *msg, char *file, int line);
|
||||
extern HTSEXT_API htsErrorCallback htsCallbackErr;
|
||||
extern HTSEXT_API int htsMemoryFastXfr;
|
||||
|
||||
/* */
|
||||
extern HTSEXT_API hts_stat_struct HTS_STAT;
|
||||
extern int _DEBUG_HEAD;
|
||||
extern FILE *ioinfo;
|
||||
|
||||
// from htsbase.h
|
||||
|
||||
/* protected strcat, strncat and strcpy - definitely useful */
|
||||
#define strcatbuff(A, B) do { \
|
||||
assertf( (A) != NULL ); \
|
||||
assertf( (B) != NULL ); \
|
||||
if (htsMemoryFastXfr) { \
|
||||
if (sizeof(A) != sizeof(char*)) { \
|
||||
(A)[sizeof(A) - 1] = '\0'; \
|
||||
} \
|
||||
strcat(A, B); \
|
||||
if (sizeof(A) != sizeof(char*)) { \
|
||||
assertf((A)[sizeof(A) - 1] == '\0'); \
|
||||
} \
|
||||
} else { \
|
||||
unsigned int sz = (unsigned int) strlen(A); \
|
||||
unsigned int szf = (unsigned int) strlen(B); \
|
||||
if (sizeof(A) != sizeof(char*)) { \
|
||||
assertf(sz + szf + 1 < sizeof(A)); \
|
||||
if (szf > 0) { \
|
||||
if (sz + szf + 1 < sizeof(A)) { \
|
||||
memcpy((A) + sz, (B), szf + 1); \
|
||||
} \
|
||||
} \
|
||||
} else if (szf > 0) { \
|
||||
memcpybuff((A) + sz, (B), szf + 1); \
|
||||
} \
|
||||
} \
|
||||
} while(0)
|
||||
#define strncatbuff(A, B, N) do { \
|
||||
assertf( (A) != NULL ); \
|
||||
assertf( (B) != NULL ); \
|
||||
if (htsMemoryFastXfr) { \
|
||||
if (sizeof(A) != sizeof(char*)) { \
|
||||
(A)[sizeof(A) - 1] = '\0'; \
|
||||
} \
|
||||
strncat(A, B, N); \
|
||||
if (sizeof(A) != sizeof(char*)) { \
|
||||
assertf((A)[sizeof(A) - 1] == '\0'); \
|
||||
} \
|
||||
} else { \
|
||||
unsigned int sz = (unsigned int) strlen(A); \
|
||||
unsigned int szf = (unsigned int) strlen(B); \
|
||||
if (szf > (unsigned int) (N)) szf = (unsigned int) (N); \
|
||||
if (sizeof(A) != sizeof(char*)) { \
|
||||
assertf(sz + szf + 1 < sizeof(A)); \
|
||||
if (szf > 0) { \
|
||||
if (sz + szf + 1 < sizeof(A)) { \
|
||||
memcpy((A) + sz, (B), szf); \
|
||||
* ( (A) + sz + szf) = '\0'; \
|
||||
} \
|
||||
} \
|
||||
} else if (szf > 0) { \
|
||||
memcpybuff((A) + sz, (B), szf); \
|
||||
* ( (A) + sz + szf) = '\0'; \
|
||||
} \
|
||||
} \
|
||||
} while(0)
|
||||
#define strcpybuff(A, B) do { \
|
||||
assertf( (A) != NULL ); \
|
||||
assertf( (const char*) (B) != NULL ); \
|
||||
if (htsMemoryFastXfr) { \
|
||||
if (sizeof(A) != sizeof(char*)) { \
|
||||
(A)[sizeof(A) - 1] = '\0'; \
|
||||
} \
|
||||
strcpy(A, B); \
|
||||
if (sizeof(A) != sizeof(char*)) { \
|
||||
assertf((A)[sizeof(A) - 1] == '\0'); \
|
||||
} \
|
||||
} else { \
|
||||
unsigned int szf = (unsigned int) strlen(B); \
|
||||
if (sizeof(A) != sizeof(char*)) { \
|
||||
assertf(szf + 1 < sizeof(A)); \
|
||||
if (szf > 0) { \
|
||||
if (szf + 1 < sizeof(A)) { \
|
||||
memcpy((A), (B), szf + 1); \
|
||||
} else { \
|
||||
* (A) = '\0'; \
|
||||
} \
|
||||
} else { \
|
||||
* (A) = '\0'; \
|
||||
} \
|
||||
} else { \
|
||||
memcpybuff((A), (B), szf + 1); \
|
||||
} \
|
||||
} \
|
||||
} while(0)
|
||||
|
||||
// emergency log
|
||||
typedef void (*t_abortLog) (char *msg, char *file, int line);
|
||||
extern HTSEXT_API t_abortLog abortLog__;
|
||||
|
||||
#define abortLog(a) abortLog__(a, __FILE__, __LINE__)
|
||||
#define abortLogFmt(a) do { \
|
||||
FILE* fp = fopen("CRASH.TXT", "wb"); \
|
||||
if (!fp) fp = fopen("/tmp/CRASH.TXT", "wb"); \
|
||||
if (!fp) fp = fopen("C:\\CRASH.TXT", "wb"); \
|
||||
if (fp) { \
|
||||
fprintf(fp, "HTTrack " HTTRACK_VERSIONID " closed at '" __FILE__ "', line %d\r\n", __LINE__); \
|
||||
fprintf(fp, "Reason:\r\n"); \
|
||||
fprintf(fp, a); \
|
||||
fprintf(fp, "\r\n"); \
|
||||
fflush(fp); \
|
||||
fclose(fp); \
|
||||
} \
|
||||
} while(0)
|
||||
|
||||
#define _ ,
|
||||
#define abortLogFmt(a) do { \
|
||||
FILE* fp = fopen("CRASH.TXT", "wb"); \
|
||||
if (!fp) fp = fopen("/tmp/CRASH.TXT", "wb"); \
|
||||
if (!fp) fp = fopen("C:\\CRASH.TXT", "wb"); \
|
||||
if (fp) { \
|
||||
fprintf(fp, "HTTrack " HTTRACK_VERSIONID " closed at '" __FILE__ "', line %d\r\n", __LINE__); \
|
||||
fprintf(fp, "Reason:\r\n"); \
|
||||
fprintf(fp, a); \
|
||||
fprintf(fp, "\r\n"); \
|
||||
fflush(fp); \
|
||||
fclose(fp); \
|
||||
} \
|
||||
} while(0)
|
||||
#define assertf(exp) do { \
|
||||
if (! ( exp ) ) { \
|
||||
abortLog("assert failed: " #exp); \
|
||||
if (htsCallbackErr != NULL) { \
|
||||
htsCallbackErr("assert failed: " #exp, __FILE__ , __LINE__ ); \
|
||||
} \
|
||||
assert(exp); \
|
||||
abort(); \
|
||||
} \
|
||||
} while(0)
|
||||
/* non-fatal assert */
|
||||
#define assertnf(exp) do { \
|
||||
if (! ( exp ) ) { \
|
||||
abortLog("assert failed: " #exp); \
|
||||
if (htsCallbackErr != NULL) { \
|
||||
htsCallbackErr("assert failed: " #exp, __FILE__ , __LINE__ ); \
|
||||
} \
|
||||
} \
|
||||
} while(0)
|
||||
|
||||
//
|
||||
|
||||
#define malloct(A) malloc(A)
|
||||
#define calloct(A,B) calloc((A), (B))
|
||||
#define freet(A) do { assertnf((A) != NULL); if ((A) != NULL) { free(A); (A) = NULL; } } while(0)
|
||||
#define strdupt(A) strdup(A)
|
||||
#define realloct(A,B) ( ((A) != NULL) ? realloc((A), (B)) : malloc(B) )
|
||||
#define memcpybuff(A, B, N) memcpy((A), (B), (N))
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user