Compare commits

..

100 Commits

Author SHA1 Message Date
Xavier Roche
5f96e86818 Merge pull request #355 from xroche/ci/bump-checkout-v5
ci: bump actions/checkout to v6
2026-06-14 23:15:01 +02:00
Xavier Roche
6002bc20ca ci: bump actions/checkout from v4 to v6
Keeps the checkout action on a supported major; v4 runs on the
end-of-life Node 20 runtime, v6 moves to Node 24.

Signed-off-by: Xavier Roche <roche@httrack.com>
2026-06-14 23:13:06 +02:00
Xavier Roche
bdbc741597 Merge pull request #354 from xroche/ci/mkdeb-single-test
mkdeb: drop the redundant pre-build test pass
2026-06-14 22:22:49 +02:00
Xavier Roche
d0a1b957cd ci: let the deb job run debuild's test pass
The deb job set DEB_BUILD_OPTIONS=nocheck to skip a redundant second test run.
With mkdeb.sh no longer running its own pre-build check, debuild's is the only
test pass, so nocheck would suppress it entirely and CI would never exercise the
packaged build's tests. Drop nocheck; keep noautodbgsym and parallel.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Signed-off-by: Xavier Roche <roche@httrack.com>
2026-06-14 22:15:51 +02:00
Xavier Roche
6c329744e7 mkdeb: drop the redundant pre-build test pass
mkdeb.sh built and tested the sources twice: once in its own export-tree
pre-build (make check, offline), then again under debuild, whose dh_auto_test
runs the suite with the online tests enabled (debian/rules configures with
--enable-online-unit-tests=auto). The first run was a slower, offline-only
subset of the second.

Drop mkdeb's own make check. The export-tree build stays, since regen-man needs
the compiled binaries, but the suite now runs once, under debuild, as the
superset. This is the same redundancy CI #352 removed via DEB_BUILD_OPTIONS=nocheck;
fixing it in mkdeb.sh applies it to release builds too instead of per-environment.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Signed-off-by: Xavier Roche <roche@httrack.com>
2026-06-14 22:13:23 +02:00
Xavier Roche
1375ef97d7 Merge pull request #353 from xroche/ci/macos-i386
ci: add macOS and 32-bit (i386) build jobs
2026-06-14 22:09:11 +02:00
Xavier Roche
13207a92fc Make the cache and manpage tests POSIX-shell portable
Running the suite on macOS surfaced two GNU/Linux assumptions. The test
harness there resolves $(BASH) to /bin/sh (POSIX mode), and macOS ships
BSD userland, so:

- 01_engine-cache used "du -sb"; the -b (apparent bytes) flag is GNU-only
  and BSD/macOS du rejects it, leaving an empty size and an "integer
  expression expected" error. Switch to portable "du -sk" (1024-byte
  units); block-allocated size is an upper bound, fine for a ceiling.

- 02_manpage-regen used diff with process substitution, which a POSIX
  /bin/sh does not parse. Stage the stripped inputs in temp files instead.

Both now pass under dash as well as bash, on Linux and macOS.

Signed-off-by: Xavier Roche <roche@httrack.com>
2026-06-14 22:05:31 +02:00
Xavier Roche
d3eecbf211 Gate the GNU-ld libc-force flag behind a linker check
-Wl,--push-state,--no-as-needed,-lc,--pop-state forces libc back into
DT_NEEDED for libraries that reach it only through libhttrack: the
libhtsjava JNI wrapper and the libtest callback examples. The flag is
GNU-ld-specific; Apple's ld rejects it ("ld: unknown options:
--push-state --no-as-needed --pop-state"), breaking the macOS build, and
doesn't need it (every dylib links libSystem anyway).

Probe it once with AX_CHECK_LINK_FLAG and emit it via LIBC_FORCE_LINK
only where the linker accepts it. On GNU/Linux the flag is still applied
and libc.so.6 stays in DT_NEEDED, so behavior is unchanged there.

Signed-off-by: Xavier Roche <roche@httrack.com>
2026-06-14 21:57:56 +02:00
Xavier Roche
7ec77156d0 ci: add macOS and 32-bit (i386) build jobs
Two cheap portability targets that need no VM or second CI provider:

- macOS (Darwin/clang) on a native macos-14 runner. The tree has no
  __APPLE__ branches, so Darwin runs the generic-Unix path against a
  second libc and kernel. brew's openssl@3 is keg-only, so configure is
  pointed at it via CPPFLAGS/LDFLAGS.

- 32-bit i386 via multilib on the existing x86-64 runner. Exercises the
  32-bit size_t/pointer ABI, where size and bounds math can truncate or
  wrap in ways 64-bit never shows. --build (not --host) keeps configure
  out of cross mode so the i386 binary still runs the test suite.

Signed-off-by: Xavier Roche <roche@httrack.com>
2026-06-14 21:38:49 +02:00
Xavier Roche
3cd8197cc7 Merge pull request #352 from xroche/ci/deb-faster
ci: speed up the deb package job
2026-06-14 21:33:53 +02:00
Xavier Roche
37f50bb925 ci: speed up the deb package job
The deb job spent ~3m19s in the build step, half of it on work CI does not
need. The package build (via mkdeb.sh) ran the full test suite a second time
with online/network unit tests enabled (~54s), and compressed the large LTO
-dbgsym packages that CI throws away (~48s).

Set DEB_BUILD_OPTIONS=nocheck,noautodbgsym,parallel=N on the CI step only.
nocheck skips debuild's make check, which is redundant here: the build matrix
already runs the suite on every config and mkdeb.sh's own pre-build runs the
offline tests. noautodbgsym drops the -dbgsym packages. parallel uses every
runner core. mkdeb.sh is unchanged, so release builds still build with LTO,
full tests, and debug symbols; only the CI environment differs.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Signed-off-by: Xavier Roche <roche@httrack.com>
2026-06-14 21:31:03 +02:00
Xavier Roche
d8d1eafcd1 Merge pull request #351 from xroche/feature/appstream-metainfo
Ship AppStream MetaInfo for WebHTTrack
2026-06-14 21:30:28 +02:00
Xavier Roche
80d0e90819 Merge pull request #350 from xroche/fix/webhttrack-browser-deps
debian: refresh stale webhttrack browser dependency
2026-06-14 21:26:31 +02:00
Xavier Roche
8dde8dc03c Ship AppStream MetaInfo for WebHTTrack
The Debian AppStream generator flagged both webhttrack desktop entries as
no-metainfo: with no MetaInfo file, the catalog entry is synthesized from
the .desktop file and the package description, which is deprecated and risks
the app being dropped from the metadata catalog.

Add com.httrack.WebHTTrack.metainfo.xml (installed to share/metainfo) for the
main app, launching WebHTTrack.desktop. Mark the secondary "Browse Mirrored
Websites" launcher with X-AppStream-Ignore=true so it doesn't produce a
duplicate, metadata-less catalog entry.

Validated with appstreamcli validate and desktop-file-validate.

Signed-off-by: Xavier Roche <roche@httrack.com>
2026-06-14 21:24:45 +02:00
Xavier Roche
a16820a282 debian: refresh stale webhttrack browser dependency
The webhttrack Depends listed iceape-browser, iceweasel, icecat, mozilla,
firefox and mozilla-firefox as browser alternatives. All six have been
removed from Debian (iceweasel was only ever a firefox-esr stub, firefox is
not in Debian main), so qa.debian.org/debcheck flagged them as half-broken
relationships. The OR-chain still resolved via the trailing www-browser
virtual package, so it was noise rather than a real installability failure.

Replace them with firefox-esr | chromium | www-browser: two real browsers
that exist in Debian today plus the virtual fallback. google-chrome is left
out deliberately since it is not in the Debian archive and would reintroduce
the same half-broken relationship.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Signed-off-by: Xavier Roche <roche@httrack.com>
2026-06-14 21:21:25 +02:00
Xavier Roche
95a62d5557 Merge pull request #349 from xroche/ci/deb-package
ci: build and lintian-gate the Debian packages
2026-06-14 21:16:48 +02:00
Xavier Roche
8d1517400c ci: build and lintian-gate the Debian packages
Add a CI job that builds the Debian packages on every push/PR through the
same tools/mkdeb.sh maintainers release with, so packaging regressions
(control, rules, file manifests, lintian) surface in CI instead of at
release time. One amd64/gcc run is enough: packaging is arch- and
compiler-independent and the existing matrix already covers compile
portability. The job is unsigned and uploads nothing; its value is the
pass/fail and the lintian gate.

Make mkdeb.sh fail the build on any lintian error or warning, and refresh
the lintian overrides so the package is clean at that level:

- Drop dead overrides whose tags lintian no longer emits (breakout-link,
  the libhttrack spelling-error-in-binary).
- Rewrite the pointed-hint overrides (extra-license-file,
  package-contains-documentation-outside-usr-share-doc,
  hardening-no-fortify-functions): their match context is now empty and the
  path shows only as a display pointer, so a path context never matches.
  Match with '*' as the working webhttrack-common override already does.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Signed-off-by: Xavier Roche <roche@httrack.com>
2026-06-14 21:10:49 +02:00
Xavier Roche
558d82f499 Merge pull request #348 from xroche/build/regen-autotools
Regenerate committed autotools/libtool files
2026-06-14 20:35:09 +02:00
Xavier Roche
58ddd3cdc8 Regenerate committed autotools/libtool files
The tracked generated files (configure, */Makefile.in, ltmain.sh, aux
scripts) had drifted stale: src/Makefile.in predated #343, which added
htscache_selftest.c to the library sources, so a plain
`bash configure && make` link-failed with "undefined reference to
cache_selftests". CI regenerates with `autoreconf -fi` on every run, so it
never saw the staleness.

Regenerate with `autoreconf -fi` so a from-checkout build needs no autotools
installed, as intended. This also bumps the generators (autoconf 2.71->2.72,
automake 1.17, libtool 2.4.7), hence the large but purely generated diff.

Also commit the automake test-driver aux script (its siblings compile,
depcomp, missing, install-sh are already committed); without it `make check`
on a fresh checkout could not find $(top_srcdir)/test-driver. A clean
checkout now builds and passes `make check` with no autotools installed.

Signed-off-by: Xavier Roche <roche@httrack.com>
2026-06-14 20:32:07 +02:00
Xavier Roche
f6854a10da Merge pull request #347 from xroche/cleanup/htsback-bounds
Bound htsback backing-info and fast-cache copies
2026-06-14 20:23:58 +02:00
Xavier Roche
130c2fff54 Bound htsback backing-info and fast-cache copies
Continue the htssafe.h pointer-destination migration in htsback.c.

back_infostr() wrote into a bare char* through the unchecked strcatbuff()
path. Thread the destination capacity through and use strlcatbuff(), and
fix a latent bug while here: the size/totalsize trailer was sprintf'd
straight into the destination, wiping the URL the function had just
assembled, instead of being built in the scratch buffer and appended.
The fixed-size sprintf() calls become snprintf().

Enlarge back_info()'s status buffer to HTS_URLMAXSIZE*4+1024 so it can
hold both url_adr and url_fil (each HTS_URLMAXSIZE*2) plus framing. The
old HTS_URLMAXSIZE*2+1024 buffer was too small for two full-length URL
fields, so the now-bounded appends would abort on a long URL.

In back_add()'s fast-header cache path, copy the cached location into its
backing array (location_buffer) rather than through the r.location alias,
so the bounded macro sees the real capacity.

Add a back_infostr()/back_info() self-test under -#7: it formats 2000
in-memory slots across every status-code arm with exact-match assertions
(no sockets needed), plus a near-maximal URL driven through back_info()
to guard the buffer sizing. It fails on the clobber bug and on an
undersized status buffer.

htsback.c is now free of pointer-destination buff() warnings.

Signed-off-by: Xavier Roche <roche@httrack.com>
2026-06-14 20:21:09 +02:00
Xavier Roche
e770e9335c Merge pull request #346 from xroche/cleanup/ethical-notice-wording
Reword the ethical-use notice in source headers
2026-06-14 18:39:46 +02:00
Xavier Roche
7e7b06b55a Reword the ethical-use notice in source headers
The old license-header note ("We hereby ask people using this source NOT to
use it in purpose of grabbing emails addresses...") read awkwardly: "in
purpose of", "emails addresses", "on persons", and a one-item bullet list
under an "Important notes:" heading.

Replace it across all source headers, configure/configure.ac, and README with
a single clean sentence, and align the wording everywhere:

  Ethical use: we kindly ask that you NOT use this software to harvest email
  addresses or to collect any other private information about people. Doing so
  would dishonor our work and waste the many hours we have spent on it.

Pure text change, no behavior impact.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Signed-off-by: Xavier Roche <roche@httrack.com>
2026-06-14 18:38:17 +02:00
Xavier Roche
2f85ca7e6d Merge pull request #345 from xroche/build/noexec-out-of-tree
build: make out-of-tree builds and "make check" work from a read-only/noexec tree
2026-06-14 18:27:23 +02:00
Xavier Roche
28c22bd64d build: make out-of-tree builds and "make check" work from a read-only/noexec tree
Out-of-tree builds were broken in two ways, and "make check" could not run
when the source tree sits on a noexec filesystem. Fix both so a plain
`mkdir build && cd build && bash <srcdir>/configure && make && make check`
works without copying the tree.

libtest: -I../src is relative to the build dir, so out-of-tree it pointed at
build/src (generated files only) and missed the source header
httrack-library.h. Use -I$(top_srcdir)/src.

Wildcard DATA lists (libtest, lang, html, m4) used bare globs like "*.html".
Make expands a wildcard prerequisite against the build dir, so out-of-tree the
glob matches nothing and stays literal ("No rule to make target '*.html'").
Glob against $(srcdir) instead. Explicit filenames (e.g. ../history.txt) are
left as-is; they resolve through VPATH.

make check: automake's driver execve()s each tests/*.test, which fails with
"Permission denied" when the source tree is on a noexec mount. Run them through
bash via TEST_LOG_COMPILER = $(BASH) (detected by configure); this also drops
any reliance on the scripts' executable bit and works on a normal tree too.

Verified end to end from a noexec source tree: out-of-tree make builds the full
tree including libtest, and "make check" runs (14 pass, online crawl tests skip
offline, 0 fail).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Signed-off-by: Xavier Roche <roche@httrack.com>
2026-06-14 18:18:55 +02:00
Xavier Roche
4b7be69526 Merge pull request #344 from xroche/cleanup/copyright-spdx
Normalize copyright years and add SPDX identifiers
2026-06-14 18:18:31 +02:00
Xavier Roche
995cc6c86e Normalize copyright years and add SPDX identifiers
Collapse the stale "1998-2017" copyright ranges (and a handful of other
ranges) in HTTrack-authored source to a single earliest year taken from
git history: 1998 for files tracing back to the 2012 release-history
import, and the real first-commit year for later additions (2013 for
htsencoding, 2014 for htsarrays/htssafe/htsconcat, 2026 for the cache
self-test). Each header also gains an SPDX-License-Identifier:
GPL-3.0-or-later line.

The runtime "about" banners (httrack, proxytrack) and the man pages keep
a range, but now end in the current year computed at build time: via
__DATE__ for the C banners and makeman.sh for the generated httrack.1,
so they no longer freeze at a stale year.

Third-party notices (Even Rouault, Mathias Svensson, Info-ZIP, Eric
Young) and the BSD-licensed coucal submodule are left untouched.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Signed-off-by: Xavier Roche <roche@httrack.com>
2026-06-14 18:15:40 +02:00
Xavier Roche
e1fdfcec5d Merge pull request #343 from xroche/tests/cache-selftest
Add an in-process cache create/read/update self-test
2026-06-14 17:49:08 +02:00
Xavier Roche
83ff148efd Add an in-process cache create/read/update self-test
Wire a new `httrack -#A <dir>` debug option that exercises the ZIP cache
end to end through the public API (cache_init / cache_add / cache_readex),
in a dedicated source file (htscache_selftest.c).

It stores, then reads back asserting every header field and the body
round-trip exactly:
- hand-crafted edge cases: a normal HTML page, an empty redirect with a
  near-limit location, a non-HTML body kept in cache via all-in-cache, and
  a binary body with embedded NUL and high bytes (compared with memcmp);
- a few thousand small entries, to stress the index/lookup at scale;
- a few large compressible and incompressible bodies, to exercise zlib
  deflate/inflate and large-buffer handling.

It then updates one entry and confirms the new value is read back. The
driver returns the number of mismatches so failures are observable. The
whole cache weighs ~1-2 MB and the run takes a fraction of a second.

The location case is sized to the cache's real per-header-line round-trip
limit: cached headers are parsed through a HTS_URLMAXSIZE-sized line
buffer, so a value longer than that is truncated on read regardless of
the larger r.location buffer; 1000 bytes stays safely under it.

A dedicated test (tests/01_engine-cache.test) drives the option, asserts
the success line, that a ZIP cache was written, and that its footprint
stays under a sane ceiling.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Signed-off-by: Xavier Roche <roche@httrack.com>
2026-06-14 17:47:04 +02:00
Xavier Roche
50bb02e729 Merge pull request #342 from xroche/cleanup/cache-rstr-s1
Bound the legacy .dat cache readers (cache_rstr / cache_brstr)
2026-06-14 16:44:27 +02:00
Xavier Roche
b80ee793ac Bound the legacy .dat cache readers (cache_rstr / cache_brstr)
cache_rstr() read an attacker-controlled length (clamped only to 32768) from a
CACHE-1.x .dat and fread() it straight into fixed htsblk fields (r.msg[80],
r.contenttype[64], ...) with no destination bound -- a heap/stack overflow from
a crafted/old cache (the audit's S1). cache_brstr() (the in-memory variant) had
the same shape and, worse, no length cap at all.

Thread a destination size into both:
- cache_rstr stores at most s_size-1 bytes and fseek()s past the remainder so
  the next field stays aligned (the field may be longer than the destination in
  a tampered cache).
- cache_brstr caps the length and bounds the copy.
Update every caller (htscache.c and htscoremain.c) to pass sizeof(field) /
HTS_URLMAXSIZE*2. cache_rstr_addr already malloc()s to the read size, so it is
left as is. Remove the dead cache_quickbrstr (no callers).

A dedicated cache self-test (create/read/update) follows separately.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Signed-off-by: Xavier Roche <roche@httrack.com>
2026-06-14 16:41:17 +02:00
Xavier Roche
d12456c1e8 Merge pull request #341 from xroche/test/cache-update
Add an offline update/cache regression test
2026-06-14 16:31:42 +02:00
Xavier Roche
a52a2b146c Add an offline update/cache regression test
Every crawl test runs httrack exactly once (crawl-test.sh), so the cache read /
update path (cache_readex) -- recently touched by the buffer-bounding work -- had
zero regression coverage: the cache was written but never read back.

Add tests/02_update-cache.test, a self-contained file:// two-pass test (no
network, always runs): mirror a local site, re-mirror it unchanged (the cache-
read pass must complete with no errors -- guards a crash/abort in cache_readex),
then change a source file and re-mirror (the update must pick up the new content
-- guards the update decision that reads the cached metadata).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Signed-off-by: Xavier Roche <roche@httrack.com>
2026-06-14 16:29:45 +02:00
Xavier Roche
226a38d3d0 Merge pull request #340 from xroche/cleanup/htscache-bounds
Bound htscache.c cache-field and save-name copies
2026-06-14 15:58:04 +02:00
Xavier Roche
1e463f65a5 Bound htscache.c cache-field and save-name copies
ZIP_READFIELD_STRING (the cached ZIP-header field reader) copied
attacker-influenced cache-file values into fixed htsblk fields with an unchecked
strcpybuff -- benign for the char[] fields, but r.location is a char* (degrades
to raw strcpy). Thread the destination size into the macro: sizeof(field) for
the array fields, HTS_URLMAXSIZE*2 for r.location (it points into a buffer of
that size, in both the caller-supplied and the location_default case).

Also bound cache_readex's return_save copy (its one non-NULL caller passes a
HTS_URLMAXSIZE*2 buffer), the exact-sized malloc copy in cache_rstr's default
path (strlen(defaultdata)+1), and replace the two strcpybuff(r.location, "")
clears with a direct r.location[0] = '\0'.

htscache.c pointer-destination warnings 6 -> 0.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Signed-off-by: Xavier Roche <roche@httrack.com>
2026-06-14 15:43:04 +02:00
Xavier Roche
09ed9968cd Merge pull request #339 from xroche/cleanup/htsbauth-bounds
Bound htsbauth cookie/auth buffer writes
2026-06-14 15:32:37 +02:00
Xavier Roche
ad6915e3cc Bound htsbauth cookie/auth buffer writes
cookie_get(), bauth_prefix(), cookie_insert() and cookie_delete() all wrote into
caller-provided char* buffers via unchecked strcpybuff/strcatbuff/strncatbuff
(the pointer-destination case). Bound them:

- cookie_get: write the extracted field with htsbuff over the buffer's 8192-byte
  contract (all callers use char[8192]).
- bauth_prefix: copy host+path with strlcpybuff/strlcatbuff bounded to the
  caller's HTS_URLMAXSIZE*2 buffer.
- cookie_insert/cookie_delete: thread the destination capacity (the cookie
  store's max_len minus the cursor offset) and use strlcpybuff/strlcatbuff;
  update cookie_add/cookie_del to pass it.

Add cookie_get field-extraction asserts to basic_selftests (run via -#7) rather
than a new -# digit. Translated the touched French comments.

htsbauth.c pointer-destination warnings 9 -> 0.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Signed-off-by: Xavier Roche <roche@httrack.com>
2026-06-14 15:29:33 +02:00
Xavier Roche
4a5580dec0 Merge pull request #338 from xroche/cleanup/htswizard-bounds
Build wizard auto-filter rules with htsbuff (bounded)
2026-06-14 14:37:56 +02:00
Xavier Roche
f1d35e7691 Build wizard auto-filter rules with htsbuff (bounded)
hts_acceptlink_()'s auto-generated allow/deny rules built _FILTERS[0] -- a
filter slot of HTS_URLMAXSIZE*2 bytes -- via unchecked strcpybuff/strcatbuff/
strncatbuff on the char* slot, and HT_INSERT_FILTERS0 shifted slots with an
unchecked strcpybuff. Convert each rule builder to an htsbuff over the slot
(new local HTS_FILTER_SLOT_SIZE, matching the stride allocated by
filters_init()), and bound the slot-shift copy with strlcpybuff.

Behavior preserved: old vs new produce byte-identical mirrors across four crawl
configurations on a local multi-directory site (the auto-rules fire for primary
links on normal crawls). Touched French comments translated.

htswizard.c pointer-destination warnings 30 -> 0.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Signed-off-by: Xavier Roche <roche@httrack.com>
2026-06-14 14:36:21 +02:00
Xavier Roche
6d7db83726 Merge pull request #336 from xroche/cleanup/htsalias-bounds
Bound optalias_check's output buffers (fix S1 overflow)
2026-06-14 13:50:38 +02:00
Xavier Roche
335c2c4b2a Merge pull request #337 from xroche/docs/governance
Add contributor governance: CONTRIBUTING, COC, SECURITY, DCO
2026-06-14 13:47:44 +02:00
Xavier Roche
62be177e35 Add obfuscated personal email as alternate security contact
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Signed-off-by: Xavier Roche <roche@httrack.com>
2026-06-14 13:47:15 +02:00
Xavier Roche
edd52bf3be Bound optalias_check's output buffers (thread their sizes)
optalias_check() wrote into caller-provided char* buffers with unchecked ops:
the param0 case did strcpybuff/strcatbuff of command+param into return_argv[0],
which can exceed the buffer, and the syntax-error paths sprintf()'d an option
name into return_error -- which is only 256 bytes in the config-file caller, so
a long option overflows it. Both are the overflow the audit flagged.

Thread return_argv_size and return_error_size through the (internal,
non-exported) signature; copy with strlcpybuff/strlcatbuff and format with
snprintf, so an over-long value aborts/truncates instead of overrunning. Update
both callers to pass their real sizes.

Leaves the shared cmdl_ins macro (the cmdl_* family wants its block size
threaded too -- a separate cleanup).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-14 13:47:12 +02:00
Xavier Roche
452a9f6c67 Add contributor governance: CONTRIBUTING, COC, SECURITY, DCO
httrack had no community-health files. Add a short CONTRIBUTING (PR/style
basics, security-sensitivity, an outcome-only AI-assistance policy), the
Contributor Covenant 2.1 as CODE_OF_CONDUCT, and a SECURITY policy with a
verified-reproduction bar for AI-assisted reports.

Require a Signed-off-by (DCO) on every commit and enforce it in CI via a new
pull_request-only job.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Signed-off-by: Xavier Roche <roche@httrack.com>
2026-06-14 13:41:19 +02:00
Xavier Roche
9eb2a344a9 Merge pull request #335 from xroche/cleanup/infostatuscode-const
Return HTTP status reason phrases via a const-returning switch
2026-06-14 13:18:16 +02:00
Xavier Roche
348a7d8cb2 Return HTTP status reason phrases via a const-returning switch
infostatuscode() was a ~60-case switch, each arm strcpybuff()-ing a literal into
the caller's char* msg: 42 unchecked pointer-destination copies of static data.
Keep the same O(1) switch dispatch but have it return the phrase instead of
copying -- new public infostatuscode_const(int) -> const char* (or NULL) -- and
do the copy in a thin wrapper.

infostatuscode() preserves exact behavior: a known code overwrites msg; an
unknown code keeps any caller-provided message, else writes "Unknown error".
The single remaining copy uses strlcpybuff with the documented 64-byte minimum
(longest phrase is 31; all callers pass >= 80).

Drops 42 pointer-destination warnings (htslib.c 56 -> 14; tree 179 -> 137).
No dispatch regression: it stays a switch (jump table), no allocation, no
per-call scan.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-14 13:14:23 +02:00
Xavier Roche
5f81741ac5 Merge pull request #332 from xroche/cleanup/url_savename-htsbuff
Convert the url_savename template renderer to htsbuff
2026-06-14 13:01:32 +02:00
Xavier Roche
0cf14c4e88 Convert the url_savename template renderer to htsbuff
The savename_type == -1 userdef renderer walked afs->save with a raw char*
cursor, doing "b += strlen(b)" after each write, and strcpybuff(b, ...) on that
char* was unchecked (the pointer-destination case). That manual pointer math is
where the function's off-by-one / strlen-based hazards lived.

Convert the cursor to an htsbuff over afs->save (capacity sizeof = the full
HTS_URLMAXSIZE*2 buffer): every append is now bounds-checked and the pointer
math is gone. The loop's truncation guard becomes "sb.len < HTS_URLMAXSIZE",
preserving the existing cap-at-1024 behavior; the 2x buffer means a write only
aborts where it would previously have overrun. Add htsbuff_catc for the
single-character appends ('%', '.', literal copy).

Removes 35 pointer-destination warnings (htsname.c 51 -> 9; the renderer is now
warning-free). Behavior verified identical: the pre-change and new binaries
produce byte-identical output across 14 -N templates (%n %N %t %p %h %H %M %q %r
%% %[param], the short %s variants, and literals) crawling a local site.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-14 12:59:29 +02:00
Xavier Roche
29a07ff487 Merge pull request #334 from xroche/cleanup/git-format-hook
Add an opt-in pre-commit hook that auto-formats changed C lines
2026-06-14 12:58:42 +02:00
Xavier Roche
f987083f14 Add an opt-in pre-commit hook that auto-formats changed C lines
Enable with: git config core.hooksPath .githooks

The hook runs git-clang-format (clang-format 19, repo .clang-format) on the
staged C lines only and re-stages the result, so commits stay
clang-format-clean and the CI format check passes without a round-trip. It never
reformats the whole tree, only the lines a commit changes.

Safe by construction: if clang-format 19 is absent it skips (CI still enforces);
and if a file has both staged and unstaged changes it does not auto-mutate
(which would commit the unstaged part), it reports and asks the author to
stage/stash. HTTRACK_NO_AUTOFORMAT=1 skips it for one commit. README covers the
noexec-working-tree case (point core.hooksPath at an exec-fs copy).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-14 12:55:17 +02:00
Xavier Roche
eb565f0bd8 Merge pull request #333 from xroche/cleanup/clang-format-setup
Add a .clang-format and a changed-lines CI format check
2026-06-14 12:38:20 +02:00
Xavier Roche
71398d510e Add a .clang-format and a changed-lines CI format check
The engine predates clang-format (it was shaped by an old Visual Studio
formatter) and does not round-trip through it: a whole-tree reformat is ~25k
lines of churn, so we never do one. Instead we format only the lines a change
touches, via git-clang-format, and enforce that in CI diff-scoped.

.clang-format is reverse-engineered from src/*.c (2-space, no tabs, 80 cols,
char *x pointers, attached braces, un-indented case labels, space after C-style
casts). That is mostly LLVM defaults; the deliberate deviations are
SpaceAfterCStyleCast (the dominant "(int) x" form) and SortIncludes: false
(C include order can be significant, so never reorder).

The CI "format" job pins clang-format-19 from apt.llvm.org's noble channel
(ubuntu-24.04's native is 18) to match local dev, and fails only if a PR's
changed C lines are not clang-format-clean. Existing untouched code is left
alone.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-14 12:26:49 +02:00
Xavier Roche
75fc040f06 Merge pull request #331 from xroche/cleanup/htsbuff-builder
Add htsbuff: a bounded string builder over a fixed buffer
2026-06-14 10:40:23 +02:00
Xavier Roche
c4ef18f5a5 Add htsbuff: a bounded string builder over a fixed buffer
Many pointer-destination buff() sites are cursors walking a buffer of known
capacity, with a manual "p += strlen(p)" after each write (the url_savename
renderer does this ~40 times). That hand-rolled pointer math is where several
of the off-by-one hazards live.

htsbuff captures the pattern: a non-owning builder (buf/cap/len) built from an
in-scope array (htsbuff_array, capacity via sizeof) or a pointer of known size
(htsbuff_ptr). htsbuff_cat/catn/cpy bound every write against the real capacity
and abort on overflow, same contract as the *_safe_ helpers, so the pointer
math goes away.

Extend the -#8 self-test and tests/01_engine-strsafe.test with builder
correctness (append, truncating append, reset, length) and an overflow-abort
case. No call sites are converted yet; that follows per file.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-14 10:38:22 +02:00
Xavier Roche
d76dad47f7 Merge pull request #330 from xroche/cleanup/htssafe-pointer-diagnostics
Flag unchecked pointer-destination uses of the buff() string macros
2026-06-14 08:49:26 +02:00
Xavier Roche
9c6ff54040 Bound catch_url() header buffer to its 32Kb contract
First consumer of the new buff() pointer-destination diagnostic. catch_url()
appended response headers into the caller's 'data' buffer with strcatbuff on
a char* destination, which is unchecked: a long header stream could overrun
the 32Kb buffer.

Make the capacity contract explicit (CATCH_URL_DATA_SIZE in htscatchurl.h,
used by the caller too) and append with strlcatbuff, which enforces the bound
and aborts rather than overflowing. htscatchurl.c now compiles warning-free
under the diagnostic.

The remaining raw sprintf/sscanf into the same buffer are separate items for
a later pass.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-14 08:46:03 +02:00
Xavier Roche
4a057514b9 Warn on unchecked pointer-destination uses of the buff() macros
strcpybuff/strcatbuff/strncatbuff only bounds-check when the destination
is a sized char[] array. For a bare char* the capacity is unknown, so the
macro silently falls back to plain strcpy/strcat/strncat while still
looking like a checked call.

On GCC/Clang, route the pointer case through __builtin_choose_expr() to a
stub carrying the 'warning' function attribute, so a compile-time warning
fires only at pointer-destination sites and points at the explicit-size
replacement (strlcpybuff/strlcatbuff). Array sites keep using the bounded
_safe_ helpers and stay quiet. The change is diagnostic only: no runtime
or ABI change, and other compilers keep the previous behavior.

Add a runtime self-test for the bounded ops behind a new -#8 debug mode,
plus tests/01_engine-strsafe.test covering both correct copies and the
abort-on-overflow guarantee.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-14 08:40:10 +02:00
Xavier Roche
055e17b057 Merge pull request #328 from xroche/cli/header-ua-length-152
Raise the user-agent and custom-header length limits
2026-06-14 01:43:31 +02:00
Xavier Roche
d7bb97d697 Merge pull request #329 from xroche/parser/lock-background-image-237
Lock CSS background-image url() rewriting in the parser test
2026-06-14 01:37:51 +02:00
Xavier Roche
d741188980 Raise the user-agent and custom-header length limits
The -F user-agent value was rejected past 126 bytes and the -%X header line
past 256. Both are stored in dynamically grown String buffers, so the caps were
arbitrary. Drop them; every argument is still bounded by the general
per-argument check in htscoremain.c (HTS_CDLMAXSIZE), which lifts the usable
limit to just under 1 KB.

optalias_check copied a long-form option value (--user-agent, --headers, ...)
into a fixed 1000-byte scratch buffer, smaller than that general cap, so a value
of 1000..1023 bytes aborted the process through the guarded-copy overflow check.
Size command and param to HTS_CDLMAXSIZE so the long form matches the cap; an
over-cap value is now refused with the normal "argument too long" message
instead of crashing. Grow the request-head buffer to 16384 for the larger
aggregate header set.

closes #152
2026-06-14 01:32:07 +02:00
Xavier Roche
ca810ef7e3 Lock CSS background-image url() rewriting in the parser test
background-image is already captured and rewritten through the style/CSS
url() path, in both an external <style> block and an inline style attribute,
with the URL unquoted, double-quoted or single-quoted. Extend the offline
parser test to cover all of these so the behavior stays locked.

closes #237
2026-06-14 01:07:42 +02:00
Xavier Roche
1bf90ce294 Merge pull request #326 from xroche/parser/srcset-candidates
Capture every srcset candidate URL on <img> and <source>
2026-06-14 00:42:48 +02:00
Xavier Roche
583817dcd4 Capture every srcset candidate URL on <img> and <source>
A srcset value is a comma-separated list of "URL descriptor" entries
(480w, 2x). HTTrack only had "data-srcset" in the link-detection table and
left the plain "srcset" attribute untouched, so responsive images were never
mirrored. The parser now captures and rewrites each candidate URL in turn,
preserving the descriptors and the commas between entries verbatim, and bounds
every new buffer scan against the page end.

Candidate splitting follows the WHATWG srcset algorithm: the URL is a run of
non-whitespace characters, so a comma inside a URL (a data: URI, a CDN
transform path like w_300,c_fill) stays part of the URL and is not mis-split;
only a trailing comma or a comma after the descriptor separates candidates.

Adds tests/01_engine-parse.test, an offline file:// parser test that asserts
each candidate is queued and rewritten (including the comma-in-URL cases), and
also locks the existing xlink:href (#298) and inline background-image (#237)
handling.

closes #235
closes #236
2026-06-14 00:37:20 +02:00
Xavier Roche
5351e96d71 Merge pull request #325 from xroche/docs/rfc2606-example-domains
docs: use www.example.com in examples; add html manual regen target
2026-06-13 10:41:24 +02:00
Xavier Roche
9d39a57576 build: add regen target for html/httrack.man.html
The rendered HTML manual had no regeneration path. Add regen-man-html,
which runs groff's html device over httrack.1, alongside the existing
regen-man target.
2026-06-13 10:38:31 +02:00
Xavier Roche
e3d4ec01f7 docs: use www.example.com in examples instead of www.someweb.com
someweb.com is a real registrable domain; example.com is reserved for
documentation (RFC 2606). Replace it across the HTML guides, the CLI
--help text (htshelp.c) and code comments, then regenerate man/httrack.1
and the rendered html/httrack.man.html. Other placeholder domains are
left alone: they appear inside filter/wildcard examples where the host
interacts with the pattern.
2026-06-13 10:38:31 +02:00
Xavier Roche
a0bf50f6b1 Merge pull request #324 from xroche/test/filter-escape-characterize
test: characterize wildcard class escape behavior
2026-06-13 10:17:24 +02:00
Xavier Roche
794404bba2 test: characterize wildcard class escape behavior
Add -#0 self-test cases for backslash escapes inside a '*[...]' class.
They pin two quirks of the current decoder: '\X' matches both X and the
backslash itself, and a literal ']' cannot be a class member because the
parser stops at the first ']' (escaped or not). The latter is why the
filter guide's '*[\[\]]' = "the [ or ] character" claim is wrong (#148):
it parses as the class {[,\} plus a trailing literal ']'. These tests
lock the behavior down so a later matcher fix is a deliberate change.

refs #148
2026-06-13 10:15:45 +02:00
Xavier Roche
82d08aaeaf Merge pull request #323 from xroche/fix/doc-lang-nits
docs: fix help-guide placeholders, README clone flag, Ukrainian charset
2026-06-13 10:12:09 +02:00
Xavier Roche
459f06e758 docs: fix help-guide placeholders, README clone flag, Ukrainian charset
Escape the literal <URLs>, <FILTERs>, <param>, <filter>, <file> and
related placeholders in fcguide.html so they render instead of being
swallowed as unknown HTML tags; several were also missing their closing
'>'. Use --recurse-submodules in the README clone command. Relabel
lang/Ukrainian.txt as windows-1251, which is what its bytes actually
are (ISO-8859-5 decodes them to garbage).

closes #132, closes #103, closes #167
2026-06-13 10:05:40 +02:00
Xavier Roche
89b25e418b Merge pull request #322 from xroche/test/expand-engine-coverage
test: expand offline engine self-test coverage
2026-06-13 09:58:03 +02:00
Xavier Roche
43f72afbad test: expand offline engine self-test coverage
Add filter (-#0) and MIME (-#2) tests, and broaden the charset, entity,
IDNA, and path-simplify cases that previously had one or two assertions
each.

Cover the punycode, charset, and entity parsers (areas with a CVE
history) with malformed-input probes that check the hardened build exits
cleanly rather than overflowing. The IDNA and path-simplify edge cases
are pinned to RFC 3492 and RFC 3986 semantics.

The &nbsp; entity case documents the known U+00A0 -> space behavior in
htsencoding.c instead of asserting the spec byte, so a future fix is not
blocked by a stale test.
2026-06-13 09:55:19 +02:00
Xavier Roche
017c634c53 Merge pull request #321 from xroche/fix/mutex-init-race-297
Fix race in lazy mutex initialization
2026-06-13 09:18:39 +02:00
Xavier Roche
f2b36c4b29 Merge pull request #320 from xroche/fix/lockpath-overflow-183
Fix abort on long log path (lock-file buffer too small)
2026-06-13 09:18:10 +02:00
Xavier Roche
19947efd74 Merge pull request #319 from xroche/fix/footer-xss-165
Fix XSS via unescaped URL in the page footer comment
2026-06-13 09:18:02 +02:00
Xavier Roche
de26ad881a fix: synchronize lazy mutex initialization (closes #297)
Two threads locking the same mutex for the first time could both run the
unsynchronized lazy init, corrupting the underlying pthread mutex and aborting
or deadlocking. Build the object and publish it with a single atomic
compare-and-swap; threads that lose the race free the object they built. This
needs no statically-initializable guard, so it stays valid on Windows 2000.
2026-06-13 09:15:31 +02:00
Xavier Roche
106d34d82c fix: size the lock-file path buffer to the concat buffer (closes #183)
A long log path made the lock-file path overflow the fixed 256-byte n_lock
buffer, tripping the guarded copy and aborting with signal 6. Size n_lock to
the concat-buffer capacity so it holds any path fconcat can produce.

(cherry picked from commit 15144ffd24667712cca2ac0fee96bd355239eff6)
2026-06-12 23:24:20 +02:00
Xavier Roche
61e0b3250b fix: escape angle brackets in the page footer URL (closes #165)
The default footer embeds the page URL inside an HTML comment. A URL
containing "-->" closed the comment and let an attacker inject script into
the mirrored page. Percent-encode < and > before the URL reaches the footer.

(cherry picked from commit 606883229244dc233d16915678e63cfa62000ff0)
2026-06-12 23:24:20 +02:00
Xavier Roche
827c227b94 history: document the Russian and Danish translation updates 2026-06-12 22:42:38 +02:00
Xavier Roche
17678fcee3 Merge pull request #117 from scootergrisen/master
Updated Danish translation, folded into Dansk.txt (the file the UI loads),
with stale/corrupted English keys restored and CRLF line endings kept
2026-06-12 22:42:05 +02:00
Xavier Roche
9ee8cbc58d Merge pull request #210 from GermanAizek/master
Updated Russian translation
2026-06-12 22:31:00 +02:00
Xavier Roche
418255c038 history: document the postprocess and help-text fixes 2026-06-12 22:14:44 +02:00
Xavier Roche
aa285715b3 Merge pull request #135 from RomanSek/plugin-postprocess-fix
Fix for handling changes introduced in postprocess
2026-06-12 22:13:02 +02:00
Xavier Roche
547c77062e Merge pull request #305 from yosinn1-blip/codex/typo-253-preferred-language-help-text
docs: fix preferred spelling in help text
2026-06-12 22:12:55 +02:00
Xavier Roche
58bdfde2a9 debian: document the lintian cleanup in changelog and history 2026-06-12 22:00:57 +02:00
Xavier Roche
3e30f4e572 Merge pull request #318 from xroche/fix/lintian-cleanup
debian: clean up lintian tags
2026-06-12 21:50:54 +02:00
Xavier Roche
46b7b8ed3f debian: override source-is-missing for upstream HTML docs
The bundled html/ and templates/ pages are the genuine upstream
documentation from the httrack.com website. lintian's long-line
heuristic flags them as missing source; they are the actual source.
2026-06-12 21:44:44 +02:00
Xavier Roche
2f40122bec debian: fix assorted lintian tags
- webhttrack: depend firmly on sensible-utils (it calls sensible-browser),
  drop the missing-depends-on-sensible-utils override.
- copyright: point to /usr/share/common-licenses/GPL-3, not the GPL symlink.
- watch: use https and version=4.
- control: add Rules-Requires-Root: no and Vcs-Browser.
- strip trailing whitespace in control, rules and changelog.
2026-06-12 21:27:11 +02:00
Xavier Roche
26b62369c5 build: link libhtsjava and libtest examples against libc
libhtsjava and the libtest callback examples reach libc only through
libhttrack, so the linker drops the direct libc edge from DT_NEEDED.
lintian flags this as library-not-linked-against-libc. Force libc to be
recorded as a dependency and drop the now-redundant override.
2026-06-12 21:23:29 +02:00
Xavier Roche
b21f85c53f Merge pull request #317 from xroche/fix/cookie-cmp-loop
Fix never-matching wildcard cookie domain comparison
2026-06-09 20:12:01 +02:00
Xavier Roche
0a20aa8522 Fix never-matching wildcard cookie domain comparison
cookie_cmp_wildcard_domain used an unsigned loop counter, so i >= 0 was always
true (infinite loop and out-of-bounds reads) and an empty domain underflowed
l - 1. Use a signed counter. Found and fixed by greenrd in #172. closes #171
2026-06-09 20:09:23 +02:00
Xavier Roche
abd19b8cfa Merge pull request #316 from xroche/chore/changelog-news-symlink
build: symlink ChangeLog and NEWS to history.txt
2026-06-08 20:40:51 +02:00
Xavier Roche
4797749d4d build: symlink ChangeLog and NEWS to history.txt
They were empty automake stubs (GNU strictness requires the files to exist).
Pointing them at history.txt satisfies automake, drops the confusing empty
files, and ships a real changelog in the dist tarball without duplicating
content in git.
2026-06-08 20:40:27 +02:00
Xavier Roche
566b9d5008 Merge pull request #315 from xroche/docs/readme-badges
docs: add CI and license badges to README.md
2026-06-08 20:22:21 +02:00
Xavier Roche
8b6bc1d0ed docs: add CI and license badges to README.md 2026-06-08 20:21:52 +02:00
Xavier Roche
e4fc8ca26f Merge pull request #314 from xroche/ci/github-actions
ci: add GitHub Actions build/test matrix and shell lint
2026-06-08 20:19:11 +02:00
yosinn1-blip
47e59b670b docs: fix preferred spelling in help text
Signed-off-by: Yoshiki <yosinn1@gmail.com>
2026-05-24 06:03:47 +09:00
GermanAizek
e003396432 Corrected spelling, text made more understandable of the Russian translations (Andrei Iliev) 2021-02-10 19:45:31 +03:00
Roman Sęk of Clearcode
5c1ba37adb Fix for handling changes introduced in postprocess 2017-05-04 15:22:56 +02:00
scootergrisen
2f1bde915a Updated danish translation.
Please fix the filenames (Danish.txt/Dansk.txt) which ever way you want to use.
2016-11-28 00:53:00 +01:00
160 changed files with 8252 additions and 3693 deletions

27
.clang-format Normal file
View File

@@ -0,0 +1,27 @@
# clang-format 19 config for the HTTrack C engine.
#
# IMPORTANT: this is applied to TOUCHED LINES ONLY (via git-clang-format / the
# CI format check). The engine was originally formatted by GNU indent / by hand
# and does NOT round-trip through clang-format, so a whole-tree reformat is
# intentionally never done. Format the lines you change; leave the rest.
#
# Reverse-engineered from src/*.c: 2-space indent, no tabs, 80 columns, pointers
# bound to the name (char *x), attached braces, un-indented case labels, and a
# space after C-style casts ((int) x). Most of that is LLVM's defaults; the
# lines below are the deliberate deviations.
BasedOnStyle: LLVM
# Engine specifics / deviations from LLVM:
SpaceAfterCStyleCast: true # "(int) x", overwhelmingly dominant (542 vs 7)
SortIncludes: false # C include order can be significant; never reorder
IncludeBlocks: Preserve # do not merge/reflow include groups
# Stated explicitly for robustness against base-style drift (these match LLVM):
IndentWidth: 2
UseTab: Never
ColumnLimit: 80
PointerAlignment: Right
IndentCaseLabels: false
SpaceBeforeParens: ControlStatements
AllowShortIfStatementsOnASingleLine: Never

35
.githooks/README.md Normal file
View File

@@ -0,0 +1,35 @@
# Git hooks
Versioned hooks for this repo. Enable them once per clone:
```sh
git config core.hooksPath .githooks
```
## pre-commit: auto-format changed C lines
Runs `git-clang-format` (clang-format 19, using the repo `.clang-format`) on the
**staged lines only** and re-stages the result, so every commit is
clang-format-clean and the CI `format` check passes. It never reformats the
whole tree, only the lines you changed.
- Disable for a single commit: `HTTRACK_NO_AUTOFORMAT=1 git commit ...`
- If clang-format 19 isn't installed, the hook skips silently (CI still
enforces). Install it with your distro's `clang-format-19`, or from
apt.llvm.org.
- If a file has *both* staged and unstaged changes, the hook does not
auto-mutate it (that would commit the unstaged part); it instead reports
whether its staged lines need formatting and asks you to stage/stash the rest.
### noexec working trees
Git executes the hook directly, so if your working tree is on a `noexec` mount
git cannot run `.githooks/pre-commit`. Point `core.hooksPath` at a copy on an
exec filesystem instead:
```sh
mkdir -p ~/.httrack-hooks && cp .githooks/pre-commit ~/.httrack-hooks/
chmod +x ~/.httrack-hooks/pre-commit
git config core.hooksPath ~/.httrack-hooks
```
</content>

71
.githooks/pre-commit Executable file
View File

@@ -0,0 +1,71 @@
#!/usr/bin/env bash
#
# Auto-format the staged C lines with clang-format (touched lines only), then
# re-stage them, so commits stay clang-format-clean and CI's format check passes.
#
# Enable once per clone: git config core.hooksPath .githooks
# Skip for one commit: HTTRACK_NO_AUTOFORMAT=1 git commit ...
#
# Matches the CI gate (.clang-format, clang-format 19). It only ever touches the
# lines a commit changes; it never reformats the whole tree.
set -euo pipefail
[ "${HTTRACK_NO_AUTOFORMAT:-}" = "1" ] && exit 0
# Staged C/H files (added/copied/modified/renamed).
mapfile -t files < <(git diff --cached --name-only --diff-filter=ACMR -- '*.c' '*.h')
[ "${#files[@]}" -eq 0 ] && exit 0
# Locate clang-format 19 and the git driver; if absent, skip (CI is the backstop).
cf=""
for c in clang-format-19 clang-format; do
if command -v "$c" >/dev/null 2>&1; then
case "$("$c" --version)" in *"version 19."*)
cf="$c"
break
;;
esac
fi
done
gcf=""
for g in git-clang-format-19 git-clang-format; do
command -v "$g" >/dev/null 2>&1 && {
gcf="$g"
break
}
done
if [ -z "$cf" ] || [ -z "$gcf" ]; then
echo "pre-commit: clang-format 19 not found; skipping auto-format (CI still checks)." >&2
exit 0
fi
# Files that are staged AND also have unstaged changes: re-staging them would
# pull in the unstaged work, so don't auto-mutate. Check instead and let the
# author resolve it.
partial=()
for f in "${files[@]}"; do
if ! git diff --quiet -- "$f"; then partial+=("$f"); fi
done
if [ "${#partial[@]}" -ne 0 ]; then
d="$("$gcf" --binary "$cf" --style=file --staged --diff --extensions c,h || true)"
case "$d" in
"" | "no modified files to format" | *"did not modify any files"*)
exit 0
;; # staged lines already clean
*)
echo "pre-commit: these files have both staged and unstaged changes, so" >&2
echo "auto-format was skipped to avoid committing unstaged work:" >&2
printf ' %s\n' "${partial[@]}" >&2
echo "Their staged lines need formatting. Stage the rest (or stash it)," >&2
echo "or run: $gcf --binary $cf --staged" >&2
exit 1
;;
esac
fi
# Clean-staged files: format the staged lines in the working tree, then re-stage.
"$gcf" --binary "$cf" --style=file --staged --extensions c,h >/dev/null || true
git add -- "${files[@]}"
exit 0

View File

@@ -31,7 +31,7 @@ jobs:
env: env:
CC: ${{ matrix.cc }} CC: ${{ matrix.cc }}
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v6
with: with:
submodules: recursive submodules: recursive
@@ -46,8 +46,8 @@ jobs:
- name: Configure - name: Configure
run: | run: |
set -euo pipefail set -euo pipefail
# autoreconf installs the automake test-driver (not committed) and # Regenerate from configure.ac/Makefile.am to validate them; the
# validates configure.ac, so "make check" works on a fresh checkout. # committed generated files already let a plain checkout build.
autoreconf -fi autoreconf -fi
./configure ./configure
@@ -61,11 +61,148 @@ jobs:
if: failure() if: failure()
run: cat tests/test-suite.log 2>/dev/null || true run: cat tests/test-suite.log 2>/dev/null || true
# Portability: build and test on macOS (Darwin/clang) on a native runner --
# no VM. The tree has no __APPLE__ branches, so Darwin exercises the
# generic-Unix path on a second libc and kernel. brew's openssl@3 is keg-only,
# so point configure at it; everything else is in the SDK or default paths.
macos:
name: build (macOS arm64, clang)
runs-on: macos-14
steps:
- uses: actions/checkout@v6
with:
submodules: recursive
- name: Install build dependencies
run: |
set -euo pipefail
brew install autoconf automake libtool autoconf-archive
- name: Configure
run: |
set -euo pipefail
ssl="$(brew --prefix openssl@3)"
autoreconf -fi
./configure CPPFLAGS="-I${ssl}/include" LDFLAGS="-L${ssl}/lib"
- name: Build
run: make -j"$(sysctl -n hw.ncpu)"
- name: Test
run: make check
- name: Print the test log on failure
if: failure()
run: cat tests/test-suite.log 2>/dev/null || true
# Portability/hardening: 32-bit (i386) build on the x86-64 runner via multilib
# -- no extra hardware. Exercises the 32-bit size_t/pointer ABI, where size
# and bounds math can truncate or wrap in ways 64-bit never reveals (the axis
# the overflow-safe bounds work targets). --build (not --host) keeps configure
# out of cross mode, so the i386 binary still runs the test suite here.
linux-i386:
name: build (linux i386, gcc -m32)
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v6
with:
submodules: recursive
- name: Install build dependencies (multilib + 32-bit libs)
run: |
set -euo pipefail
sudo dpkg --add-architecture i386
sudo apt-get update
sudo apt-get install -y --no-install-recommends \
build-essential gcc-multilib autoconf automake libtool \
autoconf-archive zlib1g-dev:i386 libssl-dev:i386
- name: Configure
run: |
set -euo pipefail
autoreconf -fi
./configure --build=i686-pc-linux-gnu CC="gcc -m32"
- name: Build
run: make -j"$(nproc)"
- name: Test
run: make check
- name: Print the test log on failure
if: failure()
run: cat tests/test-suite.log 2>/dev/null || true
# Validate the Debian packaging via the same script maintainers release with.
# One amd64/gcc run is enough: packaging (control/rules/manifest/lintian/quilt
# source build) is arch- and compiler-independent, and the build matrix above
# already covers compile portability. lintian runs with --fail-on=error.
deb:
name: deb package (lintian)
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v6
with:
submodules: recursive
- name: Install packaging toolchain
run: |
set -euo pipefail
sudo apt-get update
sudo apt-get install -y --no-install-recommends \
build-essential autoconf automake libtool autoconf-archive \
zlib1g-dev libssl-dev \
debhelper devscripts lintian fakeroot
# --unsigned: CI has no GPG key (also skips the release sig/checksums).
# debuild builds every package, then lintian gates on errors.
#
# DEB_BUILD_OPTIONS trims work CI does not need (release builds via
# mkdeb.sh are untouched): noautodbgsym drops the -dbgsym packages whose
# LTO payloads are slow to compress and that CI never ships; parallel uses
# every core. We let debuild run its test pass -- the only one now that
# mkdeb no longer runs its own -- so CI exercises the packaged tests.
- name: Build Debian packages
run: |
export DEB_BUILD_OPTIONS="noautodbgsym parallel=$(nproc)"
bash tools/mkdeb.sh --unsigned --no-release-artifacts
dco:
name: DCO sign-off
# Only checkable on a PR, where we have the base..head commit range.
if: github.event_name == 'pull_request'
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v6
with:
fetch-depth: 0
- name: Every commit must be signed off
env:
BASE: ${{ github.event.pull_request.base.sha }}
HEAD: ${{ github.event.pull_request.head.sha }}
run: |
set -euo pipefail
fail=0
# --no-merges: merge commits are GitHub-generated and carry no sign-off.
for sha in $(git rev-list --no-merges "$BASE..$HEAD"); do
if [ -z "$(git log -1 --format='%(trailers:key=Signed-off-by)' "$sha")" ]; then
echo "Missing Signed-off-by: $(git log -1 --format='%h %s' "$sha")"
fail=1
fi
done
if [ "$fail" -ne 0 ]; then
echo
echo "Sign commits with 'git commit -s'; fix a branch with 'git rebase --signoff $BASE'."
echo "See CONTRIBUTING.md (Developer Certificate of Origin)."
exit 1
fi
lint: lint:
name: lint (shellcheck, shfmt) name: lint (shellcheck, shfmt)
runs-on: ubuntu-24.04 runs-on: ubuntu-24.04
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v6
- name: Install linters - name: Install linters
env: env:
@@ -81,7 +218,65 @@ jobs:
# Lint the scripts we maintain; the legacy scripts are a separate cleanup. # Lint the scripts we maintain; the legacy scripts are a separate cleanup.
- name: shellcheck - name: shellcheck
run: shellcheck man/makeman.sh tools/mkdeb.sh tests/*.test tests/check-network.sh run: shellcheck man/makeman.sh tools/mkdeb.sh .githooks/pre-commit tests/*.test tests/check-network.sh
- name: shfmt - name: shfmt
run: shfmt -d -i 4 man/makeman.sh tools/mkdeb.sh run: shfmt -d -i 4 man/makeman.sh tools/mkdeb.sh .githooks/pre-commit
# Check clang-format on CHANGED LINES ONLY. The engine predates clang-format
# (it was shaped by an old Visual Studio formatter) and does not round-trip,
# so we never reformat the whole tree -- only the lines a PR touches.
format:
name: format (clang-format-19, changed lines)
if: github.event_name == 'pull_request'
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v6
with:
fetch-depth: 0
- name: Install clang-format 19 (pinned, from apt.llvm.org)
run: |
set -euo pipefail
# ubuntu-24.04's native clang-format is 18; pin 19 to match local dev.
wget -qO- https://apt.llvm.org/llvm-snapshot.gpg.key \
| sudo tee /etc/apt/trusted.gpg.d/apt.llvm.org.asc >/dev/null
echo "deb http://apt.llvm.org/noble/ llvm-toolchain-noble-19 main" \
| sudo tee /etc/apt/sources.list.d/llvm-19.list >/dev/null
sudo apt-get update
sudo apt-get install -y --no-install-recommends clang-format-19
# git-clang-format driver, pinned to an immutable release tag (not a
# moving branch) since we curl and then execute it.
sudo curl -fsSL -o /usr/local/bin/git-clang-format \
https://raw.githubusercontent.com/llvm/llvm-project/llvmorg-19.1.7/clang/tools/clang-format/git-clang-format
sudo chmod 0755 /usr/local/bin/git-clang-format
clang-format-19 --version
- name: Check formatting of changed lines
run: |
set -euo pipefail
git fetch --no-tags origin \
"+refs/heads/${{ github.base_ref }}:refs/remotes/origin/${{ github.base_ref }}"
base="origin/${{ github.base_ref }}"
set +e
diff="$(git clang-format --binary clang-format-19 --style=file \
--diff --extensions c,h "$base")"
rc=$?
set -e
# Classify by output first: a non-empty diff means "not clean",
# regardless of the driver's exit convention (the release-tag driver
# exits 0 and signals via stdout; some packaged drivers exit 1 on a
# diff). A nonzero exit with clean output is a real checker error.
case "$diff" in
"" | "no modified files to format" | *"did not modify any files"*)
if [ "$rc" -ne 0 ]; then
echo "::error::git clang-format failed (exit $rc): checker error."
exit 1
fi
echo "Formatting OK: changed C lines are clang-format-clean." ;;
*)
echo "$diff"
echo "::error::Changed C lines are not clang-format-clean."
echo "Fix locally with: git clang-format --binary clang-format-19 $base"
exit 1 ;;
esac

83
CODE_OF_CONDUCT.md Normal file
View File

@@ -0,0 +1,83 @@
# Contributor Covenant Code of Conduct
## Our Pledge
We as members, contributors, and leaders pledge to make participation in our community a harassment-free experience for everyone, regardless of age, body size, visible or invisible disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, caste, color, religion, or sexual identity and orientation.
We pledge to act and interact in ways that contribute to an open, welcoming, diverse, inclusive, and healthy community.
## Our Standards
Examples of behavior that contributes to a positive environment for our community include:
* Demonstrating empathy and kindness toward other people
* Being respectful of differing opinions, viewpoints, and experiences
* Giving and gracefully accepting constructive feedback
* Accepting responsibility and apologizing to those affected by our mistakes, and learning from the experience
* Focusing on what is best not just for us as individuals, but for the overall community
Examples of unacceptable behavior include:
* The use of sexualized language or imagery, and sexual attention or advances of any kind
* Trolling, insulting or derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or email address, without their explicit permission
* Other conduct which could reasonably be considered inappropriate in a professional setting
## Enforcement Responsibilities
Community leaders are responsible for clarifying and enforcing our standards of acceptable behavior and will take appropriate and fair corrective action in response to any behavior that they deem inappropriate, threatening, offensive, or harmful.
Community leaders have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, and will communicate reasons for moderation decisions when appropriate.
## Scope
This Code of Conduct applies within all community spaces, and also applies when an individual is officially representing the community in public spaces. Examples of representing our community include using an official e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event.
## Enforcement
Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the community leaders responsible for enforcement at <roche@httrack.com>. All complaints will be reviewed and investigated promptly and fairly.
All community leaders are obligated to respect the privacy and security of the reporter of any incident.
## Enforcement Guidelines
Community leaders will follow these Community Impact Guidelines in determining the consequences for any action they deem in violation of this Code of Conduct:
### 1. Correction
**Community Impact**: Use of inappropriate language or other behavior deemed unprofessional or unwelcome in the community.
**Consequence**: A private, written warning from community leaders, providing clarity around the nature of the violation and an explanation of why the behavior was inappropriate. A public apology may be requested.
### 2. Warning
**Community Impact**: A violation through a single incident or series of actions.
**Consequence**: A warning with consequences for continued behavior. No interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, for a specified period of time. This includes avoiding interactions in community spaces as well as external channels like social media. Violating these terms may lead to a temporary or permanent ban.
### 3. Temporary Ban
**Community Impact**: A serious violation of community standards, including sustained inappropriate behavior.
**Consequence**: A temporary ban from any sort of interaction or public communication with the community for a specified period of time. No public or private interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, is allowed during this period. Violating these terms may lead to a permanent ban.
### 4. Permanent Ban
**Community Impact**: Demonstrating a pattern of violation of community standards, including sustained inappropriate behavior, harassment of an individual, or aggression toward or disparagement of classes of individuals.
**Consequence**: A permanent ban from any sort of public interaction within the community.
## Attribution
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 2.1, available at [https://www.contributor-covenant.org/version/2/1/code_of_conduct.html][v2.1].
Community Impact Guidelines were inspired by [Mozilla's code of conduct enforcement ladder][Mozilla CoC].
For answers to common questions about this code of conduct, see the FAQ at [https://www.contributor-covenant.org/faq][FAQ]. Translations are available at [https://www.contributor-covenant.org/translations][translations].
[homepage]: https://www.contributor-covenant.org
[v2.1]: https://www.contributor-covenant.org/version/2/1/code_of_conduct.html
[Mozilla CoC]: https://github.com/mozilla/diversity
[FAQ]: https://www.contributor-covenant.org/faq
[translations]: https://www.contributor-covenant.org/translations

39
CONTRIBUTING.md Normal file
View File

@@ -0,0 +1,39 @@
# Contributing to HTTrack
HTTrack is small and old. Keep changes easy to review and safe to merge.
## Pull requests
- One change per PR. Small diffs merge fast.
- PRs are squash-merged: the title and description become the commit message, so
explain *why*.
- Add or update tests for engine changes (`tests/`), and keep CI green.
## Style
- C, matching nearby code. **Format only the lines you change** (`git
clang-format` against the repo `.clang-format`). Never reformat untouched code.
- Comment the *why*, in English.
- HTTrack parses hostile input off the network. Check bounds, avoid unchecked
copies, and never let an attacker-controlled length drive arithmetic unchecked.
## Sign your work
Every commit needs a `Signed-off-by` line, the
[DCO](https://developercertificate.org/): `git commit -s`. CI rejects unsigned
commits; fix a branch with `git rebase --signoff master`.
## AI assistants
Welcome, and nothing to disclose. Two rules:
- **Own every line** as if you wrote it. Can't explain it in review? Not ready.
- **Don't push your work onto reviewers.** A raw generated patch a maintainer has
to vet from scratch will be closed.
The sign-off covers AI-assisted code too.
## Bugs
Open an issue with the version, OS, command used, and expected vs actual result.
For security issues see [SECURITY.md](SECURITY.md), not a public issue.

View File

1
ChangeLog Symbolic link
View File

@@ -0,0 +1 @@
history.txt

451
INSTALL
View File

@@ -1,177 +1,177 @@
Installation Instructions Installation Instructions
************************* *************************
Copyright (C) 1994-1996, 1999-2002, 2004-2017, 2020-2021 Free
Software Foundation, Inc.
Copying and distribution of this file, with or without modification,
are permitted in any medium without royalty provided the copyright
notice and this notice are preserved. This file is offered as-is,
without warranty of any kind.
Basic Installation Basic Installation
================== ==================
Briefly, the shell command './configure && make && make install' The following shell commands:
should configure, build, and install this package. The following
more-detailed instructions are generic; see the 'README' file for
instructions specific to this package. Some packages provide this
'INSTALL' file but do not implement all of the features documented
below. The lack of an optional feature in a given package is not
necessarily a bug. More recommendations for GNU packages can be found
in *note Makefile Conventions: (standards)Makefile Conventions.
The 'configure' shell script attempts to guess correct values for test -f configure || ./bootstrap
./configure
make
make install
should configure, build, and install this package. The first line,
which bootstraps, is intended for developers; when building from
distribution tarballs it does nothing and can be skipped.
The following more-detailed instructions are generic; see the
README file for instructions specific to this package. Some packages
provide this INSTALL file but do not implement all of the features
documented below. The lack of an optional feature in a given package is
not necessarily a bug. More recommendations for GNU packages can be
found in the GNU Coding Standards.
Many packages have scripts meant for developers instead of ordinary
builders, as they may use developer tools that are less commonly
installed, or they may access the network, which has privacy
implications. If the bootstrap shell script exists, it attempts to
build the configure shell script and related files, possibly using
developer tools or the network. Because the output of bootstrap is
system-independent, it is normally run by a package developer so that
its output can be put into the distribution tarball and ordinary
builders and users need not run bootstrap. Some packages have
commands like ./autopull.sh and ./autogen.sh that you can run
instead of ./bootstrap, for more fine-grained control over
bootstrapping.
The configure shell script attempts to guess correct values for
various system-dependent variables used during compilation. It uses various system-dependent variables used during compilation. It uses
those values to create a 'Makefile' in each directory of the package. those values to create a Makefile in each directory of the package.
It may also create one or more '.h' files containing system-dependent It may also create one or more .h files containing system-dependent
definitions. Finally, it creates a shell script 'config.status' that definitions. Finally, it creates a shell script config.status that
you can run in the future to recreate the current configuration, and a you can run in the future to recreate the current configuration, and a
file 'config.log' containing compiler output (useful mainly for file config.log containing output useful for debugging configure.
debugging 'configure').
It can also use an optional file (typically called 'config.cache' and It can also use an optional file (typically called config.cache and
enabled with '--cache-file=config.cache' or simply '-C') that saves the enabled with --cache-file=config.cache or simply -C) that saves the
results of its tests to speed up reconfiguring. Caching is disabled by results of its tests to speed up reconfiguring. Caching is disabled by
default to prevent problems with accidental use of stale cache files. default to prevent problems with accidental use of stale cache files.
If you need to do unusual things to compile the package, please try If you need to do unusual things to compile the package, please try
to figure out how 'configure' could check whether to do them, and mail to figure out how configure could check whether to do them, and mail
diffs or instructions to the address given in the 'README' so they can diffs or instructions to the address given in the README so they can
be considered for the next release. If you are using the cache, and at be considered for the next release. If you are using the cache, and at
some point 'config.cache' contains results you don't want to keep, you some point config.cache contains results you dont want to keep, you
may remove or edit it. may remove or edit it.
The file 'configure.ac' (or 'configure.in') is used to create The autoconf program generates configure from the file
'configure' by a program called 'autoconf'. You need 'configure.ac' if configure.ac. Normally you should edit configure.ac instead of
you want to change it or regenerate 'configure' using a newer version of editing configure directly.
'autoconf'.
The simplest way to compile this package is: The simplest way to compile this package is:
1. 'cd' to the directory containing the package's source code and type 1. cd to the directory containing the packages source code.
'./configure' to configure the package for your system.
Running 'configure' might take a while. While running, it prints 2. If this is a developer checkout and file configure does not yet
some messages telling which features it is checking for. exist, type ./bootstrap to create it. You may need special
developer tools and network access to bootstrap, and the network
access may have privacy implications.
2. Type 'make' to compile the package. 3. Type ./configure to configure the package for your system. This
might take a while. While running, configure prints messages
telling which features it is checking for.
3. Optionally, type 'make check' to run any self-tests that come with 4. Type make to compile the package.
5. Optionally, type make check to run any self-tests that come with
the package, generally using the just-built uninstalled binaries. the package, generally using the just-built uninstalled binaries.
4. Type 'make install' to install the programs and any data files and 6. Type make install to install the programs and any data files and
documentation. When installing into a prefix owned by root, it is documentation. When installing into a prefix owned by root, it is
recommended that the package be configured and built as a regular recommended that the package be configured and built as a regular
user, and only the 'make install' phase executed with root user, and only the make install phase executed with root
privileges. privileges.
5. Optionally, type 'make installcheck' to repeat any self-tests, but 7. Optionally, type make installcheck to repeat any self-tests, but
this time using the binaries in their final installed location. this time using the binaries in their final installed location.
This target does not install anything. Running this target as a This target does not install anything. Running this target as a
regular user, particularly if the prior 'make install' required regular user, particularly if the prior make install required
root privileges, verifies that the installation completed root privileges, verifies that the installation completed
correctly. correctly.
6. You can remove the program binaries and object files from the 8. You can remove the program binaries and object files from the
source code directory by typing 'make clean'. To also remove the source code directory by typing make clean. To also remove the
files that 'configure' created (so you can compile the package for files that configure created (so you can compile the package for
a different kind of computer), type 'make distclean'. There is a different kind of computer), type make distclean. There is
also a 'make maintainer-clean' target, but that is intended mainly also a make maintainer-clean target, but that is intended mainly
for the package's developers. If you use it, you may have to get for the packages developers. If you use it, you may have to
all sorts of other programs in order to regenerate files that came bootstrap again.
with the distribution.
7. Often, you can also type 'make uninstall' to remove the installed 9. If the package follows the GNU Coding Standards, you can type make
files again. In practice, not all packages have tested that uninstall to remove the installed files.
uninstallation works correctly, even though it is required by the
GNU Coding Standards.
8. Some packages, particularly those that use Automake, provide 'make
distcheck', which can by used by developers to test that all other
targets like 'make install' and 'make uninstall' work correctly.
This target is generally not run by end users.
Compilers and Options Compilers and Options
===================== =====================
Some systems require unusual options for compilation or linking that Some systems require unusual options for compilation or linking that
the 'configure' script does not know about. Run './configure --help' the configure script does not know about. Run ./configure --help
for details on some of the pertinent environment variables. for details on some of the pertinent environment variables.
You can give 'configure' initial values for configuration parameters You can give configure initial values for configuration parameters
by setting variables in the command line or in the environment. Here is by setting variables in the command line or in the environment. Here is
an example: an example:
./configure CC=c99 CFLAGS=-g LIBS=-lposix ./configure CC=gcc CFLAGS=-g LIBS=-lposix
*Note Defining Variables::, for more details. See Defining Variables for more details.
Compiling For Multiple Architectures Compiling For Multiple Architectures
==================================== ====================================
You can compile the package for more than one kind of computer at the You can compile the package for more than one kind of computer at the
same time, by placing the object files for each architecture in their same time, by placing the object files for each system in their own
own directory. To do this, you can use GNU 'make'. 'cd' to the directory. To do this, you can use GNU make. cd to the directory
directory where you want the object files and executables to go and run where you want the object files and executables to go and run the
the 'configure' script. 'configure' automatically checks for the source configure script. configure automatically checks for the source
code in the directory that 'configure' is in and in '..'. This is known code in the directory that configure is in and in ... This is known
as a "VPATH" build. as a VPATH build.
With a non-GNU 'make', it is safer to compile the package for one With a non-GNU make, it is safer to compile the package for one
architecture at a time in the source code directory. After you have system at a time in the source code directory. After you have installed
installed the package for one architecture, use 'make distclean' before the package for one system, use make distclean before reconfiguring
reconfiguring for another architecture. for another system.
On MacOS X 10.5 and later systems, you can create libraries and Some platforms, notably macOS, support “fat” or “universal” binaries,
executables that work on multiple system types--known as "fat" or where a single binary can execute on different architectures. On these
"universal" binaries--by specifying multiple '-arch' options to the platforms you can configure and compile just once, with options specific
compiler but only a single '-arch' option to the preprocessor. Like to that platform.
this:
./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
CPP="gcc -E" CXXCPP="g++ -E"
This is not guaranteed to produce working output in all cases, you
may have to build one architecture at a time and combine the results
using the 'lipo' tool if you have problems.
Installation Names Installation Names
================== ==================
By default, 'make install' installs the package's commands under By default, make install installs the packages commands under
'/usr/local/bin', include files under '/usr/local/include', etc. You /usr/local/bin, include files under /usr/local/include, etc. You
can specify an installation prefix other than '/usr/local' by giving can specify an installation prefix other than /usr/local by giving
'configure' the option '--prefix=PREFIX', where PREFIX must be an configure the option --prefix=PREFIX, where PREFIX must be an
absolute file name. absolute file name.
You can specify separate installation prefixes for You can specify separate installation prefixes for
architecture-specific files and architecture-independent files. If you architecture-specific files and architecture-independent files. If you
pass the option '--exec-prefix=PREFIX' to 'configure', the package uses pass the option --exec-prefix=PREFIX to configure, the package uses
PREFIX as the prefix for installing programs and libraries. PREFIX as the prefix for installing programs and libraries.
Documentation and other data files still use the regular prefix. Documentation and other data files still use the regular prefix.
In addition, if you use an unusual directory layout you can give In addition, if you use an unusual directory layout you can give
options like '--bindir=DIR' to specify different values for particular options like --bindir=DIR to specify different values for particular
kinds of files. Run 'configure --help' for a list of the directories kinds of files. Run configure --help for a list of the directories
you can set and what kinds of files go in them. In general, the default you can set and what kinds of files go in them. In general, the default
for these options is expressed in terms of '${prefix}', so that for these options is expressed in terms of ${prefix}, so that
specifying just '--prefix' will affect all of the other directory specifying just --prefix will affect all of the other directory
specifications that were not explicitly provided. specifications that were not explicitly provided.
The most portable way to affect installation locations is to pass the The most portable way to affect installation locations is to pass the
correct locations to 'configure'; however, many packages provide one or correct locations to configure; however, many packages provide one or
both of the following shortcuts of passing variable assignments to the both of the following shortcuts of passing variable assignments to the
'make install' command line to change installation locations without make install command line to change installation locations without
having to reconfigure or recompile. having to reconfigure or recompile.
The first method involves providing an override variable for each The first method involves providing an override variable for each
affected directory. For example, 'make install affected directory. For example, make install
prefix=/alternate/directory' will choose an alternate location for all prefix=/alternate/directory will choose an alternate location for all
directory configuration variables that were expressed in terms of directory configuration variables that were expressed in terms of
'${prefix}'. Any directories that were specified during 'configure', ${prefix}. Any directories that were specified during configure,
but not in terms of '${prefix}', must each be overridden at install time but not in terms of ${prefix}, must each be overridden at install time
for the entire installation to be relocated. The approach of makefile for the entire installation to be relocated. The approach of makefile
variable overrides for each directory variable is required by the GNU variable overrides for each directory variable is required by the GNU
Coding Standards, and ideally causes no recompilation. However, some Coding Standards, and ideally causes no recompilation. However, some
@@ -179,190 +179,187 @@ platforms have known limitations with the semantics of shared libraries
that end up requiring recompilation when using this method, particularly that end up requiring recompilation when using this method, particularly
noticeable in packages that use GNU Libtool. noticeable in packages that use GNU Libtool.
The second method involves providing the 'DESTDIR' variable. For The second method involves providing the DESTDIR variable. For
example, 'make install DESTDIR=/alternate/directory' will prepend example, make install DESTDIR=/alternate/directory will prepend
'/alternate/directory' before all installation names. The approach of /alternate/directory before all installation names. The approach of
'DESTDIR' overrides is not required by the GNU Coding Standards, and DESTDIR overrides is not required by the GNU Coding Standards, and
does not work on platforms that have drive letters. On the other hand, does not work on platforms that have drive letters. On the other hand,
it does better at avoiding recompilation issues, and works well even it does better at avoiding recompilation issues, and works well even
when some directory options were not specified in terms of '${prefix}' when some directory options were not specified in terms of ${prefix}
at 'configure' time. at configure time.
Optional Features Optional Features
================= =================
If the package supports it, you can cause programs to be installed If the package supports it, you can cause programs to be installed
with an extra prefix or suffix on their names by giving 'configure' the with an extra prefix or suffix on their names by giving configure the
option '--program-prefix=PREFIX' or '--program-suffix=SUFFIX'. option --program-prefix=PREFIX or --program-suffix=SUFFIX.
Some packages pay attention to '--enable-FEATURE' options to Some packages pay attention to --enable-FEATURE and
'configure', where FEATURE indicates an optional part of the package. --disable-FEATURE options to configure, where FEATURE indicates an
They may also pay attention to '--with-PACKAGE' options, where PACKAGE optional part of the package. They may also pay attention to
is something like 'gnu-as' or 'x' (for the X Window System). The --with-PACKAGE and --without-PACKAGE options, where PACKAGE is
'README' should mention any '--enable-' and '--with-' options that the something like gnu-ld. ./configure --help should mention the
package recognizes. --enable-... and --with-... options that the package recognizes.
For packages that use the X Window System, 'configure' can usually
find the X include and library files automatically, but if it doesn't,
you can use the 'configure' options '--x-includes=DIR' and
'--x-libraries=DIR' to specify their locations.
Some packages offer the ability to configure how verbose the Some packages offer the ability to configure how verbose the
execution of 'make' will be. For these packages, running './configure execution of make will be. For these packages, running ./configure
--enable-silent-rules' sets the default to minimal output, which can be --enable-silent-rules sets the default to minimal output, which can be
overridden with 'make V=1'; while running './configure overridden with make V=1; while running ./configure
--disable-silent-rules' sets the default to verbose, which can be --disable-silent-rules sets the default to verbose, which can be
overridden with 'make V=0'. overridden with make V=0.
Particular systems Specifying a System Type
================== ========================
On HP-UX, the default C compiler is not ANSI C compatible. If GNU CC By default configure builds for the current system. To create
is not installed, it is recommended to use the following options in binaries that can run on a different system type, specify a
order to use an ANSI C compiler: --host=TYPE option along with compiler variables that specify how to
generate object code for TYPE. For example, to create binaries intended
to run on a 64-bit ARM processor:
./configure CC="cc -Ae -D_XOPEN_SOURCE=500" ./configure --host=aarch64-linux-gnu \
CC=aarch64-linux-gnu-gcc \
CXX=aarch64-linux-gnu-g++
and if that doesn't work, install pre-built binaries of GCC for HP-UX. If done on a machine that can execute these binaries (e.g., via
qemu-aarch64, $QEMU_LD_PREFIX, and Linuxs binfmt_misc
capability), the build behaves like a native build. Otherwise it is a
cross-build: configure will make cross-compilation guesses instead of
running test programs, and make check will not work.
HP-UX 'make' updates targets which have the same timestamps as their A system type can either be a short name like mingw64, or a
prerequisites, which makes it generally unusable when shipped generated canonical name like x86_64-pc-linux-gnu. Canonical names have the
files such as 'configure' are involved. Use GNU 'make' instead. form CPU-COMPANY-SYSTEM where SYSTEM is either OS or KERNEL-OS. To
canonicalize and validate a system type, you can run the command
config.sub, which is often squirreled away in a subdirectory like
build-aux. For example:
On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot $ build-aux/config.sub arm64-linux
parse its '<wchar.h>' header file. The option '-nodtk' can be used as a aarch64-unknown-linux-gnu
workaround. If GNU CC is not installed, it is therefore recommended to $ build-aux/config.sub riscv-lnx
try Invalid configuration 'riscv-lnx': OS 'lnx' not recognized
./configure CC="cc" You can look at the config.sub file to see which types are recognized.
If the file is absent, this package does not need the system type.
and if that doesn't work, try If configure fails with the diagnostic “cannot guess build type”.
config.sub did not recognize your systems type. In this case, first
fetch the newest versions of these files from the GNU config package
(https://savannah.gnu.org/projects/config). If that fixes things,
please report it to the maintainers of the package containing
configure. Otherwise, you can try the configure option --build=TYPE
where TYPE comes close to your system type; also, please report the
problem to <config-patches@gnu.org>.
./configure CC="cc -nodtk" For more details about configuring system types, see the Autoconf
documentation.
On Solaris, don't put '/usr/ucb' early in your 'PATH'. This
directory contains several dysfunctional programs; working variants of
these programs are available in '/usr/bin'. So, if you need '/usr/ucb'
in your 'PATH', put it _after_ '/usr/bin'.
On Haiku, software installed for all users goes in '/boot/common',
not '/usr/local'. It is recommended to use the following options:
./configure --prefix=/boot/common
Specifying the System Type
==========================
There may be some features 'configure' cannot figure out
automatically, but needs to determine by the type of machine the package
will run on. Usually, assuming the package is built to be run on the
_same_ architectures, 'configure' can figure that out, but if it prints
a message saying it cannot guess the machine type, give it the
'--build=TYPE' option. TYPE can either be a short name for the system
type, such as 'sun4', or a canonical name which has the form:
CPU-COMPANY-SYSTEM
where SYSTEM can have one of these forms:
OS
KERNEL-OS
See the file 'config.sub' for the possible values of each field. If
'config.sub' isn't included in this package, then this package doesn't
need to know the machine type.
If you are _building_ compiler tools for cross-compiling, you should
use the option '--target=TYPE' to select the type of system they will
produce code for.
If you want to _use_ a cross compiler, that generates code for a
platform different from the build platform, you should specify the
"host" platform (i.e., that on which the generated programs will
eventually be run) with '--host=TYPE'.
Sharing Defaults Sharing Defaults
================ ================
If you want to set default values for 'configure' scripts to share, If you want to set default values for configure scripts to share,
you can create a site shell script called 'config.site' that gives you can create a site shell script called config.site that gives
default values for variables like 'CC', 'cache_file', and 'prefix'. default values for variables like CC, cache_file, and prefix.
'configure' looks for 'PREFIX/share/config.site' if it exists, then configure looks for PREFIX/share/config.site if it exists, then
'PREFIX/etc/config.site' if it exists. Or, you can set the PREFIX/etc/config.site if it exists. Or, you can set the
'CONFIG_SITE' environment variable to the location of the site script. CONFIG_SITE environment variable to the location of the site script.
A warning: not all 'configure' scripts look for a site script. A warning: not all configure scripts look for a site script.
Defining Variables Defining Variables
================== ==================
Variables not defined in a site shell script can be set in the Variables not defined in a site shell script can be set in the
environment passed to 'configure'. However, some packages may run environment passed to configure. However, some packages may run
configure again during the build, and the customized values of these configure again during the build, and the customized values of these
variables may be lost. In order to avoid this problem, you should set variables may be lost. In order to avoid this problem, you should set
them in the 'configure' command line, using 'VAR=value'. For example: them in the configure command line, using VAR=value. For example:
./configure CC=/usr/local2/bin/gcc ./configure CC=/usr/local2/bin/gcc
causes the specified 'gcc' to be used as the C compiler (unless it is causes the specified gcc to be used as the C compiler (unless it is
overridden in the site shell script). overridden in the site shell script).
Unfortunately, this technique does not work for 'CONFIG_SHELL' due to an Unfortunately, this technique does not work for CONFIG_SHELL due to an
Autoconf limitation. Until the limitation is lifted, you can use this Autoconf limitation. Until the limitation is lifted, you can use this
workaround: workaround:
CONFIG_SHELL=/bin/bash ./configure CONFIG_SHELL=/bin/bash CONFIG_SHELL=/bin/bash ./configure CONFIG_SHELL=/bin/bash
'configure' Invocation configure Invocation
====================== ======================
'configure' recognizes the following options to control how it configure recognizes the following options to control how it
operates. operates.
'--help' --help
'-h' -h
Print a summary of all of the options to 'configure', and exit. Print a summary of all of the options to configure, and exit.
'--help=short' --help=short
'--help=recursive' --help=recursive
Print a summary of the options unique to this package's Print a summary of the options unique to this packages
'configure', and exit. The 'short' variant lists options used only configure, and exit. The short variant lists options used only
in the top level, while the 'recursive' variant lists options also in the top level, while the recursive variant lists options also
present in any nested packages. present in any nested packages.
'--version' --version
'-V' -V
Print the version of Autoconf used to generate the 'configure' Print the version of Autoconf used to generate the configure
script, and exit. script, and exit.
'--cache-file=FILE' --cache-file=FILE
Enable the cache: use and save the results of the tests in FILE, Enable the cache: use and save the results of the tests in FILE,
traditionally 'config.cache'. FILE defaults to '/dev/null' to traditionally config.cache. FILE defaults to /dev/null to
disable caching. disable caching.
'--config-cache' --config-cache
'-C' -C
Alias for '--cache-file=config.cache'. Alias for --cache-file=config.cache.
'--quiet' --srcdir=DIR
'--silent' Look for the packages source code in directory DIR. Usually
'-q' configure can determine that directory automatically.
Do not print messages saying which checks are being made. To
suppress all normal output, redirect it to '/dev/null' (any error
messages will still be shown).
'--srcdir=DIR' --prefix=DIR
Look for the package's source code in directory DIR. Usually Use DIR as the installation prefix. See “Installation Names” for
'configure' can determine that directory automatically.
'--prefix=DIR'
Use DIR as the installation prefix. *note Installation Names:: for
more details, including other options available for fine-tuning the more details, including other options available for fine-tuning the
installation locations. installation locations.
'--no-create' --host=TYPE
'-n' Build binaries for system TYPE. See “Specifying a System Type”.
--enable-FEATURE
--disable-FEATURE
Enable or disable the optional FEATURE. See “Optional Features”.
--with-PACKAGE
--without-PACKAGE
Use or omit PACKAGE when building. See “Optional Features”.
--quiet
--silent
-q
Do not print messages saying which checks are being made. To
suppress all normal output, redirect it to /dev/null (any error
messages will still be shown).
--no-create
-n
Run the configure checks, but stop before creating any output Run the configure checks, but stop before creating any output
files. files.
'configure' also accepts some other, not widely useful, options. Run configure also recognizes several environment variables, and accepts
'configure --help' for more details. some other, less widely useful, options. Run configure --help for
more details.
Copyright notice
================
Copyright © 19941996, 19992002, 20042017, 20202024 Free Software
Foundation, Inc.
Copying and distribution of this file, with or without modification,
are permitted in any medium without royalty provided the copyright
notice and this notice are preserved. This file is offered as-is,
without warranty of any kind.

View File

@@ -1,7 +1,7 @@
# Makefile.in generated by automake 1.16.5 from Makefile.am. # Makefile.in generated by automake 1.17 from Makefile.am.
# @configure_input@ # @configure_input@
# Copyright (C) 1994-2021 Free Software Foundation, Inc. # Copyright (C) 1994-2024 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation # This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it, # gives unlimited permission to copy and/or distribute it,
@@ -69,6 +69,8 @@ am__make_running_with_option = \
test $$has_opt = yes test $$has_opt = yes
am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_dryrun = (target_option=n; $(am__make_running_with_option))
am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
am__rm_f = rm -f $(am__rm_f_notfound)
am__rm_rf = rm -rf $(am__rm_f_notfound)
pkgdatadir = $(datadir)/@PACKAGE@ pkgdatadir = $(datadir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@
@@ -166,8 +168,8 @@ distdir = $(PACKAGE)-$(VERSION)
top_distdir = $(distdir) top_distdir = $(distdir)
am__remove_distdir = \ am__remove_distdir = \
if test -d "$(distdir)"; then \ if test -d "$(distdir)"; then \
find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ find "$(distdir)" -type d ! -perm -700 -exec chmod u+rwx {} ';' \
&& rm -rf "$(distdir)" \ ; rm -rf "$(distdir)" \
|| { sleep 5 && rm -rf "$(distdir)"; }; \ || { sleep 5 && rm -rf "$(distdir)"; }; \
else :; fi else :; fi
am__post_remove_distdir = $(am__remove_distdir) am__post_remove_distdir = $(am__remove_distdir)
@@ -197,14 +199,16 @@ am__relativize = \
done; \ done; \
reldir="$$dir2" reldir="$$dir2"
DIST_ARCHIVES = $(distdir).tar.gz DIST_ARCHIVES = $(distdir).tar.gz
GZIP_ENV = --best GZIP_ENV = -9
DIST_TARGETS = dist-gzip DIST_TARGETS = dist-gzip
# Exists only to be overridden by the user if desired. # Exists only to be overridden by the user if desired.
AM_DISTCHECK_DVI_TARGET = dvi AM_DISTCHECK_DVI_TARGET = dvi
distuninstallcheck_listfiles = find . -type f -print distuninstallcheck_listfiles = find . -type f -print
am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \ am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \
| sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$' | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$'
distcleancheck_listfiles = find . -type f -print distcleancheck_listfiles = \
find . \( -type f -a \! \
\( -name .nfs* -o -name .smb* -o -name .__afs* \) \) -print
ACLOCAL = @ACLOCAL@ ACLOCAL = @ACLOCAL@
AMTAR = @AMTAR@ AMTAR = @AMTAR@
AM_CFLAGS = @AM_CFLAGS@ AM_CFLAGS = @AM_CFLAGS@
@@ -214,6 +218,7 @@ AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@ AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@ AUTOMAKE = @AUTOMAKE@
AWK = @AWK@ AWK = @AWK@
BASH = @BASH@
CC = @CC@ CC = @CC@
CCDEPMODE = @CCDEPMODE@ CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@ CFLAGS = @CFLAGS@
@@ -252,6 +257,7 @@ LD = @LD@
LDFLAGS = @LDFLAGS@ LDFLAGS = @LDFLAGS@
LDFLAGS_PIE = @LDFLAGS_PIE@ LDFLAGS_PIE = @LDFLAGS_PIE@
LFS_FLAG = @LFS_FLAG@ LFS_FLAG = @LFS_FLAG@
LIBC_FORCE_LINK = @LIBC_FORCE_LINK@
LIBOBJS = @LIBOBJS@ LIBOBJS = @LIBOBJS@
LIBS = @LIBS@ LIBS = @LIBS@
LIBTOOL = @LIBTOOL@ LIBTOOL = @LIBTOOL@
@@ -302,8 +308,10 @@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
am__include = @am__include@ am__include = @am__include@
am__leading_dot = @am__leading_dot@ am__leading_dot = @am__leading_dot@
am__quote = @am__quote@ am__quote = @am__quote@
am__rm_f_notfound = @am__rm_f_notfound@
am__tar = @am__tar@ am__tar = @am__tar@
am__untar = @am__untar@ am__untar = @am__untar@
am__xargs_n = @am__xargs_n@
bindir = @bindir@ bindir = @bindir@
build = @build@ build = @build@
build_alias = @build_alias@ build_alias = @build_alias@
@@ -400,12 +408,12 @@ config.h: stamp-h1
@test -f $@ || $(MAKE) $(AM_MAKEFLAGS) stamp-h1 @test -f $@ || $(MAKE) $(AM_MAKEFLAGS) stamp-h1
stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status
@rm -f stamp-h1 $(AM_V_at)rm -f stamp-h1
cd $(top_builddir) && $(SHELL) ./config.status config.h $(AM_V_GEN)cd $(top_builddir) && $(SHELL) ./config.status config.h
$(srcdir)/config.h.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) $(srcdir)/config.h.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
($(am__cd) $(top_srcdir) && $(AUTOHEADER)) $(AM_V_GEN)($(am__cd) $(top_srcdir) && $(AUTOHEADER))
rm -f stamp-h1 $(AM_V_at)rm -f stamp-h1
touch $@ $(AM_V_at)touch $@
distclean-hdr: distclean-hdr:
-rm -f config.h stamp-h1 -rm -f config.h stamp-h1
@@ -529,7 +537,7 @@ distdir: $(BUILT_SOURCES)
distdir-am: $(DISTFILES) distdir-am: $(DISTFILES)
$(am__remove_distdir) $(am__remove_distdir)
test -d "$(distdir)" || mkdir "$(distdir)" $(AM_V_at)$(MKDIR_P) "$(distdir)"
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
list='$(DISTFILES)'; \ list='$(DISTFILES)'; \
@@ -640,7 +648,7 @@ dist dist-all:
distcheck: dist distcheck: dist
case '$(DIST_ARCHIVES)' in \ case '$(DIST_ARCHIVES)' in \
*.tar.gz*) \ *.tar.gz*) \
eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).tar.gz | $(am__untar) ;;\ eval GZIP= gzip -dc $(distdir).tar.gz | $(am__untar) ;;\
*.tar.bz2*) \ *.tar.bz2*) \
bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\
*.tar.lz*) \ *.tar.lz*) \
@@ -650,7 +658,7 @@ distcheck: dist
*.tar.Z*) \ *.tar.Z*) \
uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
*.shar.gz*) \ *.shar.gz*) \
eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).shar.gz | unshar ;;\ eval GZIP= gzip -dc $(distdir).shar.gz | unshar ;;\
*.zip*) \ *.zip*) \
unzip $(distdir).zip ;;\ unzip $(distdir).zip ;;\
*.tar.zst*) \ *.tar.zst*) \
@@ -750,8 +758,8 @@ mostlyclean-generic:
clean-generic: clean-generic:
distclean-generic: distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -$(am__rm_f) $(CONFIG_CLEAN_FILES)
-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) -test . = "$(srcdir)" || $(am__rm_f) $(CONFIG_CLEAN_VPATH_FILES)
maintainer-clean-generic: maintainer-clean-generic:
@echo "This command is intended for maintainers to use" @echo "This command is intended for maintainers to use"
@@ -854,3 +862,10 @@ deb:
# Tell versions [3.59,3.63) of GNU make to not export all variables. # Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded. # Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT: .NOEXPORT:
# Tell GNU make to disable its built-in pattern rules.
%:: %,v
%:: RCS/%,v
%:: RCS/%
%:: s.%
%:: SCCS/s.%

0
NEWS
View File

1
NEWS Symbolic link
View File

@@ -0,0 +1 @@
history.txt

8
README
View File

@@ -4,11 +4,9 @@ Copyright (C) 1998-2017 Xavier Roche and other contributors
Welcome to HTTrack Website Copier! Welcome to HTTrack Website Copier!
Ethical use: Ethical use: we kindly ask that you NOT use this software to harvest email
addresses or to collect any other private information about people. Doing so
We ask that you do not use HTTrack to grab email addresses or to collect any would dishonor our work and waste the many hours we have spent on it.
other private information on people. This would disgrace our work and the many
hours we have spent on it.
Information: Information:

View File

@@ -1,5 +1,8 @@
# HTTrack Website Copier - Development Repository # HTTrack Website Copier - Development Repository
[![CI](https://github.com/xroche/httrack/actions/workflows/ci.yml/badge.svg?branch=master)](https://github.com/xroche/httrack/actions/workflows/ci.yml)
[![License](https://img.shields.io/github/license/xroche/httrack)](COPYING)
## About ## About
_Copy websites to your computer (Offline browser)_ _Copy websites to your computer (Offline browser)_
@@ -20,7 +23,7 @@ http://www.httrack.com/
## Compile trunk release ## Compile trunk release
```sh ```sh
git clone https://github.com/xroche/httrack.git --recurse git clone https://github.com/xroche/httrack.git --recurse-submodules
cd httrack cd httrack
./configure --prefix=$HOME/usr && make -j8 && make install ./configure --prefix=$HOME/usr && make -j8 && make install
``` ```

23
SECURITY.md Normal file
View File

@@ -0,0 +1,23 @@
# Security Policy
## Reporting
Report privately, not in a public issue or PR: use GitHub
[private advisories](https://github.com/xroche/httrack/security/advisories/new)
or email <roche@httrack.com> (alternate: `xroche at gmail dot com`).
Include the HTTrack version and platform, a concrete reproduction (command line,
a sample page or server response, or a small proof of concept), and what an
attacker gains. We'll acknowledge it and keep you posted. Please allow time for a
release before disclosing publicly.
## Supported versions
Fixes land on `master` and ship in the next release; older releases aren't
maintained. Confirm against current `master` when you can.
## AI-assisted findings
Scanners and LLMs are fine, but only send reports you have verified yourself. A
confirmed, reproducible issue is worth our time; a plausible one that doesn't
reproduce is not, and will be closed. If a report is AI-assisted, say so.

11
compile
View File

@@ -1,9 +1,9 @@
#! /bin/sh #! /bin/sh
# Wrapper for compilers which do not understand '-c -o'. # Wrapper for compilers which do not understand '-c -o'.
scriptversion=2018-03-07.03; # UTC scriptversion=2024-06-19.01; # UTC
# Copyright (C) 1999-2021 Free Software Foundation, Inc. # Copyright (C) 1999-2024 Free Software Foundation, Inc.
# Written by Tom Tromey <tromey@cygnus.com>. # Written by Tom Tromey <tromey@cygnus.com>.
# #
# This program is free software; you can redistribute it and/or modify # This program is free software; you can redistribute it and/or modify
@@ -143,7 +143,7 @@ func_cl_wrapper ()
# configure might choose to run compile as 'compile cc -o foo foo.c'. # configure might choose to run compile as 'compile cc -o foo foo.c'.
eat=1 eat=1
case $2 in case $2 in
*.o | *.[oO][bB][jJ]) *.o | *.lo | *.[oO][bB][jJ])
func_file_conv "$2" func_file_conv "$2"
set x "$@" -Fo"$file" set x "$@" -Fo"$file"
shift shift
@@ -248,14 +248,17 @@ 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>. Report bugs to <bug-automake@gnu.org>.
GNU Automake home page: <https://www.gnu.org/software/automake/>.
General help using GNU software: <https://www.gnu.org/gethelp/>.
EOF EOF
exit $? exit $?
;; ;;
-v | --v*) -v | --v*)
echo "compile $scriptversion" echo "compile (GNU Automake) $scriptversion"
exit $? exit $?
;; ;;
cl | *[/\\]cl | cl.exe | *[/\\]cl.exe | \ cl | *[/\\]cl | cl.exe | *[/\\]cl.exe | \
clang-cl | *[/\\]clang-cl | clang-cl.exe | *[/\\]clang-cl.exe | \
icl | *[/\\]icl | icl.exe | *[/\\]icl.exe ) icl | *[/\\]icl | icl.exe | *[/\\]icl.exe )
func_cl_wrapper "$@" # Doesn't return... func_cl_wrapper "$@" # Doesn't return...
;; ;;

111
config.guess vendored
View File

@@ -1,10 +1,10 @@
#! /bin/sh #! /bin/sh
# Attempt to guess a canonical system name. # Attempt to guess a canonical system name.
# Copyright 1992-2022 Free Software Foundation, Inc. # Copyright 1992-2024 Free Software Foundation, Inc.
# shellcheck disable=SC2006,SC2268 # see below for rationale # shellcheck disable=SC2006,SC2268 # see below for rationale
timestamp='2022-01-09' timestamp='2024-07-27'
# This file is free software; you can redistribute it and/or modify it # This file is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by # under the terms of the GNU General Public License as published by
@@ -47,7 +47,7 @@ me=`echo "$0" | sed -e 's,.*/,,'`
usage="\ usage="\
Usage: $0 [OPTION] Usage: $0 [OPTION]
Output the configuration name of the system \`$me' is run on. Output the configuration name of the system '$me' is run on.
Options: Options:
-h, --help print this help, then exit -h, --help print this help, then exit
@@ -60,13 +60,13 @@ version="\
GNU config.guess ($timestamp) GNU config.guess ($timestamp)
Originally written by Per Bothner. Originally written by Per Bothner.
Copyright 1992-2022 Free Software Foundation, Inc. Copyright 1992-2024 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
help=" help="
Try \`$me --help' for more information." Try '$me --help' for more information."
# Parse command line # Parse command line
while test $# -gt 0 ; do while test $# -gt 0 ; do
@@ -102,8 +102,8 @@ GUESS=
# temporary files to be created and, as you can see below, it is a # temporary files to be created and, as you can see below, it is a
# headache to deal with in a portable fashion. # headache to deal with in a portable fashion.
# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still # Historically, 'CC_FOR_BUILD' used to be named 'HOST_CC'. We still
# use `HOST_CC' if defined, but it is deprecated. # use 'HOST_CC' if defined, but it is deprecated.
# Portable tmp directory creation inspired by the Autoconf team. # Portable tmp directory creation inspired by the Autoconf team.
@@ -123,7 +123,7 @@ set_cc_for_build() {
dummy=$tmp/dummy dummy=$tmp/dummy
case ${CC_FOR_BUILD-},${HOST_CC-},${CC-} in case ${CC_FOR_BUILD-},${HOST_CC-},${CC-} in
,,) echo "int x;" > "$dummy.c" ,,) echo "int x;" > "$dummy.c"
for driver in cc gcc c89 c99 ; do for driver in cc gcc c17 c99 c89 ; do
if ($driver -c -o "$dummy.o" "$dummy.c") >/dev/null 2>&1 ; then if ($driver -c -o "$dummy.o" "$dummy.c") >/dev/null 2>&1 ; then
CC_FOR_BUILD=$driver CC_FOR_BUILD=$driver
break break
@@ -155,6 +155,9 @@ Linux|GNU|GNU/*)
set_cc_for_build set_cc_for_build
cat <<-EOF > "$dummy.c" cat <<-EOF > "$dummy.c"
#if defined(__ANDROID__)
LIBC=android
#else
#include <features.h> #include <features.h>
#if defined(__UCLIBC__) #if defined(__UCLIBC__)
LIBC=uclibc LIBC=uclibc
@@ -162,6 +165,8 @@ Linux|GNU|GNU/*)
LIBC=dietlibc LIBC=dietlibc
#elif defined(__GLIBC__) #elif defined(__GLIBC__)
LIBC=gnu LIBC=gnu
#elif defined(__LLVM_LIBC__)
LIBC=llvm
#else #else
#include <stdarg.h> #include <stdarg.h>
/* First heuristic to detect musl libc. */ /* First heuristic to detect musl libc. */
@@ -169,6 +174,7 @@ Linux|GNU|GNU/*)
LIBC=musl LIBC=musl
#endif #endif
#endif #endif
#endif
EOF EOF
cc_set_libc=`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^LIBC' | sed 's, ,,g'` cc_set_libc=`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^LIBC' | sed 's, ,,g'`
eval "$cc_set_libc" eval "$cc_set_libc"
@@ -459,7 +465,7 @@ case $UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION in
UNAME_RELEASE=`uname -v` UNAME_RELEASE=`uname -v`
;; ;;
esac esac
# Japanese Language versions have a version number like `4.1.3-JL'. # Japanese Language versions have a version number like '4.1.3-JL'.
SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/-/_/'` SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/-/_/'`
GUESS=sparc-sun-sunos$SUN_REL GUESS=sparc-sun-sunos$SUN_REL
;; ;;
@@ -628,7 +634,8 @@ EOF
sed 's/^ //' << EOF > "$dummy.c" sed 's/^ //' << EOF > "$dummy.c"
#include <sys/systemcfg.h> #include <sys/systemcfg.h>
main() int
main ()
{ {
if (!__power_pc()) if (!__power_pc())
exit(1); exit(1);
@@ -712,7 +719,8 @@ EOF
#include <stdlib.h> #include <stdlib.h>
#include <unistd.h> #include <unistd.h>
int main () int
main ()
{ {
#if defined(_SC_KERNEL_BITS) #if defined(_SC_KERNEL_BITS)
long bits = sysconf(_SC_KERNEL_BITS); long bits = sysconf(_SC_KERNEL_BITS);
@@ -904,7 +912,7 @@ EOF
fi fi
;; ;;
*:FreeBSD:*:*) *:FreeBSD:*:*)
UNAME_PROCESSOR=`/usr/bin/uname -p` UNAME_PROCESSOR=`uname -p`
case $UNAME_PROCESSOR in case $UNAME_PROCESSOR in
amd64) amd64)
UNAME_PROCESSOR=x86_64 ;; UNAME_PROCESSOR=x86_64 ;;
@@ -966,11 +974,37 @@ EOF
GNU_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` GNU_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'`
GUESS=$UNAME_MACHINE-unknown-$GNU_SYS$GNU_REL-$LIBC GUESS=$UNAME_MACHINE-unknown-$GNU_SYS$GNU_REL-$LIBC
;; ;;
x86_64:[Mm]anagarm:*:*|i?86:[Mm]anagarm:*:*)
GUESS="$UNAME_MACHINE-pc-managarm-mlibc"
;;
*:[Mm]anagarm:*:*)
GUESS="$UNAME_MACHINE-unknown-managarm-mlibc"
;;
*:Minix:*:*) *:Minix:*:*)
GUESS=$UNAME_MACHINE-unknown-minix GUESS=$UNAME_MACHINE-unknown-minix
;; ;;
aarch64:Linux:*:*) aarch64:Linux:*:*)
GUESS=$UNAME_MACHINE-unknown-linux-$LIBC set_cc_for_build
CPU=$UNAME_MACHINE
LIBCABI=$LIBC
if test "$CC_FOR_BUILD" != no_compiler_found; then
ABI=64
sed 's/^ //' << EOF > "$dummy.c"
#ifdef __ARM_EABI__
#ifdef __ARM_PCS_VFP
ABI=eabihf
#else
ABI=eabi
#endif
#endif
EOF
cc_set_abi=`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^ABI' | sed 's, ,,g'`
eval "$cc_set_abi"
case $ABI in
eabi | eabihf) CPU=armv8l; LIBCABI=$LIBC$ABI ;;
esac
fi
GUESS=$CPU-unknown-linux-$LIBCABI
;; ;;
aarch64_be:Linux:*:*) aarch64_be:Linux:*:*)
UNAME_MACHINE=aarch64_be UNAME_MACHINE=aarch64_be
@@ -1036,7 +1070,16 @@ EOF
k1om:Linux:*:*) k1om:Linux:*:*)
GUESS=$UNAME_MACHINE-unknown-linux-$LIBC GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
;; ;;
loongarch32:Linux:*:* | loongarch64:Linux:*:* | loongarchx32:Linux:*:*) kvx:Linux:*:*)
GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
;;
kvx:cos:*:*)
GUESS=$UNAME_MACHINE-unknown-cos
;;
kvx:mbr:*:*)
GUESS=$UNAME_MACHINE-unknown-mbr
;;
loongarch32:Linux:*:* | loongarch64:Linux:*:*)
GUESS=$UNAME_MACHINE-unknown-linux-$LIBC GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
;; ;;
m32r*:Linux:*:*) m32r*:Linux:*:*)
@@ -1151,16 +1194,27 @@ EOF
;; ;;
x86_64:Linux:*:*) x86_64:Linux:*:*)
set_cc_for_build set_cc_for_build
CPU=$UNAME_MACHINE
LIBCABI=$LIBC LIBCABI=$LIBC
if test "$CC_FOR_BUILD" != no_compiler_found; then if test "$CC_FOR_BUILD" != no_compiler_found; then
if (echo '#ifdef __ILP32__'; echo IS_X32; echo '#endif') | \ ABI=64
(CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ sed 's/^ //' << EOF > "$dummy.c"
grep IS_X32 >/dev/null #ifdef __i386__
then ABI=x86
LIBCABI=${LIBC}x32 #else
fi #ifdef __ILP32__
ABI=x32
#endif
#endif
EOF
cc_set_abi=`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^ABI' | sed 's, ,,g'`
eval "$cc_set_abi"
case $ABI in
x86) CPU=i686 ;;
x32) LIBCABI=${LIBC}x32 ;;
esac
fi fi
GUESS=$UNAME_MACHINE-pc-linux-$LIBCABI GUESS=$CPU-pc-linux-$LIBCABI
;; ;;
xtensa*:Linux:*:*) xtensa*:Linux:*:*)
GUESS=$UNAME_MACHINE-unknown-linux-$LIBC GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
@@ -1180,7 +1234,7 @@ EOF
GUESS=$UNAME_MACHINE-pc-sysv4.2uw$UNAME_VERSION GUESS=$UNAME_MACHINE-pc-sysv4.2uw$UNAME_VERSION
;; ;;
i*86:OS/2:*:*) i*86:OS/2:*:*)
# If we were able to find `uname', then EMX Unix compatibility # If we were able to find 'uname', then EMX Unix compatibility
# is probably installed. # is probably installed.
GUESS=$UNAME_MACHINE-pc-os2-emx GUESS=$UNAME_MACHINE-pc-os2-emx
;; ;;
@@ -1321,7 +1375,7 @@ EOF
GUESS=ns32k-sni-sysv GUESS=ns32k-sni-sysv
fi fi
;; ;;
PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort PENTIUM:*:4.0*:*) # Unisys 'ClearPath HMP IX 4000' SVR4/MP effort
# says <Richard.M.Bartel@ccMail.Census.GOV> # says <Richard.M.Bartel@ccMail.Census.GOV>
GUESS=i586-unisys-sysv4 GUESS=i586-unisys-sysv4
;; ;;
@@ -1367,8 +1421,11 @@ EOF
BePC:Haiku:*:*) # Haiku running on Intel PC compatible. BePC:Haiku:*:*) # Haiku running on Intel PC compatible.
GUESS=i586-pc-haiku GUESS=i586-pc-haiku
;; ;;
x86_64:Haiku:*:*) ppc:Haiku:*:*) # Haiku running on Apple PowerPC
GUESS=x86_64-unknown-haiku GUESS=powerpc-apple-haiku
;;
*:Haiku:*:*) # Haiku modern gcc (not bound by BeOS compat)
GUESS=$UNAME_MACHINE-unknown-haiku
;; ;;
SX-4:SUPER-UX:*:*) SX-4:SUPER-UX:*:*)
GUESS=sx4-nec-superux$UNAME_RELEASE GUESS=sx4-nec-superux$UNAME_RELEASE
@@ -1540,6 +1597,9 @@ EOF
*:Unleashed:*:*) *:Unleashed:*:*)
GUESS=$UNAME_MACHINE-unknown-unleashed$UNAME_RELEASE GUESS=$UNAME_MACHINE-unknown-unleashed$UNAME_RELEASE
;; ;;
*:Ironclad:*:*)
GUESS=$UNAME_MACHINE-unknown-ironclad
;;
esac esac
# Do we have a guess based on uname results? # Do we have a guess based on uname results?
@@ -1563,6 +1623,7 @@ cat > "$dummy.c" <<EOF
#endif #endif
#endif #endif
#endif #endif
int
main () main ()
{ {
#if defined (sony) #if defined (sony)

View File

@@ -15,13 +15,13 @@
/* Define to 1 if you have the <inttypes.h> header file. */ /* Define to 1 if you have the <inttypes.h> header file. */
#undef HAVE_INTTYPES_H #undef HAVE_INTTYPES_H
/* Define to 1 if you have the `z' library (-lz). */ /* Define to 1 if you have the 'z' library (-lz). */
#undef HAVE_LIBZ #undef HAVE_LIBZ
/* Define to 1 if you have the <minix/config.h> header file. */ /* Define to 1 if you have the <minix/config.h> header file. */
#undef HAVE_MINIX_CONFIG_H #undef HAVE_MINIX_CONFIG_H
/* Define to 1 if you have the `snprintf' function. */ /* Define to 1 if you have the 'snprintf' function. */
#undef HAVE_SNPRINTF #undef HAVE_SNPRINTF
/* Define to 1 if you have the <stdint.h> header file. */ /* Define to 1 if you have the <stdint.h> header file. */
@@ -55,7 +55,7 @@
declarations. */ declarations. */
#undef HAVE_VISIBILITY #undef HAVE_VISIBILITY
/* Define to 1 if you have the `vsnprintf' function. */ /* Define to 1 if you have the 'vsnprintf' function. */
#undef HAVE_VSNPRINTF #undef HAVE_VSNPRINTF
/* Define to 1 if you have the <wchar.h> header file. */ /* Define to 1 if you have the <wchar.h> header file. */
@@ -109,10 +109,10 @@
/* Check for setuid */ /* Check for setuid */
#undef SETUID #undef SETUID
/* The size of `long long', as computed by sizeof. */ /* The size of 'long long', as computed by sizeof. */
#undef SIZEOF_LONG_LONG #undef SIZEOF_LONG_LONG
/* Define to 1 if all of the C90 standard headers exist (not just the ones /* Define to 1 if all of the C89 standard headers exist (not just the ones
required in a freestanding environment). This macro is provided for required in a freestanding environment). This macro is provided for
backward compatibility; new code need not use it. */ backward compatibility; new code need not use it. */
#undef STDC_HEADERS #undef STDC_HEADERS
@@ -120,7 +120,7 @@
/* Check for pthread in pthreads */ /* Check for pthread in pthreads */
#undef THREADS #undef THREADS
/* Enable extensions on AIX 3, Interix. */ /* Enable extensions on AIX, Interix, z/OS. */
#ifndef _ALL_SOURCE #ifndef _ALL_SOURCE
# undef _ALL_SOURCE # undef _ALL_SOURCE
#endif #endif
@@ -181,11 +181,15 @@
#ifndef __STDC_WANT_IEC_60559_DFP_EXT__ #ifndef __STDC_WANT_IEC_60559_DFP_EXT__
# undef __STDC_WANT_IEC_60559_DFP_EXT__ # undef __STDC_WANT_IEC_60559_DFP_EXT__
#endif #endif
/* Enable extensions specified by C23 Annex F. */
#ifndef __STDC_WANT_IEC_60559_EXT__
# undef __STDC_WANT_IEC_60559_EXT__
#endif
/* Enable extensions specified by ISO/IEC TS 18661-4:2015. */ /* Enable extensions specified by ISO/IEC TS 18661-4:2015. */
#ifndef __STDC_WANT_IEC_60559_FUNCS_EXT__ #ifndef __STDC_WANT_IEC_60559_FUNCS_EXT__
# undef __STDC_WANT_IEC_60559_FUNCS_EXT__ # undef __STDC_WANT_IEC_60559_FUNCS_EXT__
#endif #endif
/* Enable extensions specified by ISO/IEC TS 18661-3:2015. */ /* Enable extensions specified by C23 Annex H and ISO/IEC TS 18661-3:2015. */
#ifndef __STDC_WANT_IEC_60559_TYPES_EXT__ #ifndef __STDC_WANT_IEC_60559_TYPES_EXT__
# undef __STDC_WANT_IEC_60559_TYPES_EXT__ # undef __STDC_WANT_IEC_60559_TYPES_EXT__
#endif #endif

942
config.sub vendored

File diff suppressed because it is too large Load Diff

4166
configure vendored

File diff suppressed because it is too large Load Diff

View File

@@ -18,11 +18,9 @@ GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. along with this program. If not, see <http://www.gnu.org/licenses/>.
Important notes: Ethical use: we kindly ask that you NOT use this software to harvest email
addresses or to collect any other private information about people. Doing so
- We hereby ask people using this source NOT to use it in purpose of grabbing would dishonor our work and waste the many hours we have spent on it.
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 Please visit our Website: http://www.httrack.com
]) ])
@@ -50,6 +48,9 @@ LT_INIT
AC_PROG_LN_S AC_PROG_LN_S
LT_INIT LT_INIT
# bash, used to run the test scripts (see tests/Makefile.am TEST_LOG_COMPILER)
AC_PATH_PROGS([BASH], [bash], [/bin/bash])
# Export LD_LIBRARY_PATH name or equivalent. # Export LD_LIBRARY_PATH name or equivalent.
AC_SUBST(SHLIBPATH_VAR,$shlibpath_var) AC_SUBST(SHLIBPATH_VAR,$shlibpath_var)
@@ -90,6 +91,13 @@ AX_CHECK_LINK_FLAG([-Wl,--no-undefined], [DEFAULT_LDFLAGS="$DEFAULT_LDFLAGS -Wl,
AX_CHECK_LINK_FLAG([-Wl,-z,relro,-z,now], [DEFAULT_LDFLAGS="$DEFAULT_LDFLAGS -Wl,-z,relro,-z,now"]) AX_CHECK_LINK_FLAG([-Wl,-z,relro,-z,now], [DEFAULT_LDFLAGS="$DEFAULT_LDFLAGS -Wl,-z,relro,-z,now"])
AX_CHECK_LINK_FLAG([-Wl,-z,noexecstack], [DEFAULT_LDFLAGS="$DEFAULT_LDFLAGS -Wl,-z,noexecstack"]) AX_CHECK_LINK_FLAG([-Wl,-z,noexecstack], [DEFAULT_LDFLAGS="$DEFAULT_LDFLAGS -Wl,-z,noexecstack"])
# Force libc back into DT_NEEDED for libraries that reach it only through
# libhttrack (libhtsjava, the libtest callbacks), but only with a GNU-style
# linker; Apple ld rejects these flags and links libSystem unconditionally.
AX_CHECK_LINK_FLAG([-Wl,--push-state,--no-as-needed,-lc,--pop-state],
[LIBC_FORCE_LINK="-Wl,--push-state,--no-as-needed,-lc,--pop-state"])
AC_SUBST([LIBC_FORCE_LINK])
### PIE ### PIE
CFLAGS_PIE="" CFLAGS_PIE=""
LDFLAGS_PIE="" LDFLAGS_PIE=""

10
debian/changelog vendored
View File

@@ -4,6 +4,15 @@ httrack (3.49.8-1) unstable; urgency=medium
* Drop the OpenSSL linking exception from the license: OpenSSL 3.0+ is * Drop the OpenSSL linking exception from the license: OpenSSL 3.0+ is
Apache-2.0 and GPL-compatible, so it is no longer needed. httrack is now Apache-2.0 and GPL-compatible, so it is no longer needed. httrack is now
plain GPL-3.0-or-later. Updated debian/copyright accordingly. plain GPL-3.0-or-later. Updated debian/copyright accordingly.
* Fix a batch of lintian tags: depend on sensible-utils, point to
common-licenses/GPL-3, use a secure version=4 watch file, add
Rules-Requires-Root and Vcs-Browser, and override the false-positive
source-is-missing on the bundled HTML documentation.
* Refresh the webhttrack browser dependency: drop the removed alternatives
(iceape-browser, iceweasel, icecat, mozilla, firefox, mozilla-firefox)
that no longer exist in Debian and triggered half-broken relationships on
the QA debcheck page. Depend on firefox-esr | chromium | www-browser
instead.
-- Xavier Roche <xavier@debian.org> Sun, 07 Jun 2026 14:29:24 +0200 -- Xavier Roche <xavier@debian.org> Sun, 07 Jun 2026 14:29:24 +0200
@@ -1616,4 +1625,3 @@ httrack (3.22-1) unstable; urgency=low
* Initial Release. * Initial Release.
-- Xavier Roche <xavier@debian.org> Fri, 27 Sep 2002 16:42:25 +0200 -- Xavier Roche <xavier@debian.org> Fri, 27 Sep 2002 16:42:25 +0200

4
debian/control vendored
View File

@@ -4,8 +4,10 @@ Priority: optional
Maintainer: Xavier Roche <roche@httrack.com> Maintainer: Xavier Roche <roche@httrack.com>
Standards-Version: 4.7.0 Standards-Version: 4.7.0
Build-Depends: debhelper-compat (= 13), autoconf, autoconf-archive, automake, libtool, zlib1g-dev, libssl-dev Build-Depends: debhelper-compat (= 13), autoconf, autoconf-archive, automake, libtool, zlib1g-dev, libssl-dev
Rules-Requires-Root: no
Homepage: http://www.httrack.com Homepage: http://www.httrack.com
Vcs-Git: https://github.com/xroche/httrack.git Vcs-Git: https://github.com/xroche/httrack.git
Vcs-Browser: https://github.com/xroche/httrack
Package: httrack Package: httrack
Architecture: any Architecture: any
@@ -28,7 +30,7 @@ Description: Copy websites to your computer (Offline browser)
Package: webhttrack Package: webhttrack
Architecture: any Architecture: any
Multi-Arch: foreign Multi-Arch: foreign
Depends: ${misc:Depends}, ${shlibs:Depends}, webhttrack-common, iceape-browser | iceweasel | icecat | mozilla | firefox | mozilla-firefox | www-browser | sensible-utils Depends: ${misc:Depends}, ${shlibs:Depends}, webhttrack-common, sensible-utils, firefox-esr | chromium | www-browser
Replaces: webhttrack-common (<< 3.43.9-2) Replaces: webhttrack-common (<< 3.43.9-2)
Breaks: webhttrack-common (<< 3.43.9-2) Breaks: webhttrack-common (<< 3.43.9-2)
Suggests: httrack, httrack-doc Suggests: httrack, httrack-doc

2
debian/copyright vendored
View File

@@ -13,7 +13,7 @@ the Free Software Foundation, either version 3 of the License, or
(at your option) any later version. (at your option) any later version.
On Debian systems, the complete text of the GNU General Public On Debian systems, the complete text of the GNU General Public
License can be found in /usr/share/common-licenses/GPL file. License version 3 can be found in /usr/share/common-licenses/GPL-3 file.
This program is distributed in the hope that it will be useful, This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of

View File

@@ -1,2 +1,6 @@
httrack-doc: extra-license-file usr/share/httrack/html/license.txt # httrack ships its HTML manual (and the bundled license) under
httrack-doc: package-contains-documentation-outside-usr-share-doc usr/share/httrack/* # /usr/share/httrack/html by design; /usr/share/doc/httrack/html symlinks into
# it (see debian/rules). These are pointed hints whose match context is empty,
# so the path lives in the display pointer, not the override -- match with '*'.
httrack-doc: extra-license-file *
httrack-doc: package-contains-documentation-outside-usr-share-doc *

View File

@@ -1,5 +1,7 @@
libhttrack-dev: breakout-link * # The libtest example shared objects are unhardened test fixtures shipped for
libhttrack-dev: hardening-no-fortify-functions usr/lib/x86_64-linux-gnu/httrack/libtest/* # the test harness, and their readme sits beside them under /usr/share/httrack.
libhttrack-dev: library-not-linked-against-libc usr/lib/*/httrack/libtest/* # Both are pointed hints with an empty match context, so match with '*'.
libhttrack-dev: package-contains-documentation-outside-usr-share-doc usr/share/httrack/libtest/readme.txt libhttrack-dev: hardening-no-fortify-functions *
libhttrack-dev: package-contains-documentation-outside-usr-share-doc *
# config.h is installed as a public dev header; the package-name match is expected.
libhttrack-dev: package-name-defined-in-config-h usr/include/httrack/config.h libhttrack-dev: package-name-defined-in-config-h usr/include/httrack/config.h

View File

@@ -1,2 +1,3 @@
# The shared libraries ship without a versioned symbols control file (ABI is
# tracked via the SONAME and a strict =version dependency, see debian/rules).
libhttrack2: no-symbols-control-file usr/lib/* libhttrack2: no-symbols-control-file usr/lib/*
libhttrack2: spelling-error-in-binary usr/lib/*/libhttrack.so.* updat update

View File

@@ -1,2 +1,8 @@
httrack source: changelog-should-mention-nmu httrack source: changelog-should-mention-nmu
httrack source: source-nmu-has-incorrect-version-number httrack source: source-nmu-has-incorrect-version-number
# The bundled HTML pages are the genuine upstream documentation taken from
# the httrack.com website. lintian's long-line heuristic mistakes them for
# minified or generated content, but they are the actual source.
httrack source: source-is-missing [html/*]
httrack source: source-is-missing [templates/*]

9
debian/watch vendored
View File

@@ -1,7 +1,6 @@
# format version number, currently 3; this line is compulsory! # format version number; this line is compulsory!
version=3 version=4
# main httrack.com download page ; fetch the mirror version number # main httrack.com download page ; fetch the mirror version number
http://www.httrack.com/page/2/en/index.html\ https://www.httrack.com/page/2/en/index.html \
.*/httrack-([\d\.]+).tar.gz .*/httrack-([\d\.]+)\.tar\.gz

View File

@@ -4,3 +4,4 @@ usr/share/man/man1/webhttrack.1
usr/share/man/man1/htsserver.1 usr/share/man/man1/htsserver.1
usr/share/applications/WebHTTrack-Websites.desktop usr/share/applications/WebHTTrack-Websites.desktop
usr/share/applications/WebHTTrack.desktop usr/share/applications/WebHTTrack.desktop
usr/share/metainfo/com.httrack.WebHTTrack.metainfo.xml

View File

@@ -1 +0,0 @@
webhttrack: missing-depends-on-sensible-utils sensible-browser usr/bin/webhttrack

15
depcomp
View File

@@ -1,9 +1,9 @@
#! /bin/sh #! /bin/sh
# depcomp - compile a program generating dependencies as side-effects # depcomp - compile a program generating dependencies as side-effects
scriptversion=2018-03-07.03; # UTC scriptversion=2024-06-19.01; # UTC
# Copyright (C) 1999-2021 Free Software Foundation, Inc. # Copyright (C) 1999-2024 Free Software Foundation, Inc.
# This program is free software; you can redistribute it and/or modify # 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 # it under the terms of the GNU General Public License as published by
@@ -47,11 +47,13 @@ Environment variables:
libtool Whether libtool is used (yes/no). libtool Whether libtool is used (yes/no).
Report bugs to <bug-automake@gnu.org>. Report bugs to <bug-automake@gnu.org>.
GNU Automake home page: <https://www.gnu.org/software/automake/>.
General help using GNU software: <https://www.gnu.org/gethelp/>.
EOF EOF
exit $? exit $?
;; ;;
-v | --v*) -v | --v*)
echo "depcomp $scriptversion" echo "depcomp (GNU Automake) $scriptversion"
exit $? exit $?
;; ;;
esac esac
@@ -113,7 +115,6 @@ nl='
# These definitions help. # These definitions help.
upper=ABCDEFGHIJKLMNOPQRSTUVWXYZ upper=ABCDEFGHIJKLMNOPQRSTUVWXYZ
lower=abcdefghijklmnopqrstuvwxyz lower=abcdefghijklmnopqrstuvwxyz
digits=0123456789
alpha=${upper}${lower} alpha=${upper}${lower}
if test -z "$depmode" || test -z "$source" || test -z "$object"; then if test -z "$depmode" || test -z "$source" || test -z "$object"; then
@@ -128,7 +129,7 @@ tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
rm -f "$tmpdepfile" rm -f "$tmpdepfile"
# Avoid interferences from the environment. # Avoid interference from the environment.
gccflag= dashmflag= gccflag= dashmflag=
# Some modes work just like other modes, but use different flags. We # Some modes work just like other modes, but use different flags. We
@@ -198,8 +199,8 @@ gcc3)
;; ;;
gcc) gcc)
## Note that this doesn't just cater to obsosete pre-3.x GCC compilers. ## Note that this doesn't just cater to obsolete pre-3.x GCC compilers.
## but also to in-use compilers like IMB xlc/xlC and the HP C compiler. ## but also to in-use compilers like IBM xlc/xlC and the HP C compiler.
## (see the conditional assignment to $gccflag above). ## (see the conditional assignment to $gccflag above).
## There are various ways to get dependency output from gcc. Here's ## There are various ways to get dependency output from gcc. Here's
## why we pick this rather obscure method: ## why we pick this rather obscure method:

View File

@@ -5,8 +5,12 @@ HTTrack Website Copier release history:
This file lists all changes and fixes that have been made for HTTrack This file lists all changes and fixes that have been made for HTTrack
3.49-8 3.49-8
+ Changed: dropped the obsolete OpenSSL linking exception (OpenSSL 3.0+ is + Changed: dropped the obsolete OpenSSL linking exception (OpenSSL 3.0+ is Apache-2.0 and GPL-compatible); httrack is now plain GPLv3-or-later
Apache-2.0 and GPL-compatible); httrack is now plain GPLv3-or-later + Fixed: link libhtsjava and the libtest examples directly against libc
+ Fixed: in-place changes made by the postprocess callback were not applied (Roman Sęk)
+ Fixed: "preffered" typo in the help text and man page (yosinn1-blip)
+ Fixed: corrections and updates of the Russian translation (German Aizek)
+ Fixed: corrections and updates of the Danish translation (scootergrisen)
3.49-7 3.49-7
+ Fixed: keep generated config.h architecture-independent (Debian #1133728) + Fixed: keep generated config.h architecture-independent (Debian #1133728)

View File

@@ -12,28 +12,34 @@ WebIcon16x16dir = $(datadir)/icons/hicolor/16x16/apps
WebIcon32x32dir = $(datadir)/icons/hicolor/32x32/apps WebIcon32x32dir = $(datadir)/icons/hicolor/32x32/apps
WebIcon48x48dir = $(datadir)/icons/hicolor/48x48/apps WebIcon48x48dir = $(datadir)/icons/hicolor/48x48/apps
VFolderEntrydir = $(prefix)/share/applications VFolderEntrydir = $(prefix)/share/applications
MetaInfodir = $(datadir)/metainfo
# Wildcards are globbed against $(srcdir): a bare "*.html" is resolved against
# the build dir and stays unexpanded (breaking "make") in an out-of-tree build.
# Explicit filenames (e.g. ../history.txt, div/search.sh) resolve via VPATH and
# need no prefix.
HelpHtmlroot_DATA = ../httrack-doc.html ../history.txt HelpHtmlroot_DATA = ../httrack-doc.html ../history.txt
HelpHtml_DATA = *.html HelpHtml_DATA = $(srcdir)/*.html
HelpHtmldiv_DATA = div/search.sh HelpHtmldiv_DATA = div/search.sh
HelpHtmlimg_DATA = img/* HelpHtmlimg_DATA = $(srcdir)/img/*
HelpHtmlimages_DATA = images/* HelpHtmlimages_DATA = $(srcdir)/images/*
HelpHtmlTxt_DATA = ../greetings.txt ../history.txt ../license.txt HelpHtmlTxt_DATA = ../greetings.txt ../history.txt ../license.txt
WebHtml_DATA = server/*.html server/*.js server/*.css WebHtml_DATA = $(srcdir)/server/*.html $(srcdir)/server/*.js $(srcdir)/server/*.css
WebHtmlimages_DATA = server/images/* WebHtmlimages_DATA = $(srcdir)/server/images/*
# note: converted & normalized by # note: converted & normalized by
# ico2xpm favicon.ico -o httrack.xpm # ico2xpm favicon.ico -o httrack.xpm
# mogrify -format xpm -map /usr/share/doc/menu/examples/cmap.xpm httrack.xpm # mogrify -format xpm -map /usr/share/doc/menu/examples/cmap.xpm httrack.xpm
WebPixmap_DATA = server/div/*.xpm WebPixmap_DATA = $(srcdir)/server/div/*.xpm
WebIcon16x16_DATA = server/div/16x16/*.png WebIcon16x16_DATA = $(srcdir)/server/div/16x16/*.png
WebIcon32x32_DATA = server/div/32x32/*.png WebIcon32x32_DATA = $(srcdir)/server/div/32x32/*.png
WebIcon48x48_DATA = server/div/48x48/*.png WebIcon48x48_DATA = $(srcdir)/server/div/48x48/*.png
VFolderEntry_DATA = server/div/*.desktop VFolderEntry_DATA = $(srcdir)/server/div/*.desktop
MetaInfo_DATA = $(srcdir)/server/div/*.metainfo.xml
EXTRA_DIST = $(HelpHtml_DATA) $(HelpHtmlimg_DATA) $(HelpHtmlimages_DATA) \ EXTRA_DIST = $(HelpHtml_DATA) $(HelpHtmlimg_DATA) $(HelpHtmlimages_DATA) \
$(HelpHtmldiv_DATA) $(WebHtml_DATA) $(WebHtmlimages_DATA) \ $(HelpHtmldiv_DATA) $(WebHtml_DATA) $(WebHtmlimages_DATA) \
$(WebPixmap_DATA) $(WebIcon16x16_DATA) $(WebIcon32x32_DATA) $(WebIcon48x48_DATA) \ $(WebPixmap_DATA) $(WebIcon16x16_DATA) $(WebIcon32x32_DATA) $(WebIcon48x48_DATA) \
$(VFolderEntry_DATA) \ $(VFolderEntry_DATA) $(MetaInfo_DATA) \
httrack.css httrack.css
install-data-hook: install-data-hook:

View File

@@ -1,7 +1,7 @@
# Makefile.in generated by automake 1.16.5 from Makefile.am. # Makefile.in generated by automake 1.17 from Makefile.am.
# @configure_input@ # @configure_input@
# Copyright (C) 1994-2021 Free Software Foundation, Inc. # Copyright (C) 1994-2024 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation # This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it, # gives unlimited permission to copy and/or distribute it,
@@ -70,6 +70,8 @@ am__make_running_with_option = \
test $$has_opt = yes test $$has_opt = yes
am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_dryrun = (target_option=n; $(am__make_running_with_option))
am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
am__rm_f = rm -f $(am__rm_f_notfound)
am__rm_rf = rm -rf $(am__rm_f_notfound)
pkgdatadir = $(datadir)/@PACKAGE@ pkgdatadir = $(datadir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@
@@ -143,22 +145,22 @@ am__base_list = \
sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
am__uninstall_files_from_dir = { \ am__uninstall_files_from_dir = { \
test -z "$$files" \ { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
|| { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
|| { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && echo $$files | $(am__xargs_n) 40 $(am__rm_f); }; \
$(am__cd) "$$dir" && rm -f $$files; }; \
} }
am__installdirs = "$(DESTDIR)$(HelpHtmldir)" \ am__installdirs = "$(DESTDIR)$(HelpHtmldir)" \
"$(DESTDIR)$(HelpHtmlTxtdir)" "$(DESTDIR)$(HelpHtmldivdir)" \ "$(DESTDIR)$(HelpHtmlTxtdir)" "$(DESTDIR)$(HelpHtmldivdir)" \
"$(DESTDIR)$(HelpHtmlimagesdir)" "$(DESTDIR)$(HelpHtmlimgdir)" \ "$(DESTDIR)$(HelpHtmlimagesdir)" "$(DESTDIR)$(HelpHtmlimgdir)" \
"$(DESTDIR)$(HelpHtmlrootdir)" "$(DESTDIR)$(VFolderEntrydir)" \ "$(DESTDIR)$(HelpHtmlrootdir)" "$(DESTDIR)$(MetaInfodir)" \
"$(DESTDIR)$(WebHtmldir)" "$(DESTDIR)$(WebHtmlimagesdir)" \ "$(DESTDIR)$(VFolderEntrydir)" "$(DESTDIR)$(WebHtmldir)" \
"$(DESTDIR)$(WebIcon16x16dir)" "$(DESTDIR)$(WebIcon32x32dir)" \ "$(DESTDIR)$(WebHtmlimagesdir)" "$(DESTDIR)$(WebIcon16x16dir)" \
"$(DESTDIR)$(WebIcon48x48dir)" "$(DESTDIR)$(WebPixmapdir)" "$(DESTDIR)$(WebIcon32x32dir)" "$(DESTDIR)$(WebIcon48x48dir)" \
"$(DESTDIR)$(WebPixmapdir)"
DATA = $(HelpHtml_DATA) $(HelpHtmlTxt_DATA) $(HelpHtmldiv_DATA) \ DATA = $(HelpHtml_DATA) $(HelpHtmlTxt_DATA) $(HelpHtmldiv_DATA) \
$(HelpHtmlimages_DATA) $(HelpHtmlimg_DATA) \ $(HelpHtmlimages_DATA) $(HelpHtmlimg_DATA) \
$(HelpHtmlroot_DATA) $(VFolderEntry_DATA) $(WebHtml_DATA) \ $(HelpHtmlroot_DATA) $(MetaInfo_DATA) $(VFolderEntry_DATA) \
$(WebHtmlimages_DATA) $(WebIcon16x16_DATA) \ $(WebHtml_DATA) $(WebHtmlimages_DATA) $(WebIcon16x16_DATA) \
$(WebIcon32x32_DATA) $(WebIcon48x48_DATA) $(WebPixmap_DATA) $(WebIcon32x32_DATA) $(WebIcon48x48_DATA) $(WebPixmap_DATA)
am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
am__DIST_COMMON = $(srcdir)/Makefile.in am__DIST_COMMON = $(srcdir)/Makefile.in
@@ -172,6 +174,7 @@ AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@ AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@ AUTOMAKE = @AUTOMAKE@
AWK = @AWK@ AWK = @AWK@
BASH = @BASH@
CC = @CC@ CC = @CC@
CCDEPMODE = @CCDEPMODE@ CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@ CFLAGS = @CFLAGS@
@@ -210,6 +213,7 @@ LD = @LD@
LDFLAGS = @LDFLAGS@ LDFLAGS = @LDFLAGS@
LDFLAGS_PIE = @LDFLAGS_PIE@ LDFLAGS_PIE = @LDFLAGS_PIE@
LFS_FLAG = @LFS_FLAG@ LFS_FLAG = @LFS_FLAG@
LIBC_FORCE_LINK = @LIBC_FORCE_LINK@
LIBOBJS = @LIBOBJS@ LIBOBJS = @LIBOBJS@
LIBS = @LIBS@ LIBS = @LIBS@
LIBTOOL = @LIBTOOL@ LIBTOOL = @LIBTOOL@
@@ -260,8 +264,10 @@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
am__include = @am__include@ am__include = @am__include@
am__leading_dot = @am__leading_dot@ am__leading_dot = @am__leading_dot@
am__quote = @am__quote@ am__quote = @am__quote@
am__rm_f_notfound = @am__rm_f_notfound@
am__tar = @am__tar@ am__tar = @am__tar@
am__untar = @am__untar@ am__untar = @am__untar@
am__xargs_n = @am__xargs_n@
bindir = @bindir@ bindir = @bindir@
build = @build@ build = @build@
build_alias = @build_alias@ build_alias = @build_alias@
@@ -316,26 +322,33 @@ WebIcon16x16dir = $(datadir)/icons/hicolor/16x16/apps
WebIcon32x32dir = $(datadir)/icons/hicolor/32x32/apps WebIcon32x32dir = $(datadir)/icons/hicolor/32x32/apps
WebIcon48x48dir = $(datadir)/icons/hicolor/48x48/apps WebIcon48x48dir = $(datadir)/icons/hicolor/48x48/apps
VFolderEntrydir = $(prefix)/share/applications VFolderEntrydir = $(prefix)/share/applications
MetaInfodir = $(datadir)/metainfo
# Wildcards are globbed against $(srcdir): a bare "*.html" is resolved against
# the build dir and stays unexpanded (breaking "make") in an out-of-tree build.
# Explicit filenames (e.g. ../history.txt, div/search.sh) resolve via VPATH and
# need no prefix.
HelpHtmlroot_DATA = ../httrack-doc.html ../history.txt HelpHtmlroot_DATA = ../httrack-doc.html ../history.txt
HelpHtml_DATA = *.html HelpHtml_DATA = $(srcdir)/*.html
HelpHtmldiv_DATA = div/search.sh HelpHtmldiv_DATA = div/search.sh
HelpHtmlimg_DATA = img/* HelpHtmlimg_DATA = $(srcdir)/img/*
HelpHtmlimages_DATA = images/* HelpHtmlimages_DATA = $(srcdir)/images/*
HelpHtmlTxt_DATA = ../greetings.txt ../history.txt ../license.txt HelpHtmlTxt_DATA = ../greetings.txt ../history.txt ../license.txt
WebHtml_DATA = server/*.html server/*.js server/*.css WebHtml_DATA = $(srcdir)/server/*.html $(srcdir)/server/*.js $(srcdir)/server/*.css
WebHtmlimages_DATA = server/images/* WebHtmlimages_DATA = $(srcdir)/server/images/*
# note: converted & normalized by # note: converted & normalized by
# ico2xpm favicon.ico -o httrack.xpm # ico2xpm favicon.ico -o httrack.xpm
# mogrify -format xpm -map /usr/share/doc/menu/examples/cmap.xpm httrack.xpm # mogrify -format xpm -map /usr/share/doc/menu/examples/cmap.xpm httrack.xpm
WebPixmap_DATA = server/div/*.xpm WebPixmap_DATA = $(srcdir)/server/div/*.xpm
WebIcon16x16_DATA = server/div/16x16/*.png WebIcon16x16_DATA = $(srcdir)/server/div/16x16/*.png
WebIcon32x32_DATA = server/div/32x32/*.png WebIcon32x32_DATA = $(srcdir)/server/div/32x32/*.png
WebIcon48x48_DATA = server/div/48x48/*.png WebIcon48x48_DATA = $(srcdir)/server/div/48x48/*.png
VFolderEntry_DATA = server/div/*.desktop VFolderEntry_DATA = $(srcdir)/server/div/*.desktop
MetaInfo_DATA = $(srcdir)/server/div/*.metainfo.xml
EXTRA_DIST = $(HelpHtml_DATA) $(HelpHtmlimg_DATA) $(HelpHtmlimages_DATA) \ EXTRA_DIST = $(HelpHtml_DATA) $(HelpHtmlimg_DATA) $(HelpHtmlimages_DATA) \
$(HelpHtmldiv_DATA) $(WebHtml_DATA) $(WebHtmlimages_DATA) \ $(HelpHtmldiv_DATA) $(WebHtml_DATA) $(WebHtmlimages_DATA) \
$(WebPixmap_DATA) $(WebIcon16x16_DATA) $(WebIcon32x32_DATA) $(WebIcon48x48_DATA) \ $(WebPixmap_DATA) $(WebIcon16x16_DATA) $(WebIcon32x32_DATA) $(WebIcon48x48_DATA) \
$(VFolderEntry_DATA) \ $(VFolderEntry_DATA) $(MetaInfo_DATA) \
httrack.css httrack.css
all: all-am all: all-am
@@ -502,6 +515,27 @@ uninstall-HelpHtmlrootDATA:
@list='$(HelpHtmlroot_DATA)'; test -n "$(HelpHtmlrootdir)" || list=; \ @list='$(HelpHtmlroot_DATA)'; test -n "$(HelpHtmlrootdir)" || list=; \
files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
dir='$(DESTDIR)$(HelpHtmlrootdir)'; $(am__uninstall_files_from_dir) dir='$(DESTDIR)$(HelpHtmlrootdir)'; $(am__uninstall_files_from_dir)
install-MetaInfoDATA: $(MetaInfo_DATA)
@$(NORMAL_INSTALL)
@list='$(MetaInfo_DATA)'; test -n "$(MetaInfodir)" || list=; \
if test -n "$$list"; then \
echo " $(MKDIR_P) '$(DESTDIR)$(MetaInfodir)'"; \
$(MKDIR_P) "$(DESTDIR)$(MetaInfodir)" || exit 1; \
fi; \
for p in $$list; do \
if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
echo "$$d$$p"; \
done | $(am__base_list) | \
while read files; do \
echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(MetaInfodir)'"; \
$(INSTALL_DATA) $$files "$(DESTDIR)$(MetaInfodir)" || exit $$?; \
done
uninstall-MetaInfoDATA:
@$(NORMAL_UNINSTALL)
@list='$(MetaInfo_DATA)'; test -n "$(MetaInfodir)" || list=; \
files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
dir='$(DESTDIR)$(MetaInfodir)'; $(am__uninstall_files_from_dir)
install-VFolderEntryDATA: $(VFolderEntry_DATA) install-VFolderEntryDATA: $(VFolderEntry_DATA)
@$(NORMAL_INSTALL) @$(NORMAL_INSTALL)
@list='$(VFolderEntry_DATA)'; test -n "$(VFolderEntrydir)" || list=; \ @list='$(VFolderEntry_DATA)'; test -n "$(VFolderEntrydir)" || list=; \
@@ -692,7 +726,7 @@ check-am: all-am
check: check-am check: check-am
all-am: Makefile $(DATA) all-am: Makefile $(DATA)
installdirs: installdirs:
for dir in "$(DESTDIR)$(HelpHtmldir)" "$(DESTDIR)$(HelpHtmlTxtdir)" "$(DESTDIR)$(HelpHtmldivdir)" "$(DESTDIR)$(HelpHtmlimagesdir)" "$(DESTDIR)$(HelpHtmlimgdir)" "$(DESTDIR)$(HelpHtmlrootdir)" "$(DESTDIR)$(VFolderEntrydir)" "$(DESTDIR)$(WebHtmldir)" "$(DESTDIR)$(WebHtmlimagesdir)" "$(DESTDIR)$(WebIcon16x16dir)" "$(DESTDIR)$(WebIcon32x32dir)" "$(DESTDIR)$(WebIcon48x48dir)" "$(DESTDIR)$(WebPixmapdir)"; do \ for dir in "$(DESTDIR)$(HelpHtmldir)" "$(DESTDIR)$(HelpHtmlTxtdir)" "$(DESTDIR)$(HelpHtmldivdir)" "$(DESTDIR)$(HelpHtmlimagesdir)" "$(DESTDIR)$(HelpHtmlimgdir)" "$(DESTDIR)$(HelpHtmlrootdir)" "$(DESTDIR)$(MetaInfodir)" "$(DESTDIR)$(VFolderEntrydir)" "$(DESTDIR)$(WebHtmldir)" "$(DESTDIR)$(WebHtmlimagesdir)" "$(DESTDIR)$(WebIcon16x16dir)" "$(DESTDIR)$(WebIcon32x32dir)" "$(DESTDIR)$(WebIcon48x48dir)" "$(DESTDIR)$(WebPixmapdir)"; do \
test -z "$$dir" || $(MKDIR_P) "$$dir"; \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
done done
install: install-am install: install-am
@@ -719,8 +753,8 @@ mostlyclean-generic:
clean-generic: clean-generic:
distclean-generic: distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -$(am__rm_f) $(CONFIG_CLEAN_FILES)
-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) -test . = "$(srcdir)" || $(am__rm_f) $(CONFIG_CLEAN_VPATH_FILES)
maintainer-clean-generic: maintainer-clean-generic:
@echo "This command is intended for maintainers to use" @echo "This command is intended for maintainers to use"
@@ -748,10 +782,10 @@ info-am:
install-data-am: install-HelpHtmlDATA install-HelpHtmlTxtDATA \ install-data-am: install-HelpHtmlDATA install-HelpHtmlTxtDATA \
install-HelpHtmldivDATA install-HelpHtmlimagesDATA \ install-HelpHtmldivDATA install-HelpHtmlimagesDATA \
install-HelpHtmlimgDATA install-HelpHtmlrootDATA \ install-HelpHtmlimgDATA install-HelpHtmlrootDATA \
install-VFolderEntryDATA install-WebHtmlDATA \ install-MetaInfoDATA install-VFolderEntryDATA \
install-WebHtmlimagesDATA install-WebIcon16x16DATA \ install-WebHtmlDATA install-WebHtmlimagesDATA \
install-WebIcon32x32DATA install-WebIcon48x48DATA \ install-WebIcon16x16DATA install-WebIcon32x32DATA \
install-WebPixmapDATA install-WebIcon48x48DATA install-WebPixmapDATA
@$(NORMAL_INSTALL) @$(NORMAL_INSTALL)
$(MAKE) $(AM_MAKEFLAGS) install-data-hook $(MAKE) $(AM_MAKEFLAGS) install-data-hook
install-dvi: install-dvi-am install-dvi: install-dvi-am
@@ -799,10 +833,10 @@ ps-am:
uninstall-am: uninstall-HelpHtmlDATA uninstall-HelpHtmlTxtDATA \ uninstall-am: uninstall-HelpHtmlDATA uninstall-HelpHtmlTxtDATA \
uninstall-HelpHtmldivDATA uninstall-HelpHtmlimagesDATA \ uninstall-HelpHtmldivDATA uninstall-HelpHtmlimagesDATA \
uninstall-HelpHtmlimgDATA uninstall-HelpHtmlrootDATA \ uninstall-HelpHtmlimgDATA uninstall-HelpHtmlrootDATA \
uninstall-VFolderEntryDATA uninstall-WebHtmlDATA \ uninstall-MetaInfoDATA uninstall-VFolderEntryDATA \
uninstall-WebHtmlimagesDATA uninstall-WebIcon16x16DATA \ uninstall-WebHtmlDATA uninstall-WebHtmlimagesDATA \
uninstall-WebIcon32x32DATA uninstall-WebIcon48x48DATA \ uninstall-WebIcon16x16DATA uninstall-WebIcon32x32DATA \
uninstall-WebPixmapDATA uninstall-WebIcon48x48DATA uninstall-WebPixmapDATA
.MAKE: install-am install-data-am install-strip .MAKE: install-am install-data-am install-strip
@@ -812,20 +846,21 @@ uninstall-am: uninstall-HelpHtmlDATA uninstall-HelpHtmlTxtDATA \
install install-HelpHtmlDATA install-HelpHtmlTxtDATA \ install install-HelpHtmlDATA install-HelpHtmlTxtDATA \
install-HelpHtmldivDATA install-HelpHtmlimagesDATA \ install-HelpHtmldivDATA install-HelpHtmlimagesDATA \
install-HelpHtmlimgDATA install-HelpHtmlrootDATA \ install-HelpHtmlimgDATA install-HelpHtmlrootDATA \
install-VFolderEntryDATA install-WebHtmlDATA \ install-MetaInfoDATA install-VFolderEntryDATA \
install-WebHtmlimagesDATA install-WebIcon16x16DATA \ install-WebHtmlDATA install-WebHtmlimagesDATA \
install-WebIcon32x32DATA install-WebIcon48x48DATA \ install-WebIcon16x16DATA install-WebIcon32x32DATA \
install-WebPixmapDATA install-am install-data install-data-am \ install-WebIcon48x48DATA install-WebPixmapDATA install-am \
install-data-hook install-dvi install-dvi-am install-exec \ install-data install-data-am install-data-hook install-dvi \
install-exec-am install-html install-html-am install-info \ install-dvi-am install-exec install-exec-am install-html \
install-info-am install-man install-pdf install-pdf-am \ install-html-am install-info install-info-am install-man \
install-ps install-ps-am install-strip installcheck \ install-pdf install-pdf-am install-ps install-ps-am \
installcheck-am installdirs maintainer-clean \ install-strip installcheck installcheck-am installdirs \
maintainer-clean-generic mostlyclean mostlyclean-generic \ maintainer-clean maintainer-clean-generic mostlyclean \
mostlyclean-libtool pdf pdf-am ps ps-am tags-am uninstall \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
uninstall-HelpHtmlDATA uninstall-HelpHtmlTxtDATA \ tags-am uninstall uninstall-HelpHtmlDATA \
uninstall-HelpHtmldivDATA uninstall-HelpHtmlimagesDATA \ uninstall-HelpHtmlTxtDATA uninstall-HelpHtmldivDATA \
uninstall-HelpHtmlimgDATA uninstall-HelpHtmlrootDATA \ uninstall-HelpHtmlimagesDATA uninstall-HelpHtmlimgDATA \
uninstall-HelpHtmlrootDATA uninstall-MetaInfoDATA \
uninstall-VFolderEntryDATA uninstall-WebHtmlDATA \ uninstall-VFolderEntryDATA uninstall-WebHtmlDATA \
uninstall-WebHtmlimagesDATA uninstall-WebIcon16x16DATA \ uninstall-WebHtmlimagesDATA uninstall-WebIcon16x16DATA \
uninstall-WebIcon32x32DATA uninstall-WebIcon48x48DATA \ uninstall-WebIcon32x32DATA uninstall-WebIcon48x48DATA \
@@ -844,3 +879,10 @@ install-data-hook:
# Tell versions [3.59,3.63) of GNU make to not export all variables. # Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded. # Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT: .NOEXPORT:
# Tell GNU make to disable its built-in pattern rules.
%:: %,v
%:: RCS/%,v
%:: RCS/%
%:: s.%
%:: SCCS/s.%

View File

@@ -118,11 +118,11 @@ The command-line version
<br> <br>
<br> <br>
<li>Add the URLs, separated by a blank space</li> <li>Add the URLs, separated by a blank space</li>
<br><small><tt>httrack www.someweb.com/foo/</tt></small> <br><small><tt>httrack www.example.com/foo/</tt></small>
<br> <br>
<br> <br>
<li>If you need, add some options (see the <a href="options.html">option list</a>)</li> <li>If you need, add some options (see the <a href="options.html">option list</a>)</li>
<br><small><tt>httrack www.someweb.com/foo/ -O "/webs" -N4 -P proxy.myhost.com:3128</tt></small> <br><small><tt>httrack www.example.com/foo/ -O "/webs" -N4 -P proxy.myhost.com:3128</tt></small>
<br> <br>
<br> <br>
<li>Launch the command line, and wait until the mirror is finishing</li> <li>Launch the command line, and wait until the mirror is finishing</li>

View File

@@ -303,43 +303,43 @@ Okay, let me explain how to precisely control the capture process.<br>
Let's take an example:<br> Let's take an example:<br>
<br> <br>
Imagine you want to capture the following site:<br> Imagine you want to capture the following site:<br>
<tt>www.someweb.com/gallery/flowers/</tt><br> <tt>www.example.com/gallery/flowers/</tt><br>
<br> <br>
HTTrack, by default, will capture all links encountered in <tt>www.someweb.com/gallery/flowers/</tt> or in lower directories, like HTTrack, by default, will capture all links encountered in <tt>www.example.com/gallery/flowers/</tt> or in lower directories, like
<tt>www.someweb.com/gallery/flowers/roses/</tt>.<br> <tt>www.example.com/gallery/flowers/roses/</tt>.<br>
It will not follow links to other websites, because this behaviour might cause to capture the Web entirely!<br> It will not follow links to other websites, because this behaviour might cause to capture the Web entirely!<br>
It will not follow links located in higher directories, too (for example, <tt>www.someweb.com/gallery/flowers/</tt> itself) because this It will not follow links located in higher directories, too (for example, <tt>www.example.com/gallery/flowers/</tt> itself) because this
might cause to capture too much data.<br> might cause to capture too much data.<br>
<br> <br>
This is the <b><u>default behaviour</b></u> of HTTrack, BUT, of course, if you want, you can tell HTTrack to capture other directorie(s), website(s)!.. This is the <b><u>default behaviour</b></u> of HTTrack, BUT, of course, if you want, you can tell HTTrack to capture other directorie(s), website(s)!..
<br> <br>
In our example, we might want also to capture all links in <tt>www.someweb.com/gallery/trees/</tt>, and in <tt>www.someweb.com/photos/</tt><br> In our example, we might want also to capture all links in <tt>www.example.com/gallery/trees/</tt>, and in <tt>www.example.com/photos/</tt><br>
<br> <br>
This can easily done by using filters: go to the Option panel, select the 'Scan rules' tab, and enter this line: This can easily done by using filters: go to the Option panel, select the 'Scan rules' tab, and enter this line:
(you can leave a blank space between each rules, instead of entering a carriage return)<br> (you can leave a blank space between each rules, instead of entering a carriage return)<br>
<tt>+www.someweb.com/gallery/trees/*<br> <tt>+www.example.com/gallery/trees/*<br>
+www.someweb.com/photos/*</tt><br> +www.example.com/photos/*</tt><br>
<br> <br>
This means "accept all links begining with <tt>www.someweb.com/gallery/trees/</tt> and <tt>www.someweb.com/photos/</tt>" This means "accept all links begining with <tt>www.example.com/gallery/trees/</tt> and <tt>www.example.com/photos/</tt>"
- the <tt>+</tt> means "accept" and the final <tt>*</tt> means "any character will match after the previous ones". - the <tt>+</tt> means "accept" and the final <tt>*</tt> means "any character will match after the previous ones".
Remember the <tt>*.doc</tt> or <tt>*.zip</tt> encountered when you want to select all files from a certain type on your computer: Remember the <tt>*.doc</tt> or <tt>*.zip</tt> encountered when you want to select all files from a certain type on your computer:
it is almost the same here, except the begining "+"<br> it is almost the same here, except the begining "+"<br>
<br> <br>
Now, we might want to exclude all links in <tt>www.someweb.com/gallery/trees/hugetrees/</tt>, because with the previous filter, Now, we might want to exclude all links in <tt>www.example.com/gallery/trees/hugetrees/</tt>, because with the previous filter,
we accepted too many files. Here again, you can add a filter rule to refuse these links. Modify the previous filters to:<br> we accepted too many files. Here again, you can add a filter rule to refuse these links. Modify the previous filters to:<br>
<tt>+www.someweb.com/gallery/trees/*<br> <tt>+www.example.com/gallery/trees/*<br>
+www.someweb.com/photos/*<br> +www.example.com/photos/*<br>
-www.someweb.com/gallery/trees/hugetrees/*</tt><br> -www.example.com/gallery/trees/hugetrees/*</tt><br>
<br> <br>
You have noticed the <tt>-</tt> in the begining of the third rule: this means "refuse links matching the rule" You have noticed the <tt>-</tt> in the begining of the third rule: this means "refuse links matching the rule"
; and the rule is "any files begining with <tt>www.someweb.com/gallery/trees/hugetrees/</tt><br> ; and the rule is "any files begining with <tt>www.example.com/gallery/trees/hugetrees/</tt><br>
Voila! With these three rules, you have precisely defined what you wanted to capture.<br> Voila! With these three rules, you have precisely defined what you wanted to capture.<br>
<br> <br>
A more complex example?<br> A more complex example?<br>
<br> <br>
Imagine that you want to accept all jpg files (files with .jpg type) that have "blue" in the name and located in www.someweb.com<br> Imagine that you want to accept all jpg files (files with .jpg type) that have "blue" in the name and located in www.example.com<br>
<tt>+www.someweb.com/*blue*.jpg</tt><br> <tt>+www.example.com/*blue*.jpg</tt><br>
<br> <br>
More detailed information can be found <a href="filters.html">here</a>!<br> More detailed information can be found <a href="filters.html">here</a>!<br>
<br> <br>
@@ -440,7 +440,7 @@ This will cause a performance loss, but will increase the compatibility with som
<a NAME="QT1">Q: <strong>Only the first page is caught. What's wrong?</a></strong></br> <a NAME="QT1">Q: <strong>Only the first page is caught. What's wrong?</a></strong></br>
A: <em>First, check the <tt>hts-log.txt</tt> file (and/or <tt>hts-err.txt</tt> error log file) - this can give you precious information.<br> A: <em>First, check the <tt>hts-log.txt</tt> file (and/or <tt>hts-err.txt</tt> error log file) - this can give you precious information.<br>
The problem can be a website that redirects you to another site (for example, <tt>www.someweb.com</tt> to <tt>public.someweb.com</tt>) : The problem can be a website that redirects you to another site (for example, <tt>www.example.com</tt> to <tt>public.example.com</tt>) :
in this case, use filters to accept this site<br> in this case, use filters to accept this site<br>
This can be, also, a problem in the HTTrack options (link depth too low, for example)</em> This can be, also, a problem in the HTTrack options (link depth too low, for example)</em>
@@ -485,10 +485,10 @@ You may also want to capture files that are forbidden by default by the <a href=
In these cases, HTTrack does not capture these links automatically, you have to tell it to do so. In these cases, HTTrack does not capture these links automatically, you have to tell it to do so.
<br><br> <br><br>
<ul><li>Either use the <a href="filters.html">filters</a>.<br> <ul><li>Either use the <a href="filters.html">filters</a>.<br>
Example: You are downloading <tt>http://www.someweb.com/foo/</tt> and can not get .jpg images located Example: You are downloading <tt>http://www.example.com/foo/</tt> and can not get .jpg images located
in <tt>http://www.someweb.com/bar/</tt> (for example, http://www.someweb.com/bar/blue.jpg)<br> in <tt>http://www.example.com/bar/</tt> (for example, http://www.example.com/bar/blue.jpg)<br>
Then, add the filter rule <tt>+www.someweb.com/bar/*.jpg</tt> to accept all .jpg files from this location<br> Then, add the filter rule <tt>+www.example.com/bar/*.jpg</tt> to accept all .jpg files from this location<br>
You can, also, accept all files from the /bar folder with <tt>+www.someweb.com/bar/*</tt>, or only html files with <tt>+www.someweb.com/bar/*.html</tt> and so on..<br><br> You can, also, accept all files from the /bar folder with <tt>+www.example.com/bar/*</tt>, or only html files with <tt>+www.example.com/bar/*.html</tt> and so on..<br><br>
</li><li> </li><li>
If the problems are related to robots.txt rules, that do not let you access some folders (check in the logs if you are not sure), If the problems are related to robots.txt rules, that do not let you access some folders (check in the logs if you are not sure),
you may want to disable the default robots.txt rules in the options. (but only disable this option with great care, you may want to disable the default robots.txt rules in the options. (but only disable this option with great care,
@@ -509,8 +509,8 @@ and rescan the website as described before. HTTrack will be obliged to recatch t
<a NAME="Q1bb">Q: <strong>FTP links are not caught! What's happening?</strong><br> <a NAME="Q1bb">Q: <strong>FTP links are not caught! What's happening?</strong><br>
A: <em>FTP files might be seen as external links, especially if they are located in outside domain. You have either to accept all external links (See the links options, -n option) or A: <em>FTP files might be seen as external links, especially if they are located in outside domain. You have either to accept all external links (See the links options, -n option) or
only specific files (see <a href="filters.html">filters</a> section). <br> only specific files (see <a href="filters.html">filters</a> section). <br>
Example: You are downloading <tt>http://www.someweb.com/foo/</tt> and can not get ftp://ftp.someweb.com files<br> Example: You are downloading <tt>http://www.example.com/foo/</tt> and can not get ftp://ftp.example.com files<br>
Then, add the filter rule <tt>+ftp.someweb.com/*</tt> to accept all files from this (ftp) location<br> Then, add the filter rule <tt>+ftp.example.com/*</tt> to accept all files from this (ftp) location<br>
</em> </em>
<br> <br>
@@ -551,10 +551,10 @@ Note: In some rare cases, duplicate data files can be found when the website red
<a NAME="Q1b2">Q: <strong>I'm downloading too many files! What can I do?</strong><br> <a NAME="Q1b2">Q: <strong>I'm downloading too many files! What can I do?</strong><br>
A: <em>This is often the case when you use too large a filter, for example <tt>+*.html</tt>, which asks the A: <em>This is often the case when you use too large a filter, for example <tt>+*.html</tt>, which asks the
engine to catch all .html pages (even ones on other sites!). In this case, try to use more specific filters, like <tt>+www.someweb.com/specificfolder/*.html</tt><br> engine to catch all .html pages (even ones on other sites!). In this case, try to use more specific filters, like <tt>+www.example.com/specificfolder/*.html</tt><br>
If you still have too many files, use filters to avoid somes files. For example, if you have too many files from www.someweb.com/big/, If you still have too many files, use filters to avoid somes files. For example, if you have too many files from www.example.com/big/,
use <tt>-www.someweb.com/big/*</tt> to avoid all files from this folder. Remember that the default behaviour of the engine, when use <tt>-www.example.com/big/*</tt> to avoid all files from this folder. Remember that the default behaviour of the engine, when
mirroring http://www.someweb.com/big/index.html, is to catch everything in http://www.someweb.com/big/. Filters are your friends, mirroring http://www.example.com/big/index.html, is to catch everything in http://www.example.com/big/. Filters are your friends,
use them! use them!
</em> </em>
<br> <br>
@@ -562,7 +562,7 @@ use them!
<a NAME="Q1b22">Q: <strong>The engine turns crazy, getting thousands of files! What's going on?</strong><br> <a NAME="Q1b22">Q: <strong>The engine turns crazy, getting thousands of files! What's going on?</strong><br>
A: <em>This can happen if a loop occurs in some bogus website. For example, a page that refers to itself, with a timestamp A: <em>This can happen if a loop occurs in some bogus website. For example, a page that refers to itself, with a timestamp
in the query string (e.g. <tt>http://www.someweb.com/foo.asp?ts=2000/10/10,09:45:17:147</tt>). in the query string (e.g. <tt>http://www.example.com/foo.asp?ts=2000/10/10,09:45:17:147</tt>).
These are really annoying, as it is VERY difficult to detect the loop (the timestamp might be a page number). These are really annoying, as it is VERY difficult to detect the loop (the timestamp might be a page number).
To limit the problem: set a recurse level (for example to 6), or avoid the bogus pages (use the filters) To limit the problem: set a recurse level (for example to 6), or avoid the bogus pages (use the filters)
</em> </em>
@@ -571,7 +571,7 @@ To limit the problem: set a recurse level (for example to 6), or avoid the bogus
<a NAME="Q1b3">Q: <strong>File are sometimes renamed (the type is changed)! Why?</strong><br> <a NAME="Q1b3">Q: <strong>File are sometimes renamed (the type is changed)! Why?</strong><br>
A: <em>By default, HTTrack tries to know the type of remote files. This is useful when links like A: <em>By default, HTTrack tries to know the type of remote files. This is useful when links like
<tt>http://www.someweb.com/foo.cgi?id=1</tt> can be either HTML pages, images or anything else. <tt>http://www.example.com/foo.cgi?id=1</tt> can be either HTML pages, images or anything else.
Locally, foo.cgi will not be recognized as an html page, or as an image, by your browser. HTTrack has to rename the file Locally, foo.cgi will not be recognized as an html page, or as an image, by your browser. HTTrack has to rename the file
as foo.html or foo.gif so that it can be viewed.<br> as foo.html or foo.gif so that it can be viewed.<br>
</em> </em>
@@ -730,8 +730,8 @@ but this is a smart bug..
the domain, too. How to retrieve them?</strong><br> the domain, too. How to retrieve them?</strong><br>
A: <em>If you just want to retrieve files that can be reached through links, just activate A: <em>If you just want to retrieve files that can be reached through links, just activate
the 'get file near links' option. But if you want to retrieve html pages too, you can both the 'get file near links' option. But if you want to retrieve html pages too, you can both
use wildcards or explicit addresses ; e.g. add <tt>www.someweb.com/*</tt> to accept all use wildcards or explicit addresses ; e.g. add <tt>www.example.com/*</tt> to accept all
files and pages from www.someweb.com.<br> files and pages from www.example.com.<br>
<br> <br>
</em></a><a NAME="Q6">Q: <strong>I have forgotten some URLs of files during a long </em></a><a NAME="Q6">Q: <strong>I have forgotten some URLs of files during a long
mirror.. Should I redo all?</strong><br> mirror.. Should I redo all?</strong><br>
@@ -744,7 +744,7 @@ A: <em>You can use different methods. You can use the 'get files near a link' op
files are in a foreign domain. You can use, too, a filter adress: adding <tt>+*.zip</tt> files are in a foreign domain. You can use, too, a filter adress: adding <tt>+*.zip</tt>
in the URL list (or in the filter list) will accept all ZIP files, even if these files are in the URL list (or in the filter list) will accept all ZIP files, even if these files are
outside the address. <br> outside the address. <br>
Example : <tt>httrack www.someweb.com/someaddress.html +*.zip</tt> will allow Example : <tt>httrack www.example.com/someaddress.html +*.zip</tt> will allow
you to retrieve all zip files that are linked on the site.</em><br> you to retrieve all zip files that are linked on the site.</em><br>
<br> <br>
</a><a NAME="Q8">Q: <strong>There are ZIP files in a page, but I don't want to transfer </a><a NAME="Q8">Q: <strong>There are ZIP files in a page, but I don't want to transfer
@@ -771,7 +771,7 @@ them on filters!</strong><br>
A: <em>By default, HTTrack retrieves all types of files on authorized links. To avoid A: <em>By default, HTTrack retrieves all types of files on authorized links. To avoid
that, define filters like </a><a NAME="Q7"><tt>-* +&lt;website&gt;/*.html that, define filters like </a><a NAME="Q7"><tt>-* +&lt;website&gt;/*.html
+&lt;website&gt;/*.htm +&lt;website&gt;/ +*.&lt;type wanted&gt;</tt></a><a NAME="Q10"><br> +&lt;website&gt;/*.htm +&lt;website&gt;/ +*.&lt;type wanted&gt;</tt></a><a NAME="Q10"><br>
Example: <tt>httrack www.someweb.com/index.html -* +www.someweb.com/*.htm* +www.someweb.com/*.gif +www.someweb.com/*.jpg</tt><br> Example: <tt>httrack www.example.com/index.html -* +www.example.com/*.htm* +www.example.com/*.gif +www.example.com/*.jpg</tt><br>
<br> <br>
</em><a NAME="Q10">Q: <strong>When I use filters, I get too many files!</strong><br> </em><a NAME="Q10">Q: <strong>When I use filters, I get too many files!</strong><br>
A: <em>You might use too large a filter, for example <tt>*.html</tt> will get ALL html A: <em>You might use too large a filter, for example <tt>*.html</tt> will get ALL html
@@ -779,13 +779,13 @@ files identified. If you want to get all files on an address, use <tt>www.&lt;ad
If you want to get ONLY files defined by your filters, use something like <tt>-* +www.foo.com/*</tt>, because If you want to get ONLY files defined by your filters, use something like <tt>-* +www.foo.com/*</tt>, because
<tt>+www.foo.com/*</tt> will only accept selected links without forbidding other ones!<br> <tt>+www.foo.com/*</tt> will only accept selected links without forbidding other ones!<br>
There are lots of possibilities using filters.<br> There are lots of possibilities using filters.<br>
Example:<tt>httrack www.someweb.com +*.someweb.com/*.htm*</tt><br> Example:<tt>httrack www.example.com +*.example.com/*.htm*</tt><br>
<br> <br>
</em></a><a NAME="Q11">Q: <strong>When I use filters, I can't access another domain, but I </em></a><a NAME="Q11">Q: <strong>When I use filters, I can't access another domain, but I
have filtered it!</strong><br> have filtered it!</strong><br>
A: <em>You may have done a mistake declaring filters, for example <tt>+www.someweb.com/* A: <em>You may have done a mistake declaring filters, for example <tt>+www.example.com/*
-*someweb* </tt></em>will not work, because -*someweb* has an upper priority (because it has -*example* </tt></em>will not work, because -*example* has an upper priority (because it has
been declared after +www.someweb.com)<br> been declared after +www.example.com)<br>
<br> <br>
</a><a NAME="Q12">Q: <strong>Must I add a&nbsp; '+' or '-' in the filter list when I want </a><a NAME="Q12">Q: <strong>Must I add a&nbsp; '+' or '-' in the filter list when I want
to use filters?</strong><br> to use filters?</strong><br>
@@ -800,7 +800,7 @@ filter list) and accept only html files and the file(s) you want to retrieve (BU
forget to add <tt>+&lt;website&gt;*.html</tt> in the filter list, or pages will not be forget to add <tt>+&lt;website&gt;*.html</tt> in the filter list, or pages will not be
scanned! Add the name of files you want with a <tt>*/</tt> before ; i.e. if you want to scanned! Add the name of files you want with a <tt>*/</tt> before ; i.e. if you want to
retrieve file.zip, add <tt>*/file.zip</tt>)<br> retrieve file.zip, add <tt>*/file.zip</tt>)<br>
Example:<tt>httrack www.someweb.com +www.someweb.com/*.htm* +thefileiwant.zip</tt><br> Example:<tt>httrack www.example.com +www.example.com/*.htm* +thefileiwant.zip</tt><br>
<br> <br>
</em> </em>
@@ -828,7 +828,7 @@ A: <em>Yes. See the URL capture abilities (--catchurl for command-line release,
A: <em>Yes. See the shell system command option (-V option for command-line release)</em> A: <em>Yes. See the shell system command option (-V option for command-line release)</em>
<br><br><a NAME="QM6">Q: <strong>Can I use username/password authentication on a site?</strong></a><br> <br><br><a NAME="QM6">Q: <strong>Can I use username/password authentication on a site?</strong></a><br>
A: <em>Yes. Use user:password@your_url (example: <tt>http://foo:bar@www.someweb.com/private/mybox.html</tt>)</em> A: <em>Yes. Use user:password@your_url (example: <tt>http://foo:bar@www.example.com/private/mybox.html</tt>)</em>
<br><br><a NAME="QM7">Q: <strong>Can I use username/password authentication for a proxy?</strong></a><br> <br><br><a NAME="QM7">Q: <strong>Can I use username/password authentication for a proxy?</strong></a><br>
A: <em>Yes. Use user:password@your_proxy_name as your proxy name (example: <tt>smith:foo@proxy.mycorp.com</tt>)</em> A: <em>Yes. Use user:password@your_proxy_name as your proxy name (example: <tt>smith:foo@proxy.mycorp.com</tt>)</em>

View File

@@ -181,17 +181,17 @@ used for some time.
<p align=justify> The rest of this manual is dedicated to detailing what <p align=justify> The rest of this manual is dedicated to detailing what
you find in the help message and providing examples - lots and lots of you find in the help message and providing examples - lots and lots of
examples... Here is what you get (page by page - use <enter> to move to examples... Here is what you get (page by page - use &lt;enter&gt; to move to
the next page in the real program) if you type 'httrack --help': the next page in the real program) if you type 'httrack --help':
<pre> <pre>
>httrack --help >httrack --help
HTTrack version 3.03BETAo4 (compiled Jul 1 2001) HTTrack version 3.03BETAo4 (compiled Jul 1 2001)
usage: ./httrack <URLs [-option] [+<FILTERs>] [-<FILTERs>] usage: ./httrack &lt;URLs&gt; [-option] [+&lt;FILTERs&gt;] [-&lt;FILTERs&gt;]
with options listed below: (* is the default value) with options listed below: (* is the default value)
General options: General options:
O path for mirror/logfiles+cache (-O path_mirror[,path_cache_and_logfiles]) (--path <param>) O path for mirror/logfiles+cache (-O path_mirror[,path_cache_and_logfiles]) (--path &lt;param&gt;)
%O top path if no path defined (-O path_mirror[,path_cache_and_logfiles]) %O top path if no path defined (-O path_mirror[,path_cache_and_logfiles])
Action options: Action options:
@@ -202,7 +202,7 @@ Action options:
Y mirror ALL links located in the first level pages (mirror links) (--mirrorlinks) Y mirror ALL links located in the first level pages (mirror links) (--mirrorlinks)
Proxy options: Proxy options:
P proxy use (-P proxy:port or -P user:pass@proxy:port) (--proxy <param>) P proxy use (-P proxy:port or -P user:pass@proxy:port) (--proxy &lt;param&gt;)
%f *use proxy for ftp (f0 don't use) (--httpproxy-ftp[=N]) %f *use proxy for ftp (f0 don't use) (--httpproxy-ftp[=N])
Limits options: Limits options:
@@ -227,7 +227,7 @@ Links options:
%P *extended parsing, attempt to parse all links, even in unknown tags or Javascript (%P0 don't use) (--extended-parsing[=N]) %P *extended parsing, attempt to parse all links, even in unknown tags or Javascript (%P0 don't use) (--extended-parsing[=N])
n get non-html files 'near' an html file (ex: an image located outside) (--near) n get non-html files 'near' an html file (ex: an image located outside) (--near)
t test all URLs (even forbidden ones) (--test) t test all URLs (even forbidden ones) (--test)
%L <file add all URL located in this text file (one URL per line) (--list <param>) %L &lt;file&gt; add all URL located in this text file (one URL per line) (--list &lt;param&gt;)
Build options: Build options:
NN structure type (0 *original structure, 1+: see below) (--structure[=N]) NN structure type (0 *original structure, 1+: see below) (--structure[=N])
@@ -248,12 +248,12 @@ Spider options:
%h force HTTP/1.0 requests (reduce update features, only for old servers or proxies) (--http-10) %h force HTTP/1.0 requests (reduce update features, only for old servers or proxies) (--http-10)
%B tolerant requests (accept bogus responses on some servers, but not standard!) (--tolerant) %B tolerant requests (accept bogus responses on some servers, but not standard!) (--tolerant)
%s update hacks: various hacks to limit re-transfers when updating (identical size, bogus response..) (--updatehack) %s update hacks: various hacks to limit re-transfers when updating (identical size, bogus response..) (--updatehack)
%A assume that a type (cgi,asp..) is always linked with a mime type (-%A php3=text/html) (--assume <param>) %A assume that a type (cgi,asp..) is always linked with a mime type (-%A php3=text/html) (--assume &lt;param&gt;)
Browser ID: Browser ID:
F user-agent field (-F "user-agent name") (--user-agent <param>) F user-agent field (-F "user-agent name") (--user-agent &lt;param&gt;)
%F footer string in Html code (-%F "Mirrored [from host %s [file %s [at %s]]]" (--footer <param>) %F footer string in Html code (-%F "Mirrored [from host %s [file %s [at %s]]]" (--footer &lt;param&gt;)
%l preffered language (-%l "fr, en, jp, *" (--language <param>) %l preferred language (-%l "fr, en, jp, *" (--language &lt;param&gt;)
Log, index, cache Log, index, cache
C create/use a cache for updates and retries (C0 no cache,C1 cache is prioritary,* C2 test update before) (--cache[=N]) C create/use a cache for updates and retries (C0 no cache,C1 cache is prioritary,* C2 test update before) (--cache[=N])
@@ -303,8 +303,8 @@ Guru options: (do NOT use)
#! Execute a shell command (-#! "echo hello") #! Execute a shell command (-#! "echo hello")
Command-line specific options: Command-line specific options:
V execute system command after each files ($0 is the filename: -V "rm \$0") (--userdef-cmd <param>) V execute system command after each files ($0 is the filename: -V "rm \$0") (--userdef-cmd &lt;param&gt;)
%U run the engine with another id when called as root (-%U smith) (--user <param>) %U run the engine with another id when called as root (-%U smith) (--user &lt;param&gt;)
Details: Option N Details: Option N
N0 Site-structure (default) N0 Site-structure (default)
@@ -332,7 +332,7 @@ Details: User-defined option N
%N Name of file, including file type (ex: image.gif) %N Name of file, including file type (ex: image.gif)
%t File type (ex: gif) %t File type (ex: gif)
%p Path [without ending /] (ex: /someimages) %p Path [without ending /] (ex: /someimages)
%h Host name (ex: www.someweb.com) (--http-10) %h Host name (ex: www.example.com) (--http-10)
%M URL MD5 (128 bits, 32 ascii bytes) %M URL MD5 (128 bits, 32 ascii bytes)
%Q query string MD5 (128 bits, 32 ascii bytes) %Q query string MD5 (128 bits, 32 ascii bytes)
%q small query string MD5 (16 bits, 4 ascii bytes) (--include-query-string) %q small query string MD5 (16 bits, 4 ascii bytes) (--include-query-string)
@@ -340,14 +340,14 @@ Details: User-defined option N
%[param] param variable in query string %[param] param variable in query string
Shortcuts: Shortcuts:
--mirror <URLs *make a mirror of site(s) (default) --mirror &lt;URLs&gt; *make a mirror of site(s) (default)
--get <URLs get the files indicated, do not seek other URLs (-qg) --get &lt;URLs&gt; get the files indicated, do not seek other URLs (-qg)
--list <text file add all URL located in this text file (-%L) --list &lt;text file&gt; add all URL located in this text file (-%L)
--mirrorlinks <URLs mirror all links in 1st level pages (-Y) --mirrorlinks &lt;URLs&gt; mirror all links in 1st level pages (-Y)
--testlinks <URLs test links in pages (-r1p0C0I0t) --testlinks &lt;URLs&gt; test links in pages (-r1p0C0I0t)
--spider <URLs spider site(s), to test links: reports Errors & Warnings (-p0C0I0t) --spider &lt;URLs&gt; spider site(s), to test links: reports Errors & Warnings (-p0C0I0t)
--testsite <URLs identical to --spider --testsite &lt;URLs&gt; identical to --spider
--skeleton <URLs make a mirror, but gets only html files (-p1) --skeleton &lt;URLs&gt; make a mirror, but gets only html files (-p1)
--update update a mirror, without confirmation (-iC2) --update update a mirror, without confirmation (-iC2)
--continue continue a mirror, without confirmation (-iC1) --continue continue a mirror, without confirmation (-iC1)
@@ -356,17 +356,17 @@ Shortcuts:
--http10 force http/1.0 requests (-%h) --http10 force http/1.0 requests (-%h)
example: httrack www.someweb.com/bob/ example: httrack www.example.com/bob/
means: mirror site www.someweb.com/bob/ and only this site means: mirror site www.example.com/bob/ and only this site
example: httrack www.someweb.com/bob/ www.anothertest.com/mike/ +*.com/*.jpg example: httrack www.example.com/bob/ www.anothertest.com/mike/ +*.com/*.jpg
means: mirror the two sites together (with shared links) and accept any .jpg files on .com sites means: mirror the two sites together (with shared links) and accept any .jpg files on .com sites
example: httrack www.someweb.com/bob/bobby.html +* -r6 example: httrack www.example.com/bob/bobby.html +* -r6
means get all files starting from bobby.html, with 6 link-depth, and possibility of going everywhere on the web means get all files starting from bobby.html, with 6 link-depth, and possibility of going everywhere on the web
example: httrack www.someweb.com/bob/bobby.html --spider -P proxy.myhost.com:8080 example: httrack www.example.com/bob/bobby.html --spider -P proxy.myhost.com:8080
runs the spider on www.someweb.com/bob/bobby.html using a proxy runs the spider on www.example.com/bob/bobby.html using a proxy
example: httrack --update example: httrack --update
updates a mirror in the current folder updates a mirror in the current folder
@@ -387,13 +387,13 @@ with examples... I will be here a while...
<hr> <hr>
<h2> Syntax </h2> <h2> Syntax </h2>
<pre><b><i>httrack <URLs> [-option] [+<FILTERs>] [-<FILTERs>] </i></b></pre> <pre><b><i>httrack &lt;URLs&gt; [-option] [+&lt;FILTERs&gt;] [-&lt;FILTERs&gt;] </i></b></pre>
<p align=justify> The syntax of httrack is quite simple. You specify <p align=justify> The syntax of httrack is quite simple. You specify
the URLs you wish to start the process from (<URLS>), any options you the URLs you wish to start the process from (&lt;URLS&gt;), any options you
might want to add ([-option], any filters specifying places you should might want to add ([-option], any filters specifying places you should
([+<FILTERs>]) and should not ([-<FILTERs>]) go, and end the command ([+&lt;FILTERs&gt;]) and should not ([-&lt;FILTERs&gt;]) go, and end the command
line by pressing <enter>. Httrack then goes off and does your bidding. line by pressing &lt;enter&gt;. Httrack then goes off and does your bidding.
For example: For example:
<pre><b><i> <pre><b><i>
@@ -425,7 +425,7 @@ site. Specifically, the defauls are:
pN priority mode: (* p3) *3 save all files pN priority mode: (* p3) *3 save all files
D *can only go down into subdirs D *can only go down into subdirs
a *stay on the same address a *stay on the same address
--mirror <URLs> *make a mirror of site(s) (default) --mirror &lt;URLs&gt; *make a mirror of site(s) (default)
</pre> </pre>
<p align=justify> Here's what all of that means: <p align=justify> Here's what all of that means:
@@ -542,7 +542,7 @@ subdirectories of the starting directory to be investigated.
search started are to be collected. Other sites they point to are not search started are to be collected. Other sites they point to are not
to be imaged. to be imaged.
<pre><b><i> --mirror <URLs> *make a mirror of site(s) (default) </i></b></pre> <pre><b><i> --mirror &lt;URLs&gt; *make a mirror of site(s) (default) </i></b></pre>
<p align=justify> This indicates that the program should try to make a <p align=justify> This indicates that the program should try to make a
copy of the site as well as it can. copy of the site as well as it can.
@@ -921,7 +921,7 @@ Links options:
%P *extended parsing, attempt to parse all links, even in unknown tags or Javascript (%P0 don't use) %P *extended parsing, attempt to parse all links, even in unknown tags or Javascript (%P0 don't use)
n get non-html files 'near' an html file (ex: an image located outside) n get non-html files 'near' an html file (ex: an image located outside)
t test all URLs (even forbidden ones) t test all URLs (even forbidden ones)
%L <file> add all URL located in this text file (one URL per line) %L &lt;file&gt; add all URL located in this text file (one URL per line)
</i></b></pre> </i></b></pre>
<p align=justify> The links options allow you to control what links are <p align=justify> The links options allow you to control what links are
@@ -1183,7 +1183,7 @@ Spider options:
%h force HTTP/1.0 requests (reduce update features, only for old servers or proxies) %h force HTTP/1.0 requests (reduce update features, only for old servers or proxies)
%B tolerant requests (accept bogus responses on some servers, but not standard!) %B tolerant requests (accept bogus responses on some servers, but not standard!)
%s update hacks: various hacks to limit re-transfers when updating %s update hacks: various hacks to limit re-transfers when updating
%A assume that a type (cgi,asp..) is always linked with a mime type (-%A php3=text/html) (--assume <param>) %A assume that a type (cgi,asp..) is always linked with a mime type (-%A php3=text/html) (--assume &lt;param&gt;)
</i></b></pre> </i></b></pre>
<p align=justify> By default, cookies are universally accepted and <p align=justify> By default, cookies are universally accepted and
@@ -1387,7 +1387,7 @@ web servers leave footprints in the browser.
Browser ID: Browser ID:
F user-agent field (-F "user-agent name") F user-agent field (-F "user-agent name")
%F footer string in Html code (-%F "Mirrored [from host %s [file %s [at %s]]]" %F footer string in Html code (-%F "Mirrored [from host %s [file %s [at %s]]]"
%l preffered language (-%l "fr, en, jp, *" (--language <param>) %l preferred language (-%l "fr, en, jp, *" (--language &lt;param&gt;)
</i></b></pre> </i></b></pre>
<p align=justify> The user-agent field is used by browsers to determine <p align=justify> The user-agent field is used by browsers to determine
@@ -1799,7 +1799,7 @@ based authentication)
<pre><b><i> <pre><b><i>
Command-line specific options: Command-line specific options:
V execute system command after each files ($0 is the filename: -V "rm \$0") (--userdef-cmd <param>) V execute system command after each files ($0 is the filename: -V "rm \$0") (--userdef-cmd &lt;param&gt;)
</i></b></pre> </i></b></pre>
<p align=justify> This option is very nice for a wide array of actions <p align=justify> This option is very nice for a wide array of actions
@@ -1811,7 +1811,7 @@ httrack http://www.shoesizes.com/bob/ -O /tmp/shoesizes -V "/bin/echo \$0"
</i></b></pre> </i></b></pre>
<pre> <pre>
%U run the engine with another id when called as root (-%U smith) (--user <param>) %U run the engine with another id when called as root (-%U smith) (--user &lt;param&gt;)
</pre> </pre>
<p align=justify> Change the UID of the owner when running as r00t <p align=justify> Change the UID of the owner when running as r00t
@@ -1856,14 +1856,14 @@ of other options that are commonly used.
<pre><b><i> <pre><b><i>
Shortcuts: Shortcuts:
--mirror <URLs> *make a mirror of site(s) (default) --mirror &lt;URLs&gt; *make a mirror of site(s) (default)
--get <URLs> get the files indicated, do not seek other URLs (-qg) --get &lt;URLs&gt; get the files indicated, do not seek other URLs (-qg)
--list <text file> add all URL located in this text file (-%L) --list &lt;text file&gt; add all URL located in this text file (-%L)
--mirrorlinks <URLs> mirror all links in 1st level pages (-Y) --mirrorlinks &lt;URLs&gt; mirror all links in 1st level pages (-Y)
--testlinks <URLs> test links in pages (-r1p0C0I0t) --testlinks &lt;URLs&gt; test links in pages (-r1p0C0I0t)
--spider <URLs> spider site(s), to test links: reports Errors & Warnings (-p0C0I0t) --spider &lt;URLs&gt; spider site(s), to test links: reports Errors & Warnings (-p0C0I0t)
--testsite <URLs> identical to --spider --testsite &lt;URLs&gt; identical to --spider
--skeleton <URLs> make a mirror, but gets only html files (-p1) --skeleton &lt;URLs&gt; make a mirror, but gets only html files (-p1)
--update update a mirror, without confirmation (-iC2) --update update a mirror, without confirmation (-iC2)
--continue continue a mirror, without confirmation (-iC1) --continue continue a mirror, without confirmation (-iC1)
--catchurl create a temporary proxy to capture an URL or a form post URL --catchurl create a temporary proxy to capture an URL or a form post URL
@@ -2019,15 +2019,15 @@ are in reverse priority order. Here's an example:
<td>no characters must be present after</a></td> <td>no characters must be present after</a></td>
</tr> </tr>
<tr> <tr>
<td> <b> <filter>*[&lt NN]</b></td> <td> <b> &lt;filter&gt;*[&lt NN]</b></td>
<td> size less than NN Kbytes</td> <td> size less than NN Kbytes</td>
</tr> </tr>
<tr> <tr>
<td> <b> <filter>*[&gt PP]</b></td> <td> <b> &lt;filter&gt;*[&gt PP]</b></td>
<td> size more than PP Kbytes</td> <td> size more than PP Kbytes</td>
</tr> </tr>
<tr> <tr>
<td> <b> <filter>*[&lt NN &gt PP]</b></td> <td> <b> &lt;filter&gt;*[&lt NN &gt PP]</b></td>
<td> size less than NN Kbytes and more than PP Kbytes</td> <td> size less than NN Kbytes and more than PP Kbytes</td>
</tr> </tr>
</table> </table>
@@ -2054,8 +2054,8 @@ generated automatically using the interface)
<td>This will accept all zip files in .com addresses</td> <td>This will accept all zip files in .com addresses</td>
</tr> </tr>
<tr> <tr>
<td><b>-*someweb*/*.tar*</b></td> <td><b>-*example*/*.tar*</b></td>
<td>This will refuse all tar (or tar.gz etc.) files in hosts containing someweb</td> <td>This will refuse all tar (or tar.gz etc.) files in hosts containing example</td>
</tr> </tr>
<tr> <tr>
<td><b>+*/*somepage*</b></td> <td><b>+*/*somepage*</b></td>

View File

@@ -109,8 +109,8 @@ See also: The <a href="faq.html#VF1">FAQ</a><br>
<i>You have to know that once you have defined <i>You have to know that once you have defined
starts links, the default mode is to mirror these links - i.e. if one of your start page is starts links, the default mode is to mirror these links - i.e. if one of your start page is
www.someweb.com/test/index.html, all links starting with www.someweb.com/test/ will be www.example.com/test/index.html, all links starting with www.example.com/test/ will be
accepted. But links directly in www.someweb.com/.. will not be accepted, however, because accepted. But links directly in www.example.com/.. will not be accepted, however, because
they are in a higher strcuture. This prevent HTTrack from mirroring the whole site. (All they are in a higher strcuture. This prevent HTTrack from mirroring the whole site. (All
files in structure levels equal or lower than the primary links will be retrieved.)<br> files in structure levels equal or lower than the primary links will be retrieved.)<br>
</i> </i>
@@ -278,8 +278,8 @@ See also: The <a href="faq.html#VF1">FAQ</a><br>
<td>This will refuse/accept all zip files in .com addresses</td> <td>This will refuse/accept all zip files in .com addresses</td>
</tr> </tr>
<tr> <tr>
<td nowrap><tt>*someweb*/*.tar*</tt></td> <td nowrap><tt>*example*/*.tar*</tt></td>
<td>This will refuse/accept all tar (or tar.gz etc.) files in hosts containing someweb</td> <td>This will refuse/accept all tar (or tar.gz etc.) files in hosts containing example</td>
</tr> </tr>
<tr> <tr>
<td nowrap><tt>*/*somepage*</tt></td> <td nowrap><tt>*/*somepage*</tt></td>
@@ -289,13 +289,13 @@ See also: The <a href="faq.html#VF1">FAQ</a><br>
<td nowrap><tt>*.html</tt></td> <td nowrap><tt>*.html</tt></td>
<td>This will refuse/accept all html files. <br> <td>This will refuse/accept all html files. <br>
Warning! With this filter you will accept ALL html files, even those in other addresses. Warning! With this filter you will accept ALL html files, even those in other addresses.
(causing a global (!) web mirror..) Use www.someweb.com/*.html to accept all html files from (causing a global (!) web mirror..) Use www.example.com/*.html to accept all html files from
a web.</td> a web.</td>
</tr> </tr>
<tr> <tr>
<td nowrap><tt>*.html*[]</tt></td> <td nowrap><tt>*.html*[]</tt></td>
<td>Identical to <tt>*.html</tt>, but the link must not have any supplemental characters <td>Identical to <tt>*.html</tt>, but the link must not have any supplemental characters
at the end (links with parameters, like <tt>www.someweb.com/index.html?page=10</tt>, will be at the end (links with parameters, like <tt>www.example.com/index.html?page=10</tt>, will be
refused)</td> refused)</td>
</tr> </tr>
</table> </table>

View File

@@ -123,12 +123,12 @@ mirrored site, and resume interrupted downloads.</p>
<p style="margin-left:11%; margin-top: 1em"><b>httrack <p style="margin-left:11%; margin-top: 1em"><b>httrack
www.someweb.com/bob/</b></p> www.example.com/bob/</b></p>
<p style="margin-left:22%;">mirror site <p style="margin-left:22%;">mirror site
www.someweb.com/bob/ and only this site</p> www.example.com/bob/ and only this site</p>
<p style="margin-left:11%;"><b>httrack www.someweb.com/bob/ <p style="margin-left:11%;"><b>httrack www.example.com/bob/
www.anothertest.com/mike/ +*.com/*.jpg <br> www.anothertest.com/mike/ +*.com/*.jpg <br>
-mime:application/*</b></p> -mime:application/*</b></p>
@@ -137,18 +137,18 @@ www.anothertest.com/mike/ +*.com/*.jpg <br>
sites</p> sites</p>
<p style="margin-left:11%;"><b>httrack <p style="margin-left:11%;"><b>httrack
www.someweb.com/bob/bobby.html +* -r6</b></p> www.example.com/bob/bobby.html +* -r6</b></p>
<p style="margin-left:22%;">means get all files starting <p style="margin-left:22%;">means get all files starting
from bobby.html, with 6 link-depth, and possibility of going from bobby.html, with 6 link-depth, and possibility of going
everywhere on the web</p> everywhere on the web</p>
<p style="margin-left:11%;"><b>httrack <p style="margin-left:11%;"><b>httrack
www.someweb.com/bob/bobby.html --spider -P <br> www.example.com/bob/bobby.html --spider -P <br>
proxy.myhost.com:8080</b></p> proxy.myhost.com:8080</b></p>
<p style="margin-left:22%;">runs the spider on <p style="margin-left:22%;">runs the spider on
www.someweb.com/bob/bobby.html using a proxy</p> www.example.com/bob/bobby.html using a proxy</p>
<p style="margin-left:11%;"><b>httrack --update</b></p> <p style="margin-left:11%;"><b>httrack --update</b></p>
@@ -958,7 +958,7 @@ host %s [file %s [at %s]]]&quot; (--footer
<td width="78%"> <td width="78%">
<p>preffered language (-%l &quot;fr, en, jp, *&quot; <p>preferred language (-%l &quot;fr, en, jp, *&quot;
(--language &lt;param&gt;)</p></td></tr> (--language &lt;param&gt;)</p></td></tr>
<tr valign="top" align="left"> <tr valign="top" align="left">
<td width="11%"></td> <td width="11%"></td>
@@ -1877,7 +1877,7 @@ User-defined option N</b> <br>
%N Name of file, including file type (ex: image.gif) <br> %N Name of file, including file type (ex: image.gif) <br>
%t File type (ex: gif) <br> %t File type (ex: gif) <br>
%p Path [without ending /] (ex: /someimages) <br> %p Path [without ending /] (ex: /someimages) <br>
%h Host name (ex: www.someweb.com) <br> %h Host name (ex: www.example.com) <br>
%M URL MD5 (128 bits, 32 ascii bytes) <br> %M URL MD5 (128 bits, 32 ascii bytes) <br>
%Q query string MD5 (128 bits, 32 ascii bytes) <br> %Q query string MD5 (128 bits, 32 ascii bytes) <br>
%k full query string <br> %k full query string <br>

View File

@@ -131,16 +131,16 @@ This is the default primary scanning option, the engine does not go out of domai
d stay on the same principal domain d stay on the same principal domain
This option lets the engine go on all sites that exist on the same principal domain. This option lets the engine go on all sites that exist on the same principal domain.
Example: a link located at www.someweb.com that goes to members.someweb.com will be followed. Example: a link located at www.example.com that goes to members.example.com will be followed.
l stay on the same location (.com, etc.) l stay on the same location (.com, etc.)
This option lets the engine go on all sites that exist on the same location. This option lets the engine go on all sites that exist on the same location.
Example: a link located at www.someweb.com that goes to www.anyotherweb.com will be followed. Example: a link located at www.example.com that goes to www.anyotherweb.com will be followed.
Warning: this is a potentially dangerous option, limit the recurse depth with r option. Warning: this is a potentially dangerous option, limit the recurse depth with r option.
e go everywhere on the web e go everywhere on the web
This option lets the engine go on any sites. This option lets the engine go on any sites.
Example: a link located at www.someweb.com that goes to www.anyotherweb.org will be followed. Example: a link located at www.example.com that goes to www.anyotherweb.org will be followed.
Warning: this is a potentially dangerous option, limit the recurse depth with r option. Warning: this is a potentially dangerous option, limit the recurse depth with r option.
n get non-html files 'near' an html file (ex: an image located outside) n get non-html files 'near' an html file (ex: an image located outside)

View File

@@ -8,3 +8,6 @@ Comment=Browse Websites Mirrored by WebHTTrack
Keywords=browse mirrored; Keywords=browse mirrored;
Exec=webhttrack browse Exec=webhttrack browse
Icon=httrack Icon=httrack
# Helper launcher for WebHTTrack's browse mode, not a standalone app: keep it
# out of software-center catalogs so it doesn't duplicate the main entry.
X-AppStream-Ignore=true

View File

@@ -0,0 +1,55 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Copyright 2026 Xavier Roche <roche@httrack.com> -->
<component type="desktop-application">
<id>com.httrack.WebHTTrack</id>
<metadata_license>FSFAP</metadata_license>
<project_license>GPL-3.0-or-later</project_license>
<name>WebHTTrack Website Copier</name>
<summary>Copy websites to your computer for offline browsing</summary>
<description>
<p>
WebHTTrack is the web interface to HTTrack, an offline browser utility.
It downloads a website from the Internet to a local directory, fetching
the HTML, images, and other files and rebuilding the site's link
structure so you can browse it offline.
</p>
<p>
A step-by-step web interface guides you through choosing the addresses
to mirror and the options to apply. Mirrors can be updated in place and
interrupted downloads resumed.
</p>
<p>Typical uses include:</p>
<ul>
<li>Keeping an offline copy of a website for reading without a connection</li>
<li>Archiving or preserving sites and capturing them for later reference</li>
<li>Updating an existing local mirror without downloading it again</li>
</ul>
</description>
<launchable type="desktop-id">WebHTTrack.desktop</launchable>
<icon type="stock">httrack</icon>
<categories>
<category>Network</category>
</categories>
<keywords>
<keyword>offline browser</keyword>
<keyword>website copier</keyword>
<keyword>mirror</keyword>
<keyword>crawl</keyword>
<keyword>archiving</keyword>
</keywords>
<url type="homepage">https://www.httrack.com/</url>
<url type="bugtracker">https://github.com/xroche/httrack/issues</url>
<developer id="com.httrack">
<name>Xavier Roche</name>
</developer>
<screenshots>
<screenshot type="default">
<caption>Choosing the addresses and options for a new mirror</caption>
<image>https://www.httrack.com/html/images/screenshot_01b.jpg</image>
</screenshot>
</screenshots>
<content_rating type="oars-1.1"/>
<releases>
<release version="3.49.8" date="2026-06-07"/>
</releases>
</component>

View File

@@ -117,7 +117,7 @@ h4 { margin: 0; font-weight: bold; font-size: 1.18em; }
<li>HTML Footer</li> <li>HTML Footer</li>
<br><small>Enter here the optionnal text that will be included as a comment in each HTML file to make archiving easier <br><small>Enter here the optionnal text that will be included as a comment in each HTML file to make archiving easier
<br>The string entered is generally an HTML comment (<tt>&lt;!-- HTML comment --&gt;</tt>) with optionnal %s, which will be transformed into a specific string information: <br>The string entered is generally an HTML comment (<tt>&lt;!-- HTML comment --&gt;</tt>) with optionnal %s, which will be transformed into a specific string information:
<br>%s #1 : host name (for example, www.someweb.com) <br>%s #1 : host name (for example, www.example.com)
<br>%s #2 : file name (for example, /index.html) <br>%s #2 : file name (for example, /index.html)
<br>%s #3 : date of the mirror <br>%s #3 : date of the mirror
<br><b>Example</b>: <tt>&lt;!-- Page mirrored from %s, file %s. Archive date: %s --&gt;</tt> <br><b>Example</b>: <tt>&lt;!-- Page mirrored from %s, file %s. Archive date: %s --&gt;</tt>

View File

@@ -1,7 +1,7 @@
#!/bin/sh #!/bin/sh
# install - install a program, script, or datafile # install - install a program, script, or datafile
scriptversion=2020-11-14.01; # UTC scriptversion=2024-06-19.01; # UTC
# This originates from X11R5 (mit/util/scripts/install.sh), which was # This originates from X11R5 (mit/util/scripts/install.sh), which was
# later released in X11R6 (xc/config/util/install.sh) with the # later released in X11R6 (xc/config/util/install.sh) with the
@@ -124,9 +124,9 @@ it's up to you to specify -f if you want it.
If -S is not specified, no backups are attempted. If -S is not specified, no backups are attempted.
Email bug reports to bug-automake@gnu.org. Report bugs to <bug-automake@gnu.org>.
Automake home page: https://www.gnu.org/software/automake/ GNU Automake home page: <https://www.gnu.org/software/automake/>.
" General help using GNU software: <https://www.gnu.org/gethelp/>."
while test $# -ne 0; do while test $# -ne 0; do
case $1 in case $1 in
@@ -170,7 +170,7 @@ while test $# -ne 0; do
-T) is_target_a_directory=never;; -T) is_target_a_directory=never;;
--version) echo "$0 $scriptversion"; exit $?;; --version) echo "$0 (GNU Automake) $scriptversion"; exit $?;;
--) shift --) shift
break;; break;;
@@ -345,7 +345,7 @@ do
' 0 ' 0
# Because "mkdir -p" follows existing symlinks and we likely work # Because "mkdir -p" follows existing symlinks and we likely work
# directly in world-writeable /tmp, make sure that the '$tmpdir' # directly in world-writable /tmp, make sure that the '$tmpdir'
# directory is successfully created first before we actually test # directory is successfully created first before we actually test
# 'mkdir -p'. # 'mkdir -p'.
if (umask $mkdir_umask && if (umask $mkdir_umask &&
@@ -353,7 +353,7 @@ do
exec $mkdirprog $mkdir_mode -p -- "$tmpdir/a/b") >/dev/null 2>&1 exec $mkdirprog $mkdir_mode -p -- "$tmpdir/a/b") >/dev/null 2>&1
then then
if test -z "$dir_arg" || { if test -z "$dir_arg" || {
# Check for POSIX incompatibilities with -m. # Check for POSIX incompatibility with -m.
# HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
# other-writable bit of parent directory when it shouldn't. # other-writable bit of parent directory when it shouldn't.
# FreeBSD 6.1 mkdir -m -p sets mode of existing directory. # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.

View File

@@ -21,21 +21,21 @@ Luk
Cancel changes Cancel changes
Annullér ændringer Annullér ændringer
Click to confirm Click to confirm
Klik OK for at godkende Klik for at bekræfte
Click to get help! Click to get help!
Klik for at få hjælp! Klik for at få hjælp!
Click to return to previous screen Click to return to previous screen
Klik for at se den forrige skærm Klik for at gå til den forrige skærm
Click to go to next screen Click to go to next screen
Klik for at se den næste skærm Klik for at gå til den næste skærm
Hide password Hide password
Skjul adgangskode Skjul adgangskode
Save project Save project
Gem projekt Gem projekt
Close current project? Close current project?
Vil du lukke det aktuelle projekt ? Vil du lukke det aktuelle projekt?
Delete this project? Delete this project?
Slette dette projekt ? Slette dette projekt?
Delete empty project %s? Delete empty project %s?
Vil du slette det tomme projekt med navnet: %s? Vil du slette det tomme projekt med navnet: %s?
Action not yet implemented Action not yet implemented
@@ -69,7 +69,7 @@ Udeluk link(s)
Include link(s) Include link(s)
Medtag link(s) Medtag link(s)
Tip: To have ALL GIF files included, use something like +www.someweb.com/*.gif. \n(+*.gif / -*.gif will include/exclude ALL GIFs from ALL sites) Tip: To have ALL GIF files included, use something like +www.someweb.com/*.gif. \n(+*.gif / -*.gif will include/exclude ALL GIFs from ALL sites)
Tip: For at medtage ALLE GIF-filer, så prøv at bruge: +www.eksempel.dk/*.gif. \n(+*.gif / -*.gif inkluderer/ekskluderer ALLE GIF-filer fra alle websteder) Tip: for at medtage ALLE GIF-filer, så prøv at bruge: +www.eksempel.dk/*.gif. \n(+*.gif / -*.gif inkluderer/ekskluderer ALLE GIF-filer fra ALLE steder)
Save prefs Save prefs
Gem foretrukne indstillinger Gem foretrukne indstillinger
Matching links will be excluded: Matching links will be excluded:
@@ -97,7 +97,7 @@ www.eksempel.dk\r\nFinder links der matcher hele understrengen 'www.eksempel.dk'
someweb\r\nWill find any links with matching sub-string such as www.someweb.com/.., www.test.abc/fromsomeweb/index.html, www.test.abc/test/someweb.html etc. someweb\r\nWill find any links with matching sub-string such as www.someweb.com/.., www.test.abc/fromsomeweb/index.html, www.test.abc/test/someweb.html etc.
eksempel\r\nFinder ethvert link med matchende understreng, såsom www.eksempel.dk/.., www.test.abc/franogetweb/index.html, www.test.abc/test/eksempel.html osv. eksempel\r\nFinder ethvert link med matchende understreng, såsom www.eksempel.dk/.., www.test.abc/franogetweb/index.html, www.test.abc/test/eksempel.html osv.
www.test.com/test/someweb.html\r\nWill only find the 'www.test.com/test/someweb.html' file. Note that you have to type the complete path (URL + site path) www.test.com/test/someweb.html\r\nWill only find the 'www.test.com/test/someweb.html' file. Note that you have to type the complete path (URL + site path)
www.test.dk/test/eksempel.html\r\nFinder kun 'www.test.dk/test/eksempel.html' file. Bemærk at du skal skrive den fulde sti [URL + webstedsti] www.test.dk/test/eksempel.html\r\nFinder kun 'www.test.dk/test/eksempel.html' file. Bemærk at du skal skrive den fulde sti [URL + stedsti]
All links will match All links will match
Alle links vil matche Alle links vil matche
Add exclusion filter Add exclusion filter
@@ -109,13 +109,13 @@ Eksisterende filtre
Cancel changes Cancel changes
Annullér ændringer Annullér ændringer
Save current preferences as default values Save current preferences as default values
Gem nuværende indstillinger som standardindstillinger Gem aktuelle præferencer som standardværdier
Click to confirm Click to confirm
Klik for at bekræfte Klik for at bekræfte
No log files in %s! No log files in %s!
Der findes ingen logfil i %s! Der findes ingen logfil i %s!
No 'index.html' file in %s! No 'index.html' file in %s!
Der er ingen 'index.html'-fil i %s! Der er ikke nogen 'index.html'-fil i %s!
Click to quit WinHTTrack Website Copier Click to quit WinHTTrack Website Copier
Klik for at afslutte WinHTTrack Website Copier Klik for at afslutte WinHTTrack Website Copier
View log files View log files
@@ -123,11 +123,11 @@ Vis logfiler
Browse HTML start page Browse HTML start page
Se HTML-startside Se HTML-startside
End of mirror End of mirror
Kopieringen af websted er afsluttet Slut på spejlkopiering
View log files View log files
Vis logfiler Vis logfiler
Browse Mirrored Website Browse Mirrored Website
Gennemse kopi-websted Gennemse spejlkopieret websted
New project... New project...
Nyt projekt... Nyt projekt...
View error and warning reports View error and warning reports
@@ -179,57 +179,59 @@ Indl
Parsing HTML file (testing links).. Parsing HTML file (testing links)..
Overfører HTML-fil (tester links)... Overfører HTML-fil (tester links)...
Pause - Toggle [Mirror]/[Pause download] to resume operation Pause - Toggle [Mirror]/[Pause download] to resume operation
Pause - Vælg fra menuen [Kopiér]/[Pause download] for at genoptage overførslen Pause - Vælg [Spejlkopiér]/[Sæt download på pause] for at genoptage overførslen
Finishing pending transfers - Select [Cancel] to stop now! Finishing pending transfers - Select [Cancel] to stop now!
Afslutter igangværende overførsler - Vælg Annullér for at afslutte nu! Afslutter igangværende overførsler - Vælg [Annullér] for at afslutte nu!
scanning scanning
skanner skanner
Waiting for scheduled time.. Waiting for scheduled time..
Venter på planlagt tidspunkt... Venter på planlagt tidspunkt...
Transferring data..
Overfører data...
Connecting to provider Connecting to provider
Opretter forbindelse til udbyder Opretter forbindelse til udbyder
[%d seconds] to go before start of operation [%d seconds] to go before start of operation
[%d sekunder] inden denne handling starter [%d sekunder] inden denne handling starter
Site mirroring in progress [%s, %s bytes] Site mirroring in progress [%s, %s bytes]
Websted kopieres nu [%s, %s byte] Igangværende spejlkopiering af sted [%s, %s byte]
Site mirroring finished! Site mirroring finished!
Kopieringen af websted er afsluttet! Spejlkopieringen af sted er afsluttet!
A problem occurred during the mirroring operation\n A problem occurred during the mirroring operation\n
Der opstod et problem under kopieringen af websted\n Der opstod et problem under spejlkopieringen\n
\nDuring:\n \nDuring:\n
\nSamtidigt:\n \nSamtidigt:\n
\nSee the log file if necessary.\n\nClick FINISH to quit WinHTTrack Website Copier.\n\nThanks for using WinHTTrack! \nSee the log file if necessary.\n\nClick FINISH to quit WinHTTrack Website Copier.\n\nThanks for using WinHTTrack!
Se eventuelt logfilen.\n\nKlik AFSLUT for at lukke WinHTTrack Website Copier.\n\nTak for at du brugte WinHTTrack! Se eventuelt logfilen.\n\nKlik på UDFØR for at afslutte WinHTTrack Website Copier.\n\nTak for at du brugte WinHTTrack!
Mirroring operation complete.\nClick Exit to quit WinHTTrack.\nSee log file(s) if necessary to ensure that everything is OK.\n\nThanks for using WinHTTrack! Mirroring operation complete.\nClick Exit to quit WinHTTrack.\nSee log file(s) if necessary to ensure that everything is OK.\n\nThanks for using WinHTTrack!
Kopiering af websted fuldført.\nKlik OK for at afslutte WinHTTrack.\nSe logfil(erne) for at kontrollere at alt forløb OK.\n\nTak for at du brugte WinHTTrack!\r\n Spejlkopieringen fuldført.\nKlik på Afslut for at afslutte WinHTTrack.\nSe logfil(erne) for at sikre at alt forløb OK.\n\nTak for at du brugte WinHTTrack!\r\n
* * MIRROR ABORTED! * *\r\nThe current temporary cache is required for any update operation and only contains data downloaded during the present aborted session.\r\nThe former cache might contain more complete information; if you do not want to lose that information, you have to restore it and delete the current cache.\r\n[Note: This can easily be done here by erasing the hts-cache/new.* files]\r\n\r\nDo you think the former cache might contain more complete information, and do you want to restore it? * * MIRROR ABORTED! * *\r\nThe current temporary cache is required for any update operation and only contains data downloaded during the present aborted session.\r\nThe former cache might contain more complete information; if you do not want to lose that information, you have to restore it and delete the current cache.\r\n[Note: This can easily be done here by erasing the hts-cache/new.* files]\r\n\r\nDo you think the former cache might contain more complete information, and do you want to restore it?
* * KOPIERINGEN ER AFBRUDT! * *\r\nDen nuværende cache er påkrævet for alle opdaterings operationer og indeholder kun data der er downloadet med den aktuelle afbrudte session.\r\nDen tidligere cache kan indeholde mere fyldestgørende information; hvis du ønsker at bevare den information, skal du gendanne den og slette den aktuelle cache.\r\n[Note: Dette kan nemt gøres ved at slette 'hts-cache/new.* files]\r\n\r\nTror du den tidligere cache-fil muligvis indeholder mere fyldestgørende information, og vil du gendanne denne? * * SPEJLKOPIERING AFBRUDT! * *\r\nDen aktuelle cache er påkrævet for alle opdaterings operationer og indeholder kun data der er downloadet med den aktuelle afbrudte session.\r\nDen tidligere cache kan indeholde mere fyldestgørende information; hvis du ønsker at bevare den information, skal du gendanne den og slette den aktuelle cache.\r\n[Bemærk: dette kan nemt gøres ved at slette 'hts-cache/new.* files]\r\n\r\nTror du den tidligere cache-fil muligvis indeholder mere fyldestgørende information, og vil du gendanne denne?
* * MIRROR ERROR! * *\r\nHTTrack has detected that the current mirror is empty. If it was an update, the previous mirror has been restored.\r\nReason: the first page(s) either could not be found, or a connection problem occurred.\r\n=> Ensure that the website still exists, and/or check your proxy settings! <= * * MIRROR ERROR! * *\r\nHTTrack has detected that the current mirror is empty. If it was an update, the previous mirror has been restored.\r\nReason: the first page(s) either could not be found, or a connection problem occurred.\r\n=> Ensure that the website still exists, and/or check your proxy settings! <=
* * KOPIERINGS FEJL! * *\r\nWinHTTrack har opdaget at den igangværende kopiering er tom. Hvis du var i gang med at opdatere en kopi, vil det tidligere indhold blive gendannet.\r\nMulig årsag: Den første side kunne enten ikke findes eller der opstod et problem med forbindelsen.\r\n=> Kontroller at webstedet findes og/eller kontroller Proxy-indstillingerne! <= * * SPEJLKOPIERINGS FEJL! * *\r\nWinHTTrack har opdaget at den igangværende spejlkopiering er tom. Hvis du var i gang med at opdatere, vil den tidligere spejlkopiering blive gendannet.\r\nMulig årsag: den første side kunne enten ikke findes eller der opstod et problem med forbindelsen.\r\n=> Kontroller at webstedet findes og/eller kontroller proxy-indstillingerne! <=
\n\nTip: Click [View log file] to see warning or error messages \n\nTip: Click [View log file] to see warning or error messages
\n\nTip: Klik [Vis logfiler] for at se advarsels- og fejlmeddelelser \n\nTip: klik [Vis logfil] for at se advarsels- og fejlmeddelelser
Error deleting a hts-cache/new.* file, please do it manually Error deleting a hts-cache/new.* file, please do it manually
Der opstod en fejl i forbindelse med sletningen af hts-cache/new.*filen. Slet venligst filen manuelt. Der opstod en fejl i forbindelse med sletningen af hts-cache/new.*filen. Slet venligst filen manuelt.
Do you really want to quit WinHTTrack Website Copier? Do you really want to quit WinHTTrack Website Copier?
Vil du afslutte WinHTTrack Website Copier? Er du sikker på, at du vil afslutte WinHTTrack Website Copier?
- Mirroring Mode -\n\nEnter address(es) in URL box - Mirroring Mode -\n\nEnter address(es) in URL box
- Kopiering af websted -\n\nIndtast webadresse(r) i URL-feltet - Spejlkopieringstilstand -\n\nIndtast adresse(r) i URL-feltet
- Interactive Wizard Mode (questions) -\n\nEnter address(es) in URL box - Interactive Wizard Mode (questions) -\n\nEnter address(es) in URL box
- Interaktiv guide-tilstand (spørgsmål) -\n\nIndtast webadresse(r) i URL-feltet - Interaktiv guide-tilstand (spørgsmål) -\n\nIndtast adresse(r) i URL-feltet
- File Download Mode -\n\nEnter file address(es) in URL box - File Download Mode -\n\nEnter file address(es) in URL box
- Fil-download-tilstand-\n\nIndtast webadresse(r) i URL-feltet - Fil-download-tilstand-\n\nIndtast adresse(r) i URL-feltet
- Link Testing Mode -\n\nEnter Web address(es) with links to test in URL box - Link Testing Mode -\n\nEnter Web address(es) with links to test in URL box
- Links test tilstand-\n\nIndtast webadresse(r) i URL-feltet - Links test tilstand-\n\nIndtast webadresse(r) med links til test i URL-feltet
- Update Mode -\n\nVerify address(es) in URL box, check parameters if necessary then click on 'NEXT' button - Update Mode -\n\nVerify address(es) in URL box, check parameters if necessary then click on 'NEXT' button
- Opdateringstilstand -\n\nBekræft webadresse(r) i URL-feltet. Kontroller eventuelt dine indstillinger og klik derefter på 'Næste'. - Opdateringstilstand -\n\nBekræft adresse(r) i URL-feltet. Tjek eventuelt dine indstillinger og klik derefter på 'Næste'.
- Resume Mode (Interrupted Operation) -\n\nVerify address(es) in URL box, check parameters if necessary then click on 'NEXT' button - Resume Mode (Interrupted Operation) -\n\nVerify address(es) in URL box, check parameters if necessary then click on 'NEXT' button
- Genoptag kopiering (hvis overførslen blev afbrudt) -\n\nBekræft webadresse(r) i URL-feltet. Kontroller eventuelt dine indstillinger og klik derefter på 'Næste'. - Genoptag kopiering (hvis overførslen blev afbrudt) -\n\nBekræft adresse(r) i URL-feltet. Tjek eventuelt dine indstillinger og klik derefter på 'Næste'.
Log files Path Log files Path
Stinavn for logfil Stinavn for logfil
Path Path
Sti Sti
- Links List Mode -\n\nUse URL box to enter address(es) of page(s) containing links to mirror - Links List Mode -\n\nUse URL box to enter address(es) of page(s) containing links to mirror
- Links liste -\n\nBrug URL-feltet til at angive adresse(r) på sider der indeholder links der skal kopieres. - Links liste -\n\nBrug URL-feltet til at angive adresse(r) på sider der indeholder links som skal spejlkopieres.
New project / Import? New project / Import?
Nyt projekt / Importér? Nyt projekt / Importér?
Choose criterion Choose criterion
@@ -237,7 +239,7 @@ V
Maximum link scanning depth Maximum link scanning depth
Maksimal skanningsdybde for links Maksimal skanningsdybde for links
Enter address(es) here Enter address(es) here
Indtast webadresse(r) her Indtast adresse(r) her
Define additional filtering rules Define additional filtering rules
Tilføj yderligere filtreringsregler Tilføj yderligere filtreringsregler
Proxy Name (if needed) Proxy Name (if needed)
@@ -261,31 +263,31 @@ Afslut WinHTTrack Website Copier
About WinHTTrack About WinHTTrack
Om WinHTTrack Om WinHTTrack
Save current preferences as default values Save current preferences as default values
Gem de nuværende indstillinger som standardindstillinger Gem de aktuelle præferencer som standardværdier
Click to continue Click to continue
Klik for at fortsætte Klik for at fortsætte
Click to define options Click to define options
Klik for at definere indstillinger Klik for at definere valgmuligheder
Click to add a URL Click to add a URL
Klik for at tilføje URL Klik for at tilføje en URL
Load URL(s) from text file Load URL(s) from text file
Hent URL(er) fra tekstfil Indlæs URL(er) fra tekstfil
WinHTTrack preferences (*.opt)|*.opt|| WinHTTrack preferences (*.opt)|*.opt||
WinHTTrack indstillinger (*.opt)|*.opt|| WinHTTrack-præferencer (*.opt)|*.opt||
Address List text file (*.txt)|*.txt|| Address List text file (*.txt)|*.txt||
Adresseliste-tekstfil (*.txt)|*.txt|| Adresseliste-tekstfil (*.txt)|*.txt||
File not found! File not found!
Filen blev ikke fundet! Filen blev ikke fundet!
Do you really want to change the project name/path? Do you really want to change the project name/path?
Er du sikker på at ændre i projekt/sti-navnet ? Er du sikker på, at ændre i projekt/sti-navnet?
Load user-default options? Load user-default options?
Indlæs brugerdefinerede standardindstillinger? Indlæs brugerdefinerede valgmuligheder?
Save user-default options? Save user-default options?
Gem brugerdefinerede standardindstillinger? Gem brugerdefinerede valgmuligheder?
Reset all default options? Reset all default options?
Nulstil alle standardindstillinger? Nulstil alle valgmuligheder?
Welcome to WinHTTrack! Welcome to WinHTTrack!
Velkommen til WinHTTrack Website Copier! Velkommen til WinHTTrack!
Action: Action:
Handling: Handling:
Max Depth Max Depth
@@ -293,7 +295,7 @@ Maksimal dybde:
Maximum external depth: Maximum external depth:
Maksimal ekstern dybde: Maksimal ekstern dybde:
Filters (refuse/accept links) : Filters (refuse/accept links) :
Filtrerings-regel (udeluk/medtag links) : Filtrerings-regel (udeluk/medtag links):
Paths Paths
Sti Sti
Save prefs Save prefs
@@ -301,23 +303,23 @@ Gem indstillinger
Define.. Define..
Angiv... Angiv...
Set options.. Set options..
Angiv indstillinger... Angiv valgmuligheder...
Preferences and mirror options: Preferences and mirror options:
Indstillinger og muligheder: Præferencer og spejlkopiering-valgmuligheder:
Project name Project name
Projektnavn Projektnavn
Add a URL... Add a URL...
Tilføj URL... Tilføj URL...
Web Addresses: (URL) Web Addresses: (URL)
Webadresse: (URL) Webadresser: (URL)
Stop WinHTTrack? Stop WinHTTrack?
Stop WinHTTrack? Stop WinHTTrack?
No log files in %s! No log files in %s!
Der er ingen logfiler i %s! Der er ikke nogen logfiler i %s!
Pause Download? Pause Download?
Pause kopieringen? Sæt download på pause?
Stop the mirroring operation Stop the mirroring operation
Stop kopiering af websted? Stop spejlkopieringen?
Minimize to System Tray Minimize to System Tray
Minimér til proceslinjen Minimér til proceslinjen
Click to skip a link or stop parsing Click to skip a link or stop parsing
@@ -345,7 +347,7 @@ Informationer
Files written: Files written:
Filer skrevet: Filer skrevet:
Files updated: Files updated:
Opdaterede filer: Filer opdateret:
Errors: Errors:
Fejl: Fejl:
In progress: In progress:
@@ -357,9 +359,9 @@ Test alle links p
Try to ferret out all links Try to ferret out all links
Prøv at udvide alle links Prøv at udvide alle links
Download HTML files first (faster) Download HTML files first (faster)
Hent HTML-filer først (hurtigere) Download HTML-filer først (hurtigere)
Choose local site structure Choose local site structure
Vælg lokal websted-struktur Vælg lokal sted-struktur
Set user-defined structure on disk Set user-defined structure on disk
Sæt brugerdefinerede indstillinger for den lokale struktur Sæt brugerdefinerede indstillinger for den lokale struktur
Use a cache for updates and retries Use a cache for updates and retries
@@ -367,9 +369,11 @@ Brug cache til opdateringer og opdateringsfors
Do not update zero size or user-erased files Do not update zero size or user-erased files
Opdater ikke filer med nul-værdi eller filer som brugeren har slettet Opdater ikke filer med nul-værdi eller filer som brugeren har slettet
Create a Start Page Create a Start Page
Opret startside Opret en startside
Create a word database of all html pages Create a word database of all html pages
Opret ord-database fra alle html-sider Opret en ord-database af alle html-sider
Build a complete RFC822 mail (MHT/EML) archive of the mirror
Byg et komplet RFC822 mail (MHT/EML)-arkiv af spejlkopieringen
Create error logging and report files Create error logging and report files
Lav fejllog og rapport-filer Lav fejllog og rapport-filer
Generate DOS 8-3 filenames ONLY Generate DOS 8-3 filenames ONLY
@@ -385,7 +389,7 @@ V
Select global parsing direction Select global parsing direction
Vælg overordnet overførselsretning Vælg overordnet overførselsretning
Setup URL rewriting rules for internal links (downloaded ones) and external links (not downloaded ones) Setup URL rewriting rules for internal links (downloaded ones) and external links (not downloaded ones)
Opret URL-genskrivningsregel for interne links (downloadede links), og eksterne links (ikke downloadede) Opt URL-genskrivningsregel for interne links (downloadede links), og eksterne links (ikke downloadede)
Max simultaneous connections Max simultaneous connections
Maks.antal samtidige forbindelser Maks.antal samtidige forbindelser
File timeout File timeout
@@ -403,11 +407,11 @@ Maksimal st
Maximum size for any single non-HTML file Maximum size for any single non-HTML file
Maksimal størrelse for ikke-HTML-filer Maksimal størrelse for ikke-HTML-filer
Maximum amount of bytes to retrieve from the Web Maximum amount of bytes to retrieve from the Web
Maksimal antal byte der må hentes på Web Maksimal antal byte der modtages fra webbet
Make a pause after downloading this amount of bytes Make a pause after downloading this amount of bytes
Hold pause efter download af denne mængde byte Hold pause efter download af denne mængde byte
Maximum duration time for the mirroring operation Maximum duration time for the mirroring operation
Maksimal varighed for kopieringen af websted Maksimal varighed for spejlkopieringen
Maximum transfer rate Maximum transfer rate
Maksimal overførselshastighed Maksimal overførselshastighed
Maximum connections/seconds (avoid server overload) Maximum connections/seconds (avoid server overload)
@@ -418,34 +422,40 @@ Browser identity
Browser-identitet Browser-identitet
Comment to be placed in each HTML file Comment to be placed in each HTML file
Kommentarer der indsættes i alle HTML-filer Kommentarer der indsættes i alle HTML-filer
Languages accepted by the browser
Sprog som accepteres af browseren
Additional HTTP headers to be sent in each requests
Yderligere HTTP-headere som skal sendes i hver forespørgsel
HTTP referer to be sent for initial URLs
HTTP reference som skal sendes for indledende URL'er
Back to starting page Back to starting page
Tilbage til startsiden Tilbage til startsiden
Save current preferences as default values Save current preferences as default values
Gem nuværende indstillinger som standardindstillinger Gem aktuelle præferencer som standardværdier
Click to continue Click to continue
Klik for at fortsætte Klik for at fortsætte
Click to cancel changes Click to cancel changes
Klik for at annullere ændringerne Klik for at annullere ændringerne
Follow local robots rules on sites Follow local robots rules on sites
Følg lokale robot-regler på websteder Følg lokale robot-regler på steder
Links to non-localised external pages will produce error pages Links to non-localised external pages will produce error pages
Links til ikke-fundne eksterne sider, vil medføre fejlside(r) Links til ikke-fundne eksterne sider, vil medføre fejlside(r)
Do not erase obsolete files after update Do not erase obsolete files after update
Slet ikke overflødige filer efter opdatering Slet ikke forældede filer efter opdatering
Accept cookies? Accept cookies?
Acceptér cookies? Acceptér cookies?
Check document type when unknown? Check document type when unknown?
Kontroller dokumenttypen hvis ukendt? Tjek dokumenttypen hvis ukendt?
Parse java applets to retrieve included files that must be downloaded? Parse java applets to retrieve included files that must be downloaded?
Overfør Java-applets sammen med inkluderede filer der skal downloades? Overfør Java-applets sammen med inkluderede filer der skal downloades?
Store all files in cache instead of HTML only Store all files in cache instead of HTML only
Gem alle filer i cache fremfor kun HTML ? Opbevar alle filer i cache fremfor kun HTML?
Log file type (if generated) Log file type (if generated)
Log filtype (hvis genereret) Log filtype (hvis genereret)
Maximum mirroring depth from root address Maximum mirroring depth from root address
Maksimal kopieringsdybde fra rod-adressen Maksimal spejlkopieringsdybde fra rod-adressen
Maximum mirroring depth for external/forbidden addresses (0, that is, none, is the default) Maximum mirroring depth for external/forbidden addresses (0, that is, none, is the default)
Maksimal kopieringsdybde for eksterne/forbudte adresser(0, altså ingen, er standard) Maksimal spejlkopieringsdybde for eksterne/forbudte adresser(0, altså ingen, er standard)
Create a debugging file Create a debugging file
Opret en fejlfindings-fil Opret en fejlfindings-fil
Use non-standard requests to get round some server bugs Use non-standard requests to get round some server bugs
@@ -465,7 +475,7 @@ Hent ikke-HTML-filer relateret til et link, eksempelvis .ZIP -filer eller billed
Test all links (even forbidden ones) Test all links (even forbidden ones)
Test alle links (også forbudte links) Test alle links (også forbudte links)
Try to catch all URLs (even in unknown tags/code) Try to catch all URLs (even in unknown tags/code)
Forsøg at fange alle URL'er (også selvom html-tags eller kode er ukendt) Forsøg at fange alle URL'er (også i ukendte opmærkninger/kode)
Get HTML files first! Get HTML files first!
Hent HTML-filer først! Hent HTML-filer først!
Structure type (how links are saved) Structure type (how links are saved)
@@ -473,11 +483,13 @@ Angiv struktur (hvordan links skal gemmes)
Use a cache for updates Use a cache for updates
Brug cache for opdateringer Brug cache for opdateringer
Do not re-download locally erased files Do not re-download locally erased files
Hent ikke filer der er slettet lokalt Download ikke filer igen der er slettet lokalt
Make an index Make an index
Opret et indeks Opret et indeks
Make a word database Make a word database
Opret en ord-database Opret en ord-database
Build a mail archive
Byg et mail-arkiv
Log files Log files
Logfiler Logfiler
DOS names (8+3) DOS names (8+3)
@@ -493,7 +505,7 @@ S
Global travel mode Global travel mode
Global søgemetode Global søgemetode
These options should be modified only exceptionally These options should be modified only exceptionally
Disse indstillinger bør kun ændres undtagelsesvist! Disse valgmuligheder bør kun ændres undtagelsesvist
Activate Debugging Mode (winhttrack.log) Activate Debugging Mode (winhttrack.log)
Aktivér fejlfindingstilstand (winhttrack.log) Aktivér fejlfindingstilstand (winhttrack.log)
Rewrite links: internal / external Rewrite links: internal / external
@@ -506,6 +518,12 @@ Identity
Identitet Identitet
HTML footer HTML footer
HTML-sidefod HTML-sidefod
Languages
Languages
Additional HTTP Headers
Yderligere HTTP Headere
Default referer URL
Standard reference URL
N# connections N# connections
Antal forbindelser Antal forbindelser
Abandon host if error Abandon host if error
@@ -533,7 +551,7 @@ Maksimal st
Max size of any non-HTML file Max size of any non-HTML file
Maksimal størrelse for ikke-HTML-filer Maksimal størrelse for ikke-HTML-filer
Max site size Max site size
Maksimal størrelse af websted Maksimal størrelse af sted
Max time Max time
Maksimal tid Maksimal tid
Save prefs Save prefs
@@ -549,11 +567,11 @@ Slet ikke gamle filer
Accept cookies Accept cookies
Acceptér cookies Acceptér cookies
Check document type Check document type
Kontroller dokumenttypen Tjek dokumenttypen
Parse java files Parse java files
Overfør Java-filer Overfør Java-filer
Store ALL files in cache Store ALL files in cache
Gem alle filer i cache Opbevar alle filer i cache
Tolerant requests (for servers) Tolerant requests (for servers)
Acceptér forespørgsler (for servere) Acceptér forespørgsler (for servere)
Update hack (limit re-transfers) Update hack (limit re-transfers)
@@ -595,21 +613,21 @@ Proxy
MIME Types MIME Types
MIME-typer MIME-typer
Do you really want to quit WinHTTrack Website Copier? Do you really want to quit WinHTTrack Website Copier?
Vil du afslutte WinHTTrack Website Copier? Er du sikker på, at du vil afslutte WinHTTrack Website Copier?
Do not connect to a provider (already connected) Do not connect to a provider (already connected)
Opret ikke forbindelse til en udbyder (er allerede forbundet) Opret ikke forbindelse til en udbyder (er allerede forbundet)
Do not use remote access connection Do not use remote access connection
Brug ikke en fjernadgangsforbindelse Brug ikke en fjernadgangsforbindelse
Schedule the mirroring operation Schedule the mirroring operation
Planlæg kopieringen Planlæg spejlkopieringen
Quit WinHTTrack Website Copier Quit WinHTTrack Website Copier
Afslut WinHTTrack Website Copier Afslut WinHTTrack Website Copier
Back to starting page Back to starting page
Tilbage til startsiden Tilbage til startsiden
Click to start! Click to start!
Klik for at starte Klik for at starte!
No saved password for this connection! No saved password for this connection!
Der er ikke gemt en adgangskode for denne forbindelse Der er ikke gemt en adgangskode for denne forbindelse!
Can not get remote connection settings Can not get remote connection settings
Kan ikke hente fjernforbindelsesindstillinger Kan ikke hente fjernforbindelsesindstillinger
Select a connection provider Select a connection provider
@@ -617,13 +635,13 @@ V
Start Start
Start Start
Please adjust connection parameters if necessary,\nthen press FINISH to launch the mirroring operation. Please adjust connection parameters if necessary,\nthen press FINISH to launch the mirroring operation.
Justér venligst forbindelsesparameterne hvis det er nødvendigt.\nKlik på Udfør for at starte kopieringen. Justér venligst forbindelsesparameterne hvis det er nødvendigt.\nKlik på UDFØR for at starte spejlkopieringen.
Save settings only, do not launch download now. Save settings only, do not launch download now.
Gem indstillingerne, men start ikke download endnu. Gem indstillingerne, men start ikke download endnu.
On hold On hold
På hold På hold
Transfer scheduled for: (hh/mm/ss) Transfer scheduled for: (hh/mm/ss)
Overførslen planlagt til: (tt/mm/ss) Overførsel planlagt til: (tt/mm/ss)
Start Start
Start Start
Connect to provider (RAS) Connect to provider (RAS)
@@ -657,9 +675,9 @@ Ignorer dom
Catch this page only Catch this page only
Gem kun denne side Gem kun denne side
Mirror site Mirror site
Kopiér websted Spejlkopiér sted
Mirror domain Mirror domain
Kopiér domæne Spejlkopiér domæne
Ignore all Ignore all
Ignorer alt Ignorer alt
Wizard query Wizard query
@@ -669,7 +687,7 @@ Nej
File File
Fil Fil
Options Options
Indstillinger Valgmuligheder
Log Log
Log Log
Window Window
@@ -681,7 +699,7 @@ Pause overf
Exit Exit
Afslut Afslut
Modify options Modify options
Rediger indstillinger Rediger valgmuligheder
View log View log
Vis log Vis log
View error log View error log
@@ -703,9 +721,9 @@ S&plit
File File
Filer Filer
Preferences Preferences
Indstillinger Præferencer
Mirror Mirror
Kopiér websted Spejlkopiér
Log Log
Log Log
Window Window
@@ -715,15 +733,15 @@ Hj
Exit Exit
Afslut Afslut
Load default options Load default options
Indlæs standardindstillinger Indlæs standard-valgmuligheder
Save default options Save default options
Gem standardindstillinger Gem standard-valgmuligheder
Reset to default options Reset to default options
Nulstil standardindstillinger Nulstil standard-valgmuligheder
Load options... Load options...
Indlæs indstillinger... Indlæs valgmuligheder...
Save options as... Save options as...
Gem indstillinger som... Gem valgmuligheder som...
Language preference... Language preference...
Foretrukne sprog... Foretrukne sprog...
Contents... Contents...
@@ -741,13 +759,13 @@ Gem &som...
&Delete... &Delete...
&Slet... &Slet...
&Browse sites... &Browse sites...
&Gennemse websteder... &Gennemse steder...
User-defined structure User-defined structure
Brugerdefineret struktur Brugerdefineret struktur
%n\tName of file without file type (ex: image)\r\n%N\tName of file including file type (ex: image.gif)\r\n%t\tFile type only (ex: gif)\r\n%p\tPath [without ending /] (ex: /someimages)\r\n%h\tHost name (ex: www.someweb.com)\r\n%M\tMD5 URL (128 bits, 32 ascii bytes)\r\n%Q\tMD5 query string (128 bits, 32 ascii bytes)\r\n%q\tMD5 small query string (16 bits, 4 ascii bytes)\r\n\r\n%s?\tShort name (ex: %sN) %n\tName of file without file type (ex: image)\r\n%N\tName of file including file type (ex: image.gif)\r\n%t\tFile type only (ex: gif)\r\n%p\tPath [without ending /] (ex: /someimages)\r\n%h\tHost name (ex: www.someweb.com)\r\n%M\tMD5 URL (128 bits, 32 ascii bytes)\r\n%Q\tMD5 query string (128 bits, 32 ascii bytes)\r\n%q\tMD5 small query string (16 bits, 4 ascii bytes)\r\n\r\n%s?\tShort name (ex: %sN)
%n\tFilnavn uden type(eks: image)\r\n%N\tHele filnavnet inklusive filtype (eks: billede.gif)\r\n%t\tKun filtype (eks: gif)\r\n%p\tSti [uden endelsen /] (eks: /noglebilleder)\r\n%h\tVærts navn (eks: www.eksempel.dk)\r\n%M\tMD5 URL (128 bit, 32 ascii byte)\r\n%Q\tMD5 forespørgsel streng (128 bit, 32 ascii byte)\r\n%q\tMD5 kort forespørgselsstreng (16 bit, 4 ascii byte)\r\n\r\n%s?\tKort navn (eks: %sN) %n\tFilnavn uden type(eks: image)\r\n%N\tHele filnavnet inklusive filtype (eks: billede.gif)\r\n%t\tKun filtype (eks: gif)\r\n%p\tSti [uden endelsen /] (eks: /noglebilleder)\r\n%h\tVærts navn (eks: www.eksempel.dk)\r\n%M\tMD5 URL (128 bit, 32 ascii byte)\r\n%Q\tMD5 forespørgsel streng (128 bit, 32 ascii byte)\r\n%q\tMD5 kort forespørgselsstreng (16 bit, 4 ascii byte)\r\n\r\n%s?\tKort navn (eks: %sN)
Example:\t%h%p/%n%q.%t\n->\t\tc:\\mirror\\www.someweb.com\\someimages\\image.gif Example:\t%h%p/%n%q.%t\n->\t\tc:\\mirror\\www.someweb.com\\someimages\\image.gif
Eksempel:\t%h%p/%n%q.%t\n->\t\tc:\\mirror\\www.eksempel.dk\\noglebilleder\\billede.gif Eksempel:\t%h%p/%n%q.%t\n->\t\tc:\\spejlkopiering\\www.eksempel.dk\\noglebilleder\\billede.gif
Proxy settings Proxy settings
Proxy-indstillinger Proxy-indstillinger
Proxy address: Proxy address:
@@ -777,7 +795,7 @@ V
Click here to select path Click here to select path
Klik her for at vælge en stil Klik her for at vælge en stil
Select or create a new category name, to sort your mirrors in categories Select or create a new category name, to sort your mirrors in categories
Vælg eller opret et nyt kategorinavn, for at sortere dine kopierede websteder i kategorier Vælg eller opret et nyt kategorinavn, for at sortere dine spejlkopieringer i kategorier
HTTrack Project Wizard... HTTrack Project Wizard...
HTTrack-projektguide... HTTrack-projektguide...
New project name: New project name:
@@ -813,9 +831,9 @@ Fang URL...
Enter URL address(es) here Enter URL address(es) here
Indtast URL-adresse(r) her Indtast URL-adresse(r) her
Enter site login Enter site login
Indtast websted-brugernavn Indtast sted-brugernavn
Enter site password Enter site password
Indtast websted-adgangskode Indtast sted-adgangskode
Use this capture tool for links that can only be accessed through forms or javascript code Use this capture tool for links that can only be accessed through forms or javascript code
Brug dette værktøj til at 'fange' links der kun kan opnås adgang til via formularer eller JavaScript-kode Brug dette værktøj til at 'fange' links der kun kan opnås adgang til via formularer eller JavaScript-kode
Choose language according to preference Choose language according to preference
@@ -823,7 +841,7 @@ V
Catch URL! Catch URL!
'Fang' URL! 'Fang' URL!
Please set temporary browser proxy settings to the following values (Copy/Paste Proxy Address and Port).\nThen click on the Form SUBMIT button in your browser page, or click on the specific link you want to capture. Please set temporary browser proxy settings to the following values (Copy/Paste Proxy Address and Port).\nThen click on the Form SUBMIT button in your browser page, or click on the specific link you want to capture.
Sæt venligst browserens proxy indstillinger til følgende værdier:(Kopiér/Indsæt proxy-adresse og port).\nKlik på Form SUBMIT knappen på din browser-side, eller klik på specifikke link du ønsker at hente.\r\n\r\n Sæt venligst browserens proxy indstillinger til følgende værdier:(Kopiér/Indsæt proxy-adresse og port).\nKlik på formularens SUBMIT-knap på din browser-side, eller klik på det specifikke link du ønsker at hente.\r\n\r\n
This will send the desired link from your browser to WinHTTrack. This will send the desired link from your browser to WinHTTrack.
Dette vil sende det ønskede link fra din browser til WinHTTrack. Dette vil sende det ønskede link fra din browser til WinHTTrack.
ABORT ABORT
@@ -843,11 +861,11 @@ Tr
Please drag folders only Please drag folders only
Træk kun mapper Træk kun mapper
Select user-defined structure? Select user-defined structure?
Vælg brugerdefineret struktur ? Vælg brugerdefineret struktur?
Please ensure that the user-defined-string is correct,\notherwise filenames will be bogus! Please ensure that the user-defined-string is correct,\notherwise filenames will be bogus!
Vær sikker på at den brugerdefinerede streng er korrekt\nI modsat fald vil filnavnene være ugyldige! Vær sikker på, at den brugerdefinerede streng er korrekt\nI modsat fald vil filnavnene være ugyldige!
Do you really want to use a user-defined structure? Do you really want to use a user-defined structure?
Er du sikker på at ville bruge en brugerdefineret struktur ? Er du sikker på, at ville bruge en brugerdefineret struktur?
Too manu URLs, cannot handle so many links!! Too manu URLs, cannot handle so many links!!
For mange URL' er, WinHTTrack kan ikke håndtere så mange links!!! For mange URL' er, WinHTTrack kan ikke håndtere så mange links!!!
Not enough memory, fatal internal error.. Not enough memory, fatal internal error..
@@ -857,7 +875,7 @@ Ukendt handling!
Add this URL?\r\n Add this URL?\r\n
Tilføj denne URL?\r\n Tilføj denne URL?\r\n
Warning: main process is still not responding, cannot add URL(s).. Warning: main process is still not responding, cannot add URL(s)..
Advarsel: Processen svarer stadigvæk ikke ,URL'en kan ikke tilføjes... Advarsel: hovedprocessen svarer stadigvæk ikke, URL'en kan ikke tilføjes...
Type/MIME associations Type/MIME associations
Type/MIME-tilknytning Type/MIME-tilknytning
File types: File types:
@@ -879,19 +897,19 @@ Frys vindue
More information: More information:
Mere information Mere information
Welcome to WinHTTrack Website Copier!\n\nPlease click on the NEXT button to\n\n- start a new project\n- or resume a partial download Welcome to WinHTTrack Website Copier!\n\nPlease click on the NEXT button to\n\n- start a new project\n- or resume a partial download
Velkommen til WinHTTrack Website Copier!\n\nKlik på Næste for at for at\n\n-starte et nyt projekt\n-eller genoptage et delvist download. Velkommen til WinHTTrack Website Copier!\n\nKlik på Næste for at for at\n\n- starte et nyt projekt\n- eller genoptage et delvist download.
File names with extension:\nFile names containing:\nThis file name:\nFolder names containing:\nThis folder name:\nLinks on this domain:\nLinks on domains containing:\nLinks from this host:\nLinks containing:\nThis link:\nALL LINKS File names with extension:\nFile names containing:\nThis file name:\nFolder names containing:\nThis folder name:\nLinks on this domain:\nLinks on domains containing:\nLinks from this host:\nLinks containing:\nThis link:\nALL LINKS
Filnavne med 'efternavn':\nFilnavne der indeholder:\nDette filnavn:\nMappenavne der indeholder:\nDette mappenavn:\nLinks på dette domæne:\nLinks på dette domæne der indeholder:\nLinks fra denne vært:\nLinks der indeholder:\nDette Link:\nAlle Links*/ Filnavne med 'efternavn':\nFilnavne der indeholder:\nDette filnavn:\nMappenavne der indeholder:\nDette mappenavn:\nLinks på dette domæne:\nLinks på dette domæne der indeholder:\nLinks fra denne vært:\nLinks der indeholder:\nDette Link:\nAlle Links*/
Show all\nHide debug\nHide infos\nHide debug and infos Show all\nHide debug\nHide infos\nHide debug and infos
Vis alle\nSkjul fejlfinding\nSkjul information\nSkjul fejlfinding og information Vis alle\nSkjul fejlfinding\nSkjul information\nSkjul fejlfinding og information
Site-structure (default)\nHtml in web/, images/other files in web/images/\nHtml in web/html, images/other in web/images\nHtml in web/, images/other in web/\nHtml in web/, images/other in web/xxx, where xxx is the file extension\nHtml in web/html, images/other in web/xxx\nSite-structure, without www.domain.xxx/\nHtml in site_name/, images/other files in site_name/images/\nHtml in site_name/html, images/other in site_name/images\nHtml in site_name/, images/other in site_name/\nHtml in site_name/, images/other in site_name/xxx\nHtml in site_name/html, images/other in site_name/xxx\nAll files in web/, with random names (gadget !)\nAll files in site_name/, with random names (gadget !)\nUser-defined structure.. Site-structure (default)\nHtml in web/, images/other files in web/images/\nHtml in web/html, images/other in web/images\nHtml in web/, images/other in web/\nHtml in web/, images/other in web/xxx, where xxx is the file extension\nHtml in web/html, images/other in web/xxx\nSite-structure, without www.domain.xxx/\nHtml in site_name/, images/other files in site_name/images/\nHtml in site_name/html, images/other in site_name/images\nHtml in site_name/, images/other in site_name/\nHtml in site_name/, images/other in site_name/xxx\nHtml in site_name/html, images/other in site_name/xxx\nAll files in web/, with random names (gadget !)\nAll files in site_name/, with random names (gadget !)\nUser-defined structure..
Websted-struktur (standard)\nHtml i web/, images/other-filer i web/images/\nHtml i web/html, images/other i web/images\nHtml i web/, images/other i web/\nHtml i web/, images/other i web/xxx, hvor xxx er filendelsen\nHtml i web/html, images/other i web/xxx\nWebsted-struktur, uden www.domæne.xxx/\nHtml i webstednavn/, images/other-filer i webstednavn/images/\nHtml i webstednavn/html, images/other i webstednavn/images\nHtml i webstednavn/, images/other i webstednavn/\nHtml i webstednavn/, images/other i webstednavn/xxx\nHtml i webstednavn/html, images/other i webstednavn/xxx\nAlle filer in web/, med tilfældige navne (gadget !)\nAlle filer i webstednavn/, med tilfældige navne (gadget !)\nBrugerdefineret struktur... Sted-struktur (standard)\nHtml i web/, images/other-filer i web/images/\nHtml i web/html, images/other i web/images\nHtml i web/, images/other i web/\nHtml i web/, images/other i web/xxx, hvor xxx er filendelsen\nHtml i web/html, images/other i web/xxx\nWebsted-struktur, uden www.domæne.xxx/\nHtml i webstednavn/, images/other-filer i webstednavn/images/\nHtml i webstednavn/html, images/other i webstednavn/images\nHtml i webstednavn/, images/other i webstednavn/\nHtml i webstednavn/, images/other i webstednavn/xxx\nHtml i webstednavn/html, images/other i webstednavn/xxx\nAlle filer in web/, med tilfældige navne (gadget !)\nAlle filer i webstednavn/, med tilfældige navne (gadget !)\nBrugerdefineret struktur...
Just scan\nStore html files\nStore non html files\nStore all files (default)\nStore html files first Just scan\nStore html files\nStore non html files\nStore all files (default)\nStore html files first
ust skan\nGem html-filer\nGem ikke-html-filer\nGem alle filer (standard)\nGem html-filer først ust skan\nOpbevar html-filer\nGem ikke-html-filer\nGem alle filer (standard)\nGem html-filer først
Stay in the same directory\nCan go down (default)\nCan go up\nCan both go up & down Stay in the same directory\nCan go down (default)\nCan go up\nCan both go up & down
Bliv i det samme bibliotek\nKan gå ned (standard]\nKan gå op\nKan gå både op og ned Bliv i det samme bibliotek\nKan gå ned (standard]\nKan gå op\nKan gå både op og ned
Stay on the same address (default)\nStay on the same domain\nStay on the same top level domain\nGo everywhere on the web Stay on the same address (default)\nStay on the same domain\nStay on the same top level domain\nGo everywhere on the web
Bliv på den samme adresse[standard]\nBliv på samme domæne\nBliv på samme top level domæne\n Gå overalt på internettet. Bliv på den samme adresse (standard)\nBliv på det samme domæne\nBliv på det samme top-level-domæne\nGå overalt på webbet.
Never\nIf unknown (except /)\nIf unknown Never\nIf unknown (except /)\nIf unknown
Aldrig\nUkendt (undtaget /]\nhvis ukendt Aldrig\nUkendt (undtaget /]\nhvis ukendt
no robots.txt rules\nrobots.txt except wizard\nfollow robots.txt rules no robots.txt rules\nrobots.txt except wizard\nfollow robots.txt rules
@@ -899,7 +917,7 @@ Ingen robots.txt-regler\nrobots.txt med undtagelse af guiden\nf
normal\nextended\ndebug normal\nextended\ndebug
Normal\nUdvidet\nFejlfinding Normal\nUdvidet\nFejlfinding
Download web site(s)\nDownload web site(s) + questions\nGet individual files\nDownload all sites in pages (multiple mirror)\nTest links in pages (bookmark test)\n* Continue interrupted download\n* Update existing download Download web site(s)\nDownload web site(s) + questions\nGet individual files\nDownload all sites in pages (multiple mirror)\nTest links in pages (bookmark test)\n* Continue interrupted download\n* Update existing download
Download websted(er)\nDownload websted(er) + spørgsmål\nHent enkelte filer\nDownload alle websteder på sider (flere kopieret websteder)\nTest links på siderne (bogmærke test)\n* Fortsæt afbrudt projekt\n* Opdater tidligere projekt Download websted(er)\nDownload websted(er) + spørgsmål\nHent enkelte filer\nDownload alle steder på sider (flere spejlkopiering)\nTest links på siderne (bogmærke test)\n* Fortsæt afbrudt projekt\n* Opdater tidligere projekt
Relative URI / Absolute URL (default)\nAbsolute URL / Absolute URL\nAbsolute URI / Absolute URL\nOriginal URL / Original URL Relative URI / Absolute URL (default)\nAbsolute URL / Absolute URL\nAbsolute URI / Absolute URL\nOriginal URL / Original URL
Relativ URL / absolut URL (standard)\nAbsolut URL / absolut URL\nAbsolut URL / absolut URL\nOriginal URL / original URL Relativ URL / absolut URL (standard)\nAbsolut URL / absolut URL\nAbsolut URL / absolut URL\nOriginal URL / original URL
Open Source offline browser Open Source offline browser
@@ -927,4 +945,34 @@ Du kan nu lukke vinduet
Server terminated Server terminated
Server lukket Server lukket
A fatal error has occurred during this mirror A fatal error has occurred during this mirror
Det opstod en fatal fejl under kopieringen Det opstod en fatal fejl under denne spejlkopiering
View Documentation
Vis dokumentation
Go To HTTrack Website
Gå til HTTrack website
Go To HTTrack Forum
Gå til HTTrack forum
View License
Vis licens
Beware: you local browser might be unable to browse files with embedded filenames
OBS: din lokale browser er måske ikke i stand til at browse filer med indlejrede filnavne
Recreated HTTrack internal cached resources
Genskabte HTTrack internt mellemlagret ressourcer
Could not create internal cached resources
Kunne ikke oprette internt mellemlagret ressourcer
Could not get the system external storage directory
Kunne ikke hente systemets eksterne lagringsmappe
Could not write to:
Kunne ikke skrive til:
Read-only media (SDCARD)
Skrivebeskyttet medie (SDCARD)
No storage media (SDCARD)
Intet lagringsmedie (SDCARD)
HTTrack may not be able to download websites until this problem is fixed
HTTrack er måske ikke i stand til at downloade websteder før dette problem er rettet
HTTrack: mirror '%s' stopped!
HTTrack: spejlkopiering '%s' stoppet!
Click on this notification to restart the interrupted mirror
Klik på denne notifikation for at genstarte den afbrudte spejlkopiering
HTTrack: could not save profile for '%s'!
HTTrack: kunne ikke gemme profil for '%s'!

View File

@@ -1,6 +1,8 @@
langdir = $(datadir)/httrack/lang langdir = $(datadir)/httrack/lang
lang_DATA = *.txt # Glob against $(srcdir): a bare "*.txt" is resolved against the build dir and
# stays unexpanded (breaking "make") in an out-of-tree build.
lang_DATA = $(srcdir)/*.txt
langrootdir = $(datadir)/httrack langrootdir = $(datadir)/httrack
langroot_DATA = ../lang.def ../lang.indexes langroot_DATA = ../lang.def ../lang.indexes

View File

@@ -1,7 +1,7 @@
# Makefile.in generated by automake 1.16.5 from Makefile.am. # Makefile.in generated by automake 1.17 from Makefile.am.
# @configure_input@ # @configure_input@
# Copyright (C) 1994-2021 Free Software Foundation, Inc. # Copyright (C) 1994-2024 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation # This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it, # gives unlimited permission to copy and/or distribute it,
@@ -70,6 +70,8 @@ am__make_running_with_option = \
test $$has_opt = yes test $$has_opt = yes
am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_dryrun = (target_option=n; $(am__make_running_with_option))
am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
am__rm_f = rm -f $(am__rm_f_notfound)
am__rm_rf = rm -rf $(am__rm_f_notfound)
pkgdatadir = $(datadir)/@PACKAGE@ pkgdatadir = $(datadir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@
@@ -143,10 +145,9 @@ am__base_list = \
sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
am__uninstall_files_from_dir = { \ am__uninstall_files_from_dir = { \
test -z "$$files" \ { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
|| { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
|| { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && echo $$files | $(am__xargs_n) 40 $(am__rm_f); }; \
$(am__cd) "$$dir" && rm -f $$files; }; \
} }
am__installdirs = "$(DESTDIR)$(langdir)" "$(DESTDIR)$(langrootdir)" am__installdirs = "$(DESTDIR)$(langdir)" "$(DESTDIR)$(langrootdir)"
DATA = $(lang_DATA) $(langroot_DATA) DATA = $(lang_DATA) $(langroot_DATA)
@@ -162,6 +163,7 @@ AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@ AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@ AUTOMAKE = @AUTOMAKE@
AWK = @AWK@ AWK = @AWK@
BASH = @BASH@
CC = @CC@ CC = @CC@
CCDEPMODE = @CCDEPMODE@ CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@ CFLAGS = @CFLAGS@
@@ -200,6 +202,7 @@ LD = @LD@
LDFLAGS = @LDFLAGS@ LDFLAGS = @LDFLAGS@
LDFLAGS_PIE = @LDFLAGS_PIE@ LDFLAGS_PIE = @LDFLAGS_PIE@
LFS_FLAG = @LFS_FLAG@ LFS_FLAG = @LFS_FLAG@
LIBC_FORCE_LINK = @LIBC_FORCE_LINK@
LIBOBJS = @LIBOBJS@ LIBOBJS = @LIBOBJS@
LIBS = @LIBS@ LIBS = @LIBS@
LIBTOOL = @LIBTOOL@ LIBTOOL = @LIBTOOL@
@@ -250,8 +253,10 @@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
am__include = @am__include@ am__include = @am__include@
am__leading_dot = @am__leading_dot@ am__leading_dot = @am__leading_dot@
am__quote = @am__quote@ am__quote = @am__quote@
am__rm_f_notfound = @am__rm_f_notfound@
am__tar = @am__tar@ am__tar = @am__tar@
am__untar = @am__untar@ am__untar = @am__untar@
am__xargs_n = @am__xargs_n@
bindir = @bindir@ bindir = @bindir@
build = @build@ build = @build@
build_alias = @build_alias@ build_alias = @build_alias@
@@ -294,7 +299,9 @@ top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@ top_builddir = @top_builddir@
top_srcdir = @top_srcdir@ top_srcdir = @top_srcdir@
langdir = $(datadir)/httrack/lang langdir = $(datadir)/httrack/lang
lang_DATA = *.txt # Glob against $(srcdir): a bare "*.txt" is resolved against the build dir and
# stays unexpanded (breaking "make") in an out-of-tree build.
lang_DATA = $(srcdir)/*.txt
langrootdir = $(datadir)/httrack langrootdir = $(datadir)/httrack
langroot_DATA = ../lang.def ../lang.indexes langroot_DATA = ../lang.def ../lang.indexes
EXTRA_DIST = $(lang_DATA) $(langroot_DATA) EXTRA_DIST = $(lang_DATA) $(langroot_DATA)
@@ -448,8 +455,8 @@ mostlyclean-generic:
clean-generic: clean-generic:
distclean-generic: distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -$(am__rm_f) $(CONFIG_CLEAN_FILES)
-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) -test . = "$(srcdir)" || $(am__rm_f) $(CONFIG_CLEAN_VPATH_FILES)
maintainer-clean-generic: maintainer-clean-generic:
@echo "This command is intended for maintainers to use" @echo "This command is intended for maintainers to use"
@@ -543,3 +550,10 @@ uninstall-am: uninstall-langDATA uninstall-langrootDATA
# Tell versions [3.59,3.63) of GNU make to not export all variables. # Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded. # Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT: .NOEXPORT:
# Tell GNU make to disable its built-in pattern rules.
%:: %,v
%:: RCS/%,v
%:: RCS/%
%:: s.%
%:: SCCS/s.%

View File

@@ -23,7 +23,7 @@ Cancel changes
Click to confirm Click to confirm
Ïîäòâåðäèòü Ïîäòâåðäèòü
Click to get help! Click to get help!
Ïîëó÷èòü ñïðàâêó Ñïðàâêà
Click to return to previous screen Click to return to previous screen
Âåðíóòüñÿ íàçàä Âåðíóòüñÿ íàçàä
Click to go to next screen Click to go to next screen
@@ -39,9 +39,9 @@ Delete this project?
Delete empty project %s? Delete empty project %s?
Óäàëèòü ïóñòîé ïðîåêò %s? Óäàëèòü ïóñòîé ïðîåêò %s?
Action not yet implemented Action not yet implemented
Ïîêà íå ðåàëèçîâàíî Äåéñòâèå íå ðåàëèçîâàíî
Error deleting this project Error deleting this project
Îøèáêà óäàëåíèÿ ïðîåêòà Îøèáêà óäàëåíèÿ ýòîãî ïðîåêòà
Select a rule for the filter Select a rule for the filter
Âûáðàòü òèï ôèëüòðà Âûáðàòü òèï ôèëüòðà
Enter keywords for the filter Enter keywords for the filter
@@ -51,11 +51,11 @@ Cancel
Add this rule Add this rule
Äîáàâèòü ýòî óñëîâèå Äîáàâèòü ýòî óñëîâèå
Please enter one or several keyword(s) for the rule Please enter one or several keyword(s) for the rule
Ââåäèòå çíà÷åíèÿ óñëîâèé ôèëüòðà Ââåäèòå îäíî èëè íåñêîëüêî çíà÷åíèé óñëîâèé ôèëüòðà
Add Scan Rule Add Scan Rule
Äîáàâèòü ôèëüòð Äîáàâèòü ôèëüòð
Criterion Criterion
Âûáðàòü òèï: Âûáðàòü êðèòåðèè:
String String
Ââåñòè çíà÷åíèå: Ââåñòè çíà÷åíèå:
Add Add
@@ -63,19 +63,19 @@ Add
Scan Rules Scan Rules
Ôèëüòðû Ôèëüòðû
Use wildcards to exclude or include URLs or links.\nYou can put several scan strings on the same line.\nUse spaces as separators.\n\nExample: +*.zip -www.*.com -www.*.edu/cgi-bin/*.cgi Use wildcards to exclude or include URLs or links.\nYou can put several scan strings on the same line.\nUse spaces as separators.\n\nExample: +*.zip -www.*.com -www.*.edu/cgi-bin/*.cgi
Èñïîëüçóÿ ìàñêè âû ìîæåòå èñêëþ÷èòü/âêëþ÷èòü ñðàçó íåñêîëüêî àäðåñîâ\nÊàê ðàçäåëèòåëü ôèëüòðîâ èñïîëüçóéòå çàïÿòûå èëè ïðîáåëû.\nÏðèìåð: +*.zip -www.*.com,-www.*.edu/cgi-bin/*.cgi Èñïîëüçóÿ ìàñêè âû ìîæåòå èñêëþ÷èòü/âêëþ÷èòü ñðàçó íåñêîëüêî àäðåñîâ èëè ññûëîê.\nÊàê ðàçäåëèòåëü ôèëüòðîâ èñïîëüçóéòå çàïÿòûå èëè ïðîáåëû.\nÏðèìåð: +*.zip -www.*.com,-www.*.edu/cgi-bin/*.cgi
Exclude links Exclude links
Èñêëþ÷èòü... Èñêëþ÷èòü
Include link(s) Include link(s)
Âêëþ÷èòü... Âêëþ÷èòü
Tip: To have ALL GIF files included, use something like +www.someweb.com/*.gif. \n(+*.gif / -*.gif will include/exclude ALL GIFs from ALL sites) Tip: To have ALL GIF files included, use something like +www.someweb.com/*.gif. \n(+*.gif / -*.gif will include/exclude ALL GIFs from ALL sites)
Ñîâåò: Åñëè âû õîòèòå ñêà÷àòü âñå gif-ôàéëû, èñïîëüçóéòå, íàïðèìåð, òàêîé ôèëüòð +www.someweb.com/*.gif. \n(+*.gif / -*.gif ðàçðåøàåò/çàïðåùàåò äëÿ ñêà÷èâàíèÿ ÂÑÅ gif-ôàéëû íà ÂÑÅÕ ñàéòàõ) Ñîâåò: Êàê ïðèìåð åñëè âû õîòèòå ñêà÷àòü âñå âêëþ÷åííûå gif-ôàéëû, èñïîëüçóéòå òàêîé ôèëüòð +www.someweb.com/*.gif. \n(+*.gif / -*.gif ðàçðåøàåò/çàïðåùàåò äëÿ ñêà÷èâàíèÿ ÂÑÅ gif-ôàéëû íà ÂÑÅÕ ñàéòàõ)
Save prefs Save prefs
Ñîõðàíèòü íàñòðîéêè Ñîõðàíèòü íàñòðîéêè
Matching links will be excluded: Matching links will be excluded:
Ëèíêè, óäîâëåòâîðÿþùèå ýòîìó óñëîâèþ áóäóò èñêëþ÷åíû: Ññûëêè ïîäõîäÿùèå ïîä ýòî óñëîâèå áóäóò èñêëþ÷åíû:
Matching links will be included: Matching links will be included:
Ëèíêè, óäîâëåòâîðÿþùèå ýòîìó óñëîâèþ áóäóò âêëþ÷åíû: Ññûëêè ïîäõîäÿùèå ïîä ýòî óñëîâèå áóäóò âêëþ÷åíû:
Example: Example:
Ïðèìåð: Ïðèìåð:
gif\r\nWill match all GIF files gif\r\nWill match all GIF files
@@ -83,9 +83,9 @@ gif\r\n
blue\r\nWill find all files with a matching 'blue' sub-string such as 'bluesky-small.jpeg' blue\r\nWill find all files with a matching 'blue' sub-string such as 'bluesky-small.jpeg'
blue\r\nÎòëîâèò âñå ôàéëû, ñîäåðæàùèå â èìåíè ïîäñòðîêó 'blue', íàïðèìåð 'bluesky-small.jpeg' blue\r\nÎòëîâèò âñå ôàéëû, ñîäåðæàùèå â èìåíè ïîäñòðîêó 'blue', íàïðèìåð 'bluesky-small.jpeg'
bigfile.mov\r\nWill match the file 'bigfile.mov', but not 'bigfile2.mov' bigfile.mov\r\nWill match the file 'bigfile.mov', but not 'bigfile2.mov'
bigfile.mov\r\nÎòëîâèò ôàéë 'bigfile.mov', íî, â òîæå âðåìÿ, ïðîïóñòèò ôàéë 'bigfile2.mov' bigfile.mov\r\nÎòëîâèò ôàéë 'bigfile.mov', íî, â òî æå âðåìÿ, ïðîïóñòèò ôàéë 'bigfile2.mov'
cgi\r\nWill find links with folder name matching sub-string 'cgi' such as /cgi-bin/somecgi.cgi cgi\r\nWill find links with folder name matching sub-string 'cgi' such as /cgi-bin/somecgi.cgi
cgi\r\nÎòëîâèò àäðåñà, ñîäåðæàùèå êàòàëîãè ñ ïîäñòðîêîé 'cgi', òàêèå êàê /cgi-bin/somecgi.cgi cgi\r\nÎòëîâèò àäðåñà, ñîäåðæàùèå êàòàëîãè ñ ïîäñòðîêîé 'cgi', òàêèå, êàê /cgi-bin/somecgi.cgi
cgi-bin\r\nWill find links with folder name matching whole 'cgi-bin' string (but not cgi-bin-2, for example) cgi-bin\r\nWill find links with folder name matching whole 'cgi-bin' string (but not cgi-bin-2, for example)
cgi-bin\r\nÎòëîâèò àäðåñà, ñîäåðæàùèå êàòàëîã 'cgi-bin' (íî íå cgi-bin-2, íàïðèìåð) cgi-bin\r\nÎòëîâèò àäðåñà, ñîäåðæàùèå êàòàëîã 'cgi-bin' (íî íå cgi-bin-2, íàïðèìåð)
someweb.com\r\nWill find links with matching sub-string such as www.someweb.com, private.someweb.com etc. someweb.com\r\nWill find links with matching sub-string such as www.someweb.com, private.someweb.com etc.
@@ -109,7 +109,7 @@ Existing filters
Cancel changes Cancel changes
Îòìåíèòü èçìåíåíèÿ Îòìåíèòü èçìåíåíèÿ
Save current preferences as default values Save current preferences as default values
Ñîõðàíèòü òåêóùèå íàñòðîéêè êàê çíà÷åíèÿ ïî óìîë÷àíèþ Ñîõðàíèòü òåêóùèå èçìåíåíèÿ êàê ïî óìîë÷àíèþ
Click to confirm Click to confirm
Ïîäòâåðäèòü Ïîäòâåðäèòü
No log files in %s! No log files in %s!
@@ -117,7 +117,7 @@ No log files in %s!
No 'index.html' file in %s! No 'index.html' file in %s!
Îòñóòñòâóåò ôàéë index.html â %s! Îòñóòñòâóåò ôàéë index.html â %s!
Click to quit WinHTTrack Website Copier Click to quit WinHTTrack Website Copier
Âûéòè èç ïðîãðàììû WinHTTrack Website Copier Âûéòè èç ïðîãðàììû
View log files View log files
Ïðîñìîòð ëîã ôàéëîâ Ïðîñìîòð ëîã ôàéëîâ
Browse HTML start page Browse HTML start page
@@ -181,7 +181,7 @@ Parsing HTML file (testing links)..
Pause - Toggle [Mirror]/[Pause download] to resume operation Pause - Toggle [Mirror]/[Pause download] to resume operation
Îñòàíîâëåíî (äëÿ ïðîäîëæåíèÿ âûáåðèòå [Çåðêàëî]/[Ïðèîñòàíîâèòü çàêà÷êó]) Îñòàíîâëåíî (äëÿ ïðîäîëæåíèÿ âûáåðèòå [Çåðêàëî]/[Ïðèîñòàíîâèòü çàêà÷êó])
Finishing pending transfers - Select [Cancel] to stop now! Finishing pending transfers - Select [Cancel] to stop now!
Çàâåðøàþòñÿ îòëîæåííûå çàêà÷êè - ÷òîáû ïðåðâàòü, íàæìèòå Cancel! Çàâåðøàþòñÿ îòëîæåííûå çàêà÷êè ÷òîáû ïðåðâàòü, íàæìèòå Cancel!
scanning scanning
ñêàíèðóåì ñêàíèðóåì
Waiting for scheduled time.. Waiting for scheduled time..
@@ -205,11 +205,11 @@ Mirroring operation complete.\nClick Exit to quit WinHTTrack.\nSee log file(s) i
* * MIRROR ABORTED! * *\r\nThe current temporary cache is required for any update operation and only contains data downloaded during the present aborted session.\r\nThe former cache might contain more complete information; if you do not want to lose that information, you have to restore it and delete the current cache.\r\n[Note: This can easily be done here by erasing the hts-cache/new.* files]\r\n\r\nDo you think the former cache might contain more complete information, and do you want to restore it? * * MIRROR ABORTED! * *\r\nThe current temporary cache is required for any update operation and only contains data downloaded during the present aborted session.\r\nThe former cache might contain more complete information; if you do not want to lose that information, you have to restore it and delete the current cache.\r\n[Note: This can easily be done here by erasing the hts-cache/new.* files]\r\n\r\nDo you think the former cache might contain more complete information, and do you want to restore it?
* * ÇÀÊÀ×ÊÀ ÏÐÅÐÂÀÍÀ! * *\r\nÂðåìåííûé êýø, ñîçäàííûé âî âðåìÿ òåêóùåé ñåññèé, ñîäåðæèò äàííûå, çàãðóæåííûå òîëüêî âî âðåìÿ äàííîé ñåññèè è ïîòðåáóåòñÿ òîëüêî â ñëó÷àå âîçîáíîâëåíèÿ çàêà÷êè.\r\nÎäíàêî, ïðåäûäóùèé êýø ìîæåò ñîäåðæàòü áîëåå ïîëíóþ èíôîðìàöèþ. Åñëè âû íå õîòèòå ïîòåðÿòü ýòè äàííûå, âàì íóæíî óäàëèòü òåêóùèé êýø è âîçîáíîâèòü ïðåäûäóùèé.\r\n(Ýòî ìîæíî ëåãêî ñäåëàòü ïðÿìî çäåñü, óäàëèâ ôàéëû hts-cache/new.]\r\n\r\nÑ÷èòàåòå ëè âû, ÷òî ïðåäûäóùèé êýø ìîæåò ñîäåðæàòü áîëåå ïîëíóþ èíôîðìàöèþ, è õîòèòå ëè âû âîññòàíîâèòü åãî? * * ÇÀÊÀ×ÊÀ ÏÐÅÐÂÀÍÀ! * *\r\nÂðåìåííûé êýø, ñîçäàííûé âî âðåìÿ òåêóùåé ñåññèé, ñîäåðæèò äàííûå, çàãðóæåííûå òîëüêî âî âðåìÿ äàííîé ñåññèè è ïîòðåáóåòñÿ òîëüêî â ñëó÷àå âîçîáíîâëåíèÿ çàêà÷êè.\r\nÎäíàêî, ïðåäûäóùèé êýø ìîæåò ñîäåðæàòü áîëåå ïîëíóþ èíôîðìàöèþ. Åñëè âû íå õîòèòå ïîòåðÿòü ýòè äàííûå, âàì íóæíî óäàëèòü òåêóùèé êýø è âîçîáíîâèòü ïðåäûäóùèé.\r\n(Ýòî ìîæíî ëåãêî ñäåëàòü ïðÿìî çäåñü, óäàëèâ ôàéëû hts-cache/new.]\r\n\r\nÑ÷èòàåòå ëè âû, ÷òî ïðåäûäóùèé êýø ìîæåò ñîäåðæàòü áîëåå ïîëíóþ èíôîðìàöèþ, è õîòèòå ëè âû âîññòàíîâèòü åãî?
* * MIRROR ERROR! * *\r\nHTTrack has detected that the current mirror is empty. If it was an update, the previous mirror has been restored.\r\nReason: the first page(s) either could not be found, or a connection problem occurred.\r\n=> Ensure that the website still exists, and/or check your proxy settings! <= * * MIRROR ERROR! * *\r\nHTTrack has detected that the current mirror is empty. If it was an update, the previous mirror has been restored.\r\nReason: the first page(s) either could not be found, or a connection problem occurred.\r\n=> Ensure that the website still exists, and/or check your proxy settings! <=
* * ÎØÈÁÊÀ! * *\r\nÒåêóùåå çåðêàëî - ïóñòî. Åñëè ýòî áûëî îáíîâëåíèå, ïðåäûäóùàÿ âåðñèÿ çåðêàëà âîññòàíîâëåíà.\r\nÏðè÷èíà: ïåðâàÿ ñòðàíèöà(û) èëè íå íàéäåíà, èëè áûëè ïðîáëåìû ñ ñîåäèíåíèåì.\r\n=> Óáåäèòåñü, ÷òî âåáñàéò âñå åùå ñóùåñòâóåò, è/èëè ïðîâåðüòå óñòàíîâêè ïðîêñè-ñåðâåðà! <= * * ÎØÈÁÊÀ! * *\r\nÒåêóùåå çåðêàëî ïóñòî. Åñëè ýòî áûëî îáíîâëåíèå, ïðåäûäóùàÿ âåðñèÿ çåðêàëà âîññòàíîâëåíà.\r\nÏðè÷èíà: ïåðâàÿ ñòðàíèöà(û) èëè íå íàéäåíà, èëè áûëè ïðîáëåìû ñ ñîåäèíåíèåì.\r\n=> Óáåäèòåñü, ÷òî âåáñàéò âñå åùå ñóùåñòâóåò, è/èëè ïðîâåðüòå óñòàíîâêè ïðîêñè-ñåðâåðà! <=
\n\nTip: Click [View log file] to see warning or error messages \n\nTip: Click [View log file] to see warning or error messages
\nÏîäñêàçêà: Äëÿ ïðîñìîòðà ñîîáùåíèé îá îøèáêàõ è ïðåäóïðåæäåíèé íàæìèòå [Ïðîñìîòð ëîã ôàéëà] \nÏîäñêàçêà: Äëÿ ïðîñìîòðà ñîîáùåíèé îá îøèáêàõ è ïðåäóïðåæäåíèé íàæìèòå [Ïðîñìîòð ëîã ôàéëà]
Error deleting a hts-cache/new.* file, please do it manually Error deleting a hts-cache/new.* file, please do it manually
Îøèáêà óäàëåíèÿ ôàéëà hts-cache/new.* , ïîæàëóéñòà, óäàëèòå åãî âðó÷íóþ.\r\n Îøèáêà óäàëåíèÿ ôàéëà hts-cache/new.*\r\nÏîæàëóéñòà, óäàëèòå ôàéë âðó÷íóþ.\r\n
Do you really want to quit WinHTTrack Website Copier? Do you really want to quit WinHTTrack Website Copier?
Âû äåéñòâèòåëüíî õîòèòå âûéòè èç WinHTTrack? Âû äåéñòâèòåëüíî õîòèòå âûéòè èç WinHTTrack?
- Mirroring Mode -\n\nEnter address(es) in URL box - Mirroring Mode -\n\nEnter address(es) in URL box
@@ -319,7 +319,7 @@ Pause Download?
Stop the mirroring operation Stop the mirroring operation
Ïðåðâàòü çàêà÷êó Ïðåðâàòü çàêà÷êó
Minimize to System Tray Minimize to System Tray
Ñïðÿòàòü â ñèñòåìíûé òðýé Ñïðÿòàòü â ñèñòåìíûé òðåé
Click to skip a link or stop parsing Click to skip a link or stop parsing
Ïðîïóñòèòü ëèíê èëè ïðåðâàòü àíàëèç ôàéëà Ïðîïóñòèòü ëèíê èëè ïðåðâàòü àíàëèç ôàéëà
Click to skip a link Click to skip a link
@@ -327,7 +327,7 @@ Click to skip a link
Bytes saved Bytes saved
Ñîõðàíåíî áàéò: Ñîõðàíåíî áàéò:
Links scanned Links scanned
Ïðîñêàíèðîâàíî ëèíêîâ: Ïðîñêàíèðîâàíî ññûëîê:
Time: Time:
Âðåìÿ: Âðåìÿ:
Connections: Connections:
@@ -363,7 +363,7 @@ Choose local site structure
Set user-defined structure on disk Set user-defined structure on disk
Óñòàíîâèòü çàäàííóþ ëîêàëüíóþ ñòðóêòóðó ñàéòà Óñòàíîâèòü çàäàííóþ ëîêàëüíóþ ñòðóêòóðó ñàéòà
Use a cache for updates and retries Use a cache for updates and retries
Èñïîëüçîâàòü êýø äëÿ îáíîâëåíèÿ è äîêà÷êè Èñïîëüçîâàòü êýø äëÿ îáíîâëåíèÿ è ïîâòîðîâ ñêà÷èâàíèÿ
Do not update zero size or user-erased files Do not update zero size or user-erased files
Íå êà÷àòü ôàéëû, êîòîðûå áûëè îäíàæäû ñêà÷àíû, äàæå åñëè îíè íóëåâîé äëèíû èëè óäàëåíû Íå êà÷àòü ôàéëû, êîòîðûå áûëè îäíàæäû ñêà÷àíû, äàæå åñëè îíè íóëåâîé äëèíû èëè óäàëåíû
Create a Start Page Create a Start Page
@@ -407,7 +407,7 @@ Maximum amount of bytes to retrieve from the Web
Make a pause after downloading this amount of bytes Make a pause after downloading this amount of bytes
Ïîñëå çàãðóçêè óêàçàííîãî ÷èñëà áàéòîâ, ñäåëàòü ïàóçó Ïîñëå çàãðóçêè óêàçàííîãî ÷èñëà áàéòîâ, ñäåëàòü ïàóçó
Maximum duration time for the mirroring operation Maximum duration time for the mirroring operation
Ìàêñ. ïðîäîëæèòåëüíîñòü çåðêàëèçàöèè Ìàêñ. ïðîäîëæèòåëüíîñòü ïðîöåññà ñîçäàíèÿ çåðêàë
Maximum transfer rate Maximum transfer rate
Ìàêñ. ñêîðîñòü çàêà÷êè Ìàêñ. ñêîðîñòü çàêà÷êè
Maximum connections/seconds (avoid server overload) Maximum connections/seconds (avoid server overload)
@@ -445,7 +445,7 @@ Log file type (if generated)
Maximum mirroring depth from root address Maximum mirroring depth from root address
Ìàêñ. ãëóáèíà ñîçäàíèÿ çåðêàëà îò íà÷àëüíîãî àäðåñà Ìàêñ. ãëóáèíà ñîçäàíèÿ çåðêàëà îò íà÷àëüíîãî àäðåñà
Maximum mirroring depth for external/forbidden addresses (0, that is, none, is the default) Maximum mirroring depth for external/forbidden addresses (0, that is, none, is the default)
Ìàêñèìàëüíàÿ ãëóáèíà çàêà÷êè äëÿ âíåøíèõ/çàïðåùåííûõ àäðåñîâ (0, ò.å., íåò îãðàíè÷åíèé, ýòî çíà÷åíèå ïîóìîë÷àíèþ) Ìàêñèìàëüíàÿ ãëóáèíà çàêà÷êè äëÿ âíåøíèõ/çàïðåùåííûõ àäðåñîâ (0, ò.å., íåò îãðàíè÷åíèé, ýòî çíà÷åíèå ïî óìîë÷àíèþ)
Create a debugging file Create a debugging file
Ñîçäàòü ôàéë ñ îòëàäî÷íîé èíôîðìàöèåé Ñîçäàòü ôàéë ñ îòëàäî÷íîé èíôîðìàöèåé
Use non-standard requests to get round some server bugs Use non-standard requests to get round some server bugs
@@ -453,19 +453,19 @@ Use non-standard requests to get round some server bugs
Use old HTTP/1.0 requests (limits engine power!) Use old HTTP/1.0 requests (limits engine power!)
Èñïîëüçîâàòü ñòàðûé ïðîòîêîë HTTP/1.0 (îãðàíè÷èò âîçìîæíîñòè ïðîãðàììû!) Èñïîëüçîâàòü ñòàðûé ïðîòîêîë HTTP/1.0 (îãðàíè÷èò âîçìîæíîñòè ïðîãðàììû!)
Attempt to limit retransfers through several tricks (file size test..) Attempt to limit retransfers through several tricks (file size test..)
Ïîïûòêà îãðàíè÷èòü ïåðåêà÷êó èñïîëüóÿ íåêîòîðûå ïðèåìû (òåñò íà ðàçìåð ôàéëà..) Ïîïûòêà îãðàíè÷èòü ïåðåêà÷êó èñïîëüçóÿ íåêîòîðûå ïðèåìû (òåñò íà ðàçìåð ôàéëà..)
Attempt to limit the number of links by skipping similar URLs (www.foo.com==foo.com, http=https ..) Attempt to limit the number of links by skipping similar URLs (www.foo.com==foo.com, http=https ..)
Îãðàíè÷èòü ÷èñëî ëèíêîâ, óäàëÿÿ àíàëîãè÷íûå ëèíêè (www.foo.com==foo.com, http=https ..) Îãðàíè÷èòü ÷èñëî ëèíêîâ, óäàëÿÿ àíàëîãè÷íûå ëèíêè (www.foo.com==foo.com, http=https ..)
Write external links without login/password Write external links without login/password
Ñîõðàíÿòü âíåøíèå ëèíêè áåç ëîãèíà/ïàðîëÿ Ñîõðàíÿòü âíåøíèå ëèíêè áåç ëîãèíà/ïàðîëÿ
Write internal links without query string Write internal links without query string
Ñîõðàíÿòü âíóòðåííèå ëèíêè óñå÷åííî (äî çàíàêà ?) Ñîõðàíÿòü âíóòðåííèå ëèíêè óñå÷åííî (äî çíàêà ?)
Get non-HTML files related to a link, eg external .ZIP or pictures Get non-HTML files related to a link, eg external .ZIP or pictures
Êà÷àòü íå-html ôàéëû âáëèçè ññûëêè (íàïð.: âíåøíèå .ZIP èëè ãðàô. ôàéëû) Êà÷àòü íå-html ôàéëû âáëèçè ññûëêè (íàïð.: âíåøíèå .ZIP èëè ãðàô. ôàéëû)
Test all links (even forbidden ones) Test all links (even forbidden ones)
Ïðîâåðÿòü âñå ëèíêè (äàæå çàïðåùåííûå ê çàêà÷êå) Ïðîâåðÿòü âñå ëèíêè (äàæå çàïðåùåííûå ê çàêà÷êå)
Try to catch all URLs (even in unknown tags/code) Try to catch all URLs (even in unknown tags/code)
Ñòàðàòüñÿ îïðåäåëÿòü âñå URL'û (äàæå â íåîïîçíàííûõ òýãàõ/ñêðèïòàõ) Ñòàðàòüñÿ îïðåäåëÿòü âñå URL'û (äàæå â íåîïîçíàííûõ òåãàõ/ñêðèïòàõ)
Get HTML files first! Get HTML files first!
Ïîëó÷èòü âíà÷àëå HTML ôàéëû! Ïîëó÷èòü âíà÷àëå HTML ôàéëû!
Structure type (how links are saved) Structure type (how links are saved)
@@ -599,7 +599,7 @@ Do you really want to quit WinHTTrack Website Copier?
Do not connect to a provider (already connected) Do not connect to a provider (already connected)
Íå ñîåäèíÿòüñÿ ñ ïðîâàéäåðîì (ñîåäèíåíèå óæå óñòàíîâëåíî) Íå ñîåäèíÿòüñÿ ñ ïðîâàéäåðîì (ñîåäèíåíèå óæå óñòàíîâëåíî)
Do not use remote access connection Do not use remote access connection
Íå èñïîüçîâàòü óäàëåííîé ñîåäèíåíèÿ Íå èñïîëüçîâàòü óäàëåííîé ñîåäèíåíèÿ
Schedule the mirroring operation Schedule the mirroring operation
Çàêà÷êà ïî ðàñïèñàíèþ Çàêà÷êà ïî ðàñïèñàíèþ
Quit WinHTTrack Website Copier Quit WinHTTrack Website Copier
@@ -633,9 +633,9 @@ Connect to this provider
Disconnect when finished Disconnect when finished
Îòñîåäèíèòüñÿ ïðè çàâåðøåíèè Îòñîåäèíèòüñÿ ïðè çàâåðøåíèè
Disconnect modem on completion Disconnect modem on completion
Îòñîåäåíèòü ïðè çàâåðøåíèè Îòñîåäèíèòü ïðè çàâåðøåíèè
\r\n(Please notify us of any bug or problem)\r\n\r\nDevelopment:\r\nInterface (Windows): Xavier Roche\r\nSpider: Xavier Roche\r\nJavaParserClasses: Yann Philippot\r\n\r\n(C)1998-2003 Xavier Roche and other contributors\r\nMANY THANKS for translation tips to:\r\nRobert Lagadec (rlagadec@yahoo.fr) \r\n(Please notify us of any bug or problem)\r\n\r\nDevelopment:\r\nInterface (Windows): Xavier Roche\r\nSpider: Xavier Roche\r\nJavaParserClasses: Yann Philippot\r\n\r\n(C)1998-2003 Xavier Roche and other contributors\r\nMANY THANKS for translation tips to:\r\nRobert Lagadec (rlagadec@yahoo.fr)
\r\n(Ñîîáùèòå íàì ïîæàëóéñòà î çàìå÷åííûõ ïðîáëåìàõ è îøèáêàõ)\r\n\r\nÐàçðàáîòêà:\r\nÈíòåðôåéñ (Windows): Xavier Roche\r\nÊà÷àëêà (spider): Xavier Roche\r\nÏàðñåð ÿâà-êëàññîâ: Yann Philippot\r\n\r\n(C)1998-2003 Xavier Roche and other contributors\r\nMANY THANKS for Russian translations to:\r\nAndrei Iliev (andreiiliev@mail.ru) \r\n(Ñîîáùèòå íàì, ïîæàëóéñòà, î çàìå÷åííûõ ïðîáëåìàõ è îøèáêàõ)\r\n\r\nÐàçðàáîòêà:\r\nÈíòåðôåéñ (Windows): Xavier Roche\r\nÊà÷àëêà (spider): Xavier Roche\r\nÏàðñåð ÿâà-êëàññîâ: Yann Philippot\r\n\r\n(C)1998-2003 Xavier Roche and other contributors\r\nMANY THANKS for Russian translations to:\r\nAndrei Iliev (andreiiliev@mail.ru)
About WinHTTrack Website Copier About WinHTTrack Website Copier
Î ïðîãðàììå WinHTTrack Website Copier Î ïðîãðàììå WinHTTrack Website Copier
Please visit our Web page Please visit our Web page
@@ -657,9 +657,9 @@ Ignore domain
Catch this page only Catch this page only
Ñêà÷àòü òîëüêî ýòó ñòðàíè÷êó Ñêà÷àòü òîëüêî ýòó ñòðàíè÷êó
Mirror site Mirror site
Çåðêàëèçîâàòü ñàéò Ñäåëàòü çåðêàëî ñàéòó
Mirror domain Mirror domain
Çåðêàëèçîâàòü äîìåí Ñäåëàòü çåðêàëî äîìåíó
Ignore all Ignore all
Èãíîðèðîâàòü âñå Èãíîðèðîâàòü âñå
Wizard query Wizard query
@@ -693,9 +693,9 @@ Hide
About WinHTTrack Website Copier About WinHTTrack Website Copier
Î ïðîãðàììå... Î ïðîãðàììå...
Check program updates... Check program updates...
Ïðîâåðèòü íàëè÷èå îáíîâëåííèé ïðîãðàììû... Ïðîâåðèòü íàëè÷èå îáíîâëåíèé ïðîãðàììû...
&Toolbar &Toolbar
Ïàíåëü èíñòðóïåíòîâ Ïàíåëü èíñòðóìåíòîâ
&Status Bar &Status Bar
Ïàíåëü ñîñòîÿíèÿ Ïàíåëü ñîñòîÿíèÿ
S&plit S&plit

View File

@@ -7,7 +7,7 @@ uk
LANGUAGE_AUTHOR LANGUAGE_AUTHOR
Andrij Shevchuk (http://programy.com.ua, http://vic-info.com.ua) \r\n Andrij Shevchuk (http://programy.com.ua, http://vic-info.com.ua) \r\n
LANGUAGE_CHARSET LANGUAGE_CHARSET
ISO-8859-5 windows-1251
LANGUAGE_WINDOWSID LANGUAGE_WINDOWSID
Ukrainian Ukrainian
OK OK

View File

@@ -1,6 +1,8 @@
exemplesdir = $(datadir)/httrack/libtest exemplesdir = $(datadir)/httrack/libtest
exemples_DATA = *.c *.h *.txt # Glob against $(srcdir), not the build dir: a bare "*.c" is resolved relative to
# the build dir and stays unexpanded (breaking "make") in an out-of-tree build.
exemples_DATA = $(srcdir)/*.c $(srcdir)/*.h $(srcdir)/*.txt
EXTRA_DIST = $(exemples_DATA) libtest.mak libtest.vcproj EXTRA_DIST = $(exemples_DATA) libtest.mak libtest.vcproj
AM_CPPFLAGS = \ AM_CPPFLAGS = \
@@ -12,11 +14,18 @@ AM_CPPFLAGS = \
-DSYSCONFDIR=\""$(sysconfdir)"\" \ -DSYSCONFDIR=\""$(sysconfdir)"\" \
-DDATADIR=\""$(datadir)"\" \ -DDATADIR=\""$(datadir)"\" \
-DLIBDIR=\""$(libdir)"\" -DLIBDIR=\""$(libdir)"\"
AM_CPPFLAGS += -I../src # Use $(top_srcdir)/src, not ../src: the latter is relative to the build dir and
# misses the source headers (e.g. httrack-library.h) in an out-of-tree build.
AM_CPPFLAGS += -I$(top_srcdir)/src
# The callback examples reference libc only through libhttrack, so the direct
# libc edge gets dropped from DT_NEEDED (library-not-linked-against-libc).
# Force libc back; configure gates the flag since only a GNU-style linker
# accepts it (LIBC_FORCE_LINK is empty on e.g. macOS).
AM_LDFLAGS = \ AM_LDFLAGS = \
@DEFAULT_LDFLAGS@ \ @DEFAULT_LDFLAGS@ \
-L../src -L../src \
@LIBC_FORCE_LINK@
# Examples # Examples
libbaselinks_la_SOURCES = callbacks-example-baselinks.c libbaselinks_la_SOURCES = callbacks-example-baselinks.c

View File

@@ -1,7 +1,7 @@
# Makefile.in generated by automake 1.16.5 from Makefile.am. # Makefile.in generated by automake 1.17 from Makefile.am.
# @configure_input@ # @configure_input@
# Copyright (C) 1994-2021 Free Software Foundation, Inc. # Copyright (C) 1994-2024 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation # This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it, # gives unlimited permission to copy and/or distribute it,
@@ -71,6 +71,8 @@ am__make_running_with_option = \
test $$has_opt = yes test $$has_opt = yes
am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_dryrun = (target_option=n; $(am__make_running_with_option))
am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
am__rm_f = rm -f $(am__rm_f_notfound)
am__rm_rf = rm -rf $(am__rm_f_notfound)
pkgdatadir = $(datadir)/@PACKAGE@ pkgdatadir = $(datadir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@
@@ -125,10 +127,9 @@ am__base_list = \
sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
am__uninstall_files_from_dir = { \ am__uninstall_files_from_dir = { \
test -z "$$files" \ { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
|| { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
|| { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && echo $$files | $(am__xargs_n) 40 $(am__rm_f); }; \
$(am__cd) "$$dir" && rm -f $$files; }; \
} }
am__installdirs = "$(DESTDIR)$(pkglibdir)" "$(DESTDIR)$(exemplesdir)" am__installdirs = "$(DESTDIR)$(pkglibdir)" "$(DESTDIR)$(exemplesdir)"
LTLIBRARIES = $(pkglib_LTLIBRARIES) LTLIBRARIES = $(pkglib_LTLIBRARIES)
@@ -304,6 +305,7 @@ AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@ AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@ AUTOMAKE = @AUTOMAKE@
AWK = @AWK@ AWK = @AWK@
BASH = @BASH@
CC = @CC@ CC = @CC@
CCDEPMODE = @CCDEPMODE@ CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@ CFLAGS = @CFLAGS@
@@ -342,6 +344,7 @@ LD = @LD@
LDFLAGS = @LDFLAGS@ LDFLAGS = @LDFLAGS@
LDFLAGS_PIE = @LDFLAGS_PIE@ LDFLAGS_PIE = @LDFLAGS_PIE@
LFS_FLAG = @LFS_FLAG@ LFS_FLAG = @LFS_FLAG@
LIBC_FORCE_LINK = @LIBC_FORCE_LINK@
LIBOBJS = @LIBOBJS@ LIBOBJS = @LIBOBJS@
LIBS = @LIBS@ LIBS = @LIBS@
LIBTOOL = @LIBTOOL@ LIBTOOL = @LIBTOOL@
@@ -392,8 +395,10 @@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
am__include = @am__include@ am__include = @am__include@
am__leading_dot = @am__leading_dot@ am__leading_dot = @am__leading_dot@
am__quote = @am__quote@ am__quote = @am__quote@
am__rm_f_notfound = @am__rm_f_notfound@
am__tar = @am__tar@ am__tar = @am__tar@
am__untar = @am__untar@ am__untar = @am__untar@
am__xargs_n = @am__xargs_n@
bindir = @bindir@ bindir = @bindir@
build = @build@ build = @build@
build_alias = @build_alias@ build_alias = @build_alias@
@@ -436,14 +441,25 @@ top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@ top_builddir = @top_builddir@
top_srcdir = @top_srcdir@ top_srcdir = @top_srcdir@
exemplesdir = $(datadir)/httrack/libtest exemplesdir = $(datadir)/httrack/libtest
exemples_DATA = *.c *.h *.txt # Glob against $(srcdir), not the build dir: a bare "*.c" is resolved relative to
# the build dir and stays unexpanded (breaking "make") in an out-of-tree build.
exemples_DATA = $(srcdir)/*.c $(srcdir)/*.h $(srcdir)/*.txt
EXTRA_DIST = $(exemples_DATA) libtest.mak libtest.vcproj EXTRA_DIST = $(exemples_DATA) libtest.mak libtest.vcproj
# Use $(top_srcdir)/src, not ../src: the latter is relative to the build dir and
# misses the source headers (e.g. httrack-library.h) in an out-of-tree build.
AM_CPPFLAGS = @DEFAULT_CFLAGS@ @THREADS_CFLAGS@ @V6_FLAG@ @LFS_FLAG@ \ AM_CPPFLAGS = @DEFAULT_CFLAGS@ @THREADS_CFLAGS@ @V6_FLAG@ @LFS_FLAG@ \
-DPREFIX=\""$(prefix)"\" -DSYSCONFDIR=\""$(sysconfdir)"\" \ -DPREFIX=\""$(prefix)"\" -DSYSCONFDIR=\""$(sysconfdir)"\" \
-DDATADIR=\""$(datadir)"\" -DLIBDIR=\""$(libdir)"\" -I../src -DDATADIR=\""$(datadir)"\" -DLIBDIR=\""$(libdir)"\" \
-I$(top_srcdir)/src
# The callback examples reference libc only through libhttrack, so the direct
# libc edge gets dropped from DT_NEEDED (library-not-linked-against-libc).
# Force libc back; configure gates the flag since only a GNU-style linker
# accepts it (LIBC_FORCE_LINK is empty on e.g. macOS).
AM_LDFLAGS = \ AM_LDFLAGS = \
@DEFAULT_LDFLAGS@ \ @DEFAULT_LDFLAGS@ \
-L../src -L../src \
@LIBC_FORCE_LINK@
# Examples # Examples
@@ -537,15 +553,13 @@ uninstall-pkglibLTLIBRARIES:
done done
clean-pkglibLTLIBRARIES: clean-pkglibLTLIBRARIES:
-test -z "$(pkglib_LTLIBRARIES)" || rm -f $(pkglib_LTLIBRARIES) -$(am__rm_f) $(pkglib_LTLIBRARIES)
@list='$(pkglib_LTLIBRARIES)'; \ @list='$(pkglib_LTLIBRARIES)'; \
locs=`for p in $$list; do echo $$p; done | \ locs=`for p in $$list; do echo $$p; done | \
sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
sort -u`; \ sort -u`; \
test -z "$$locs" || { \ echo rm -f $${locs}; \
echo rm -f $${locs}; \ $(am__rm_f) $${locs}
rm -f $${locs}; \
}
libbaselinks.la: $(libbaselinks_la_OBJECTS) $(libbaselinks_la_DEPENDENCIES) $(EXTRA_libbaselinks_la_DEPENDENCIES) libbaselinks.la: $(libbaselinks_la_OBJECTS) $(libbaselinks_la_DEPENDENCIES) $(EXTRA_libbaselinks_la_DEPENDENCIES)
$(AM_V_CCLD)$(libbaselinks_la_LINK) -rpath $(pkglibdir) $(libbaselinks_la_OBJECTS) $(libbaselinks_la_LIBADD) $(LIBS) $(AM_V_CCLD)$(libbaselinks_la_LINK) -rpath $(pkglibdir) $(libbaselinks_la_OBJECTS) $(libbaselinks_la_LIBADD) $(LIBS)
@@ -596,7 +610,7 @@ distclean-compile:
$(am__depfiles_remade): $(am__depfiles_remade):
@$(MKDIR_P) $(@D) @$(MKDIR_P) $(@D)
@echo '# dummy' >$@-t && $(am__mv) $@-t $@ @: >>$@
am--depfiles: $(am__depfiles_remade) am--depfiles: $(am__depfiles_remade)
@@ -766,8 +780,8 @@ mostlyclean-generic:
clean-generic: clean-generic:
distclean-generic: distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -$(am__rm_f) $(CONFIG_CLEAN_FILES)
-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) -test . = "$(srcdir)" || $(am__rm_f) $(CONFIG_CLEAN_VPATH_FILES)
maintainer-clean-generic: maintainer-clean-generic:
@echo "This command is intended for maintainers to use" @echo "This command is intended for maintainers to use"
@@ -778,7 +792,7 @@ clean-am: clean-generic clean-libtool clean-pkglibLTLIBRARIES \
mostlyclean-am mostlyclean-am
distclean: distclean-am distclean: distclean-am
-rm -f ./$(DEPDIR)/callbacks-example-baselinks.Plo -rm -f ./$(DEPDIR)/callbacks-example-baselinks.Plo
-rm -f ./$(DEPDIR)/callbacks-example-changecontent.Plo -rm -f ./$(DEPDIR)/callbacks-example-changecontent.Plo
-rm -f ./$(DEPDIR)/callbacks-example-contentfilter.Plo -rm -f ./$(DEPDIR)/callbacks-example-contentfilter.Plo
-rm -f ./$(DEPDIR)/callbacks-example-displayheader.Plo -rm -f ./$(DEPDIR)/callbacks-example-displayheader.Plo
@@ -833,7 +847,7 @@ install-ps-am:
installcheck-am: installcheck-am:
maintainer-clean: maintainer-clean-am maintainer-clean: maintainer-clean-am
-rm -f ./$(DEPDIR)/callbacks-example-baselinks.Plo -rm -f ./$(DEPDIR)/callbacks-example-baselinks.Plo
-rm -f ./$(DEPDIR)/callbacks-example-changecontent.Plo -rm -f ./$(DEPDIR)/callbacks-example-changecontent.Plo
-rm -f ./$(DEPDIR)/callbacks-example-contentfilter.Plo -rm -f ./$(DEPDIR)/callbacks-example-contentfilter.Plo
-rm -f ./$(DEPDIR)/callbacks-example-displayheader.Plo -rm -f ./$(DEPDIR)/callbacks-example-displayheader.Plo
@@ -885,3 +899,10 @@ uninstall-am: uninstall-exemplesDATA uninstall-pkglibLTLIBRARIES
# Tell versions [3.59,3.63) of GNU make to not export all variables. # Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded. # Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT: .NOEXPORT:
# Tell GNU make to disable its built-in pattern rules.
%:: %,v
%:: RCS/%,v
%:: RCS/%
%:: s.%
%:: SCCS/s.%

749
ltmain.sh

File diff suppressed because it is too large Load Diff

View File

@@ -1 +1,3 @@
EXTRA_DIST = *.m4 # Glob against $(srcdir) so "make dist" works out-of-tree (a bare "*.m4" is
# resolved against the build dir, where there are no sources).
EXTRA_DIST = $(srcdir)/*.m4

View File

@@ -1,7 +1,7 @@
# Makefile.in generated by automake 1.16.5 from Makefile.am. # Makefile.in generated by automake 1.17 from Makefile.am.
# @configure_input@ # @configure_input@
# Copyright (C) 1994-2021 Free Software Foundation, Inc. # Copyright (C) 1994-2024 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation # This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it, # gives unlimited permission to copy and/or distribute it,
@@ -69,6 +69,8 @@ am__make_running_with_option = \
test $$has_opt = yes test $$has_opt = yes
am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_dryrun = (target_option=n; $(am__make_running_with_option))
am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
am__rm_f = rm -f $(am__rm_f_notfound)
am__rm_rf = rm -rf $(am__rm_f_notfound)
pkgdatadir = $(datadir)/@PACKAGE@ pkgdatadir = $(datadir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@
@@ -132,6 +134,7 @@ AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@ AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@ AUTOMAKE = @AUTOMAKE@
AWK = @AWK@ AWK = @AWK@
BASH = @BASH@
CC = @CC@ CC = @CC@
CCDEPMODE = @CCDEPMODE@ CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@ CFLAGS = @CFLAGS@
@@ -170,6 +173,7 @@ LD = @LD@
LDFLAGS = @LDFLAGS@ LDFLAGS = @LDFLAGS@
LDFLAGS_PIE = @LDFLAGS_PIE@ LDFLAGS_PIE = @LDFLAGS_PIE@
LFS_FLAG = @LFS_FLAG@ LFS_FLAG = @LFS_FLAG@
LIBC_FORCE_LINK = @LIBC_FORCE_LINK@
LIBOBJS = @LIBOBJS@ LIBOBJS = @LIBOBJS@
LIBS = @LIBS@ LIBS = @LIBS@
LIBTOOL = @LIBTOOL@ LIBTOOL = @LIBTOOL@
@@ -220,8 +224,10 @@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
am__include = @am__include@ am__include = @am__include@
am__leading_dot = @am__leading_dot@ am__leading_dot = @am__leading_dot@
am__quote = @am__quote@ am__quote = @am__quote@
am__rm_f_notfound = @am__rm_f_notfound@
am__tar = @am__tar@ am__tar = @am__tar@
am__untar = @am__untar@ am__untar = @am__untar@
am__xargs_n = @am__xargs_n@
bindir = @bindir@ bindir = @bindir@
build = @build@ build = @build@
build_alias = @build_alias@ build_alias = @build_alias@
@@ -263,7 +269,10 @@ target_alias = @target_alias@
top_build_prefix = @top_build_prefix@ top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@ top_builddir = @top_builddir@
top_srcdir = @top_srcdir@ top_srcdir = @top_srcdir@
EXTRA_DIST = *.m4
# Glob against $(srcdir) so "make dist" works out-of-tree (a bare "*.m4" is
# resolved against the build dir, where there are no sources).
EXTRA_DIST = $(srcdir)/*.m4
all: all-am all: all-am
.SUFFIXES: .SUFFIXES:
@@ -369,8 +378,8 @@ mostlyclean-generic:
clean-generic: clean-generic:
distclean-generic: distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -$(am__rm_f) $(CONFIG_CLEAN_FILES)
-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) -test . = "$(srcdir)" || $(am__rm_f) $(CONFIG_CLEAN_VPATH_FILES)
maintainer-clean-generic: maintainer-clean-generic:
@echo "This command is intended for maintainers to use" @echo "This command is intended for maintainers to use"
@@ -461,3 +470,10 @@ uninstall-am:
# Tell versions [3.59,3.63) of GNU make to not export all variables. # Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded. # Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT: .NOEXPORT:
# Tell GNU make to disable its built-in pattern rules.
%:: %,v
%:: RCS/%,v
%:: RCS/%
%:: s.%
%:: SCCS/s.%

View File

@@ -13,3 +13,9 @@ regen-man: makeman.sh $(top_builddir)/src/httrack$(EXEEXT)
README='$(top_srcdir)/README' $(SHELL) $(srcdir)/makeman.sh \ README='$(top_srcdir)/README' $(SHELL) $(srcdir)/makeman.sh \
'$(top_builddir)/src/httrack$(EXEEXT)' > $(srcdir)/httrack.1 '$(top_builddir)/src/httrack$(EXEEXT)' > $(srcdir)/httrack.1
.PHONY: regen-man .PHONY: regen-man
# Render html/httrack.man.html from httrack.1. Needs the groff html device
# (Debian: full "groff" package, not "groff-base"). Run by hand: make -C man regen-man-html
regen-man-html: httrack.1
groff -t -man -Thtml $(srcdir)/httrack.1 > $(top_srcdir)/html/httrack.man.html
.PHONY: regen-man-html

View File

@@ -1,7 +1,7 @@
# Makefile.in generated by automake 1.16.5 from Makefile.am. # Makefile.in generated by automake 1.17 from Makefile.am.
# @configure_input@ # @configure_input@
# Copyright (C) 1994-2021 Free Software Foundation, Inc. # Copyright (C) 1994-2024 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation # This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it, # gives unlimited permission to copy and/or distribute it,
@@ -69,6 +69,8 @@ am__make_running_with_option = \
test $$has_opt = yes test $$has_opt = yes
am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_dryrun = (target_option=n; $(am__make_running_with_option))
am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
am__rm_f = rm -f $(am__rm_f_notfound)
am__rm_rf = rm -rf $(am__rm_f_notfound)
pkgdatadir = $(datadir)/@PACKAGE@ pkgdatadir = $(datadir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@
@@ -142,10 +144,9 @@ am__base_list = \
sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
am__uninstall_files_from_dir = { \ am__uninstall_files_from_dir = { \
test -z "$$files" \ { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
|| { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
|| { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && echo $$files | $(am__xargs_n) 40 $(am__rm_f); }; \
$(am__cd) "$$dir" && rm -f $$files; }; \
} }
man1dir = $(mandir)/man1 man1dir = $(mandir)/man1
am__installdirs = "$(DESTDIR)$(man1dir)" am__installdirs = "$(DESTDIR)$(man1dir)"
@@ -163,6 +164,7 @@ AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@ AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@ AUTOMAKE = @AUTOMAKE@
AWK = @AWK@ AWK = @AWK@
BASH = @BASH@
CC = @CC@ CC = @CC@
CCDEPMODE = @CCDEPMODE@ CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@ CFLAGS = @CFLAGS@
@@ -201,6 +203,7 @@ LD = @LD@
LDFLAGS = @LDFLAGS@ LDFLAGS = @LDFLAGS@
LDFLAGS_PIE = @LDFLAGS_PIE@ LDFLAGS_PIE = @LDFLAGS_PIE@
LFS_FLAG = @LFS_FLAG@ LFS_FLAG = @LFS_FLAG@
LIBC_FORCE_LINK = @LIBC_FORCE_LINK@
LIBOBJS = @LIBOBJS@ LIBOBJS = @LIBOBJS@
LIBS = @LIBS@ LIBS = @LIBS@
LIBTOOL = @LIBTOOL@ LIBTOOL = @LIBTOOL@
@@ -251,8 +254,10 @@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
am__include = @am__include@ am__include = @am__include@
am__leading_dot = @am__leading_dot@ am__leading_dot = @am__leading_dot@
am__quote = @am__quote@ am__quote = @am__quote@
am__rm_f_notfound = @am__rm_f_notfound@
am__tar = @am__tar@ am__tar = @am__tar@
am__untar = @am__untar@ am__untar = @am__untar@
am__xargs_n = @am__xargs_n@
bindir = @bindir@ bindir = @bindir@
build = @build@ build = @build@
build_alias = @build_alias@ build_alias = @build_alias@
@@ -449,8 +454,8 @@ mostlyclean-generic:
clean-generic: clean-generic:
distclean-generic: distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -$(am__rm_f) $(CONFIG_CLEAN_FILES)
-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) -test . = "$(srcdir)" || $(am__rm_f) $(CONFIG_CLEAN_VPATH_FILES)
maintainer-clean-generic: maintainer-clean-generic:
@echo "This command is intended for maintainers to use" @echo "This command is intended for maintainers to use"
@@ -551,6 +556,19 @@ regen-man: makeman.sh $(top_builddir)/src/httrack$(EXEEXT)
'$(top_builddir)/src/httrack$(EXEEXT)' > $(srcdir)/httrack.1 '$(top_builddir)/src/httrack$(EXEEXT)' > $(srcdir)/httrack.1
.PHONY: regen-man .PHONY: regen-man
# Render html/httrack.man.html from httrack.1. Needs the groff html device
# (Debian: full "groff" package, not "groff-base"). Run by hand: make -C man regen-man-html
regen-man-html: httrack.1
groff -t -man -Thtml $(srcdir)/httrack.1 > $(top_srcdir)/html/httrack.man.html
.PHONY: regen-man-html
# Tell versions [3.59,3.63) of GNU make to not export all variables. # Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded. # Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT: .NOEXPORT:
# Tell GNU make to disable its built-in pattern rules.
%:: %,v
%:: RCS/%,v
%:: RCS/%
%:: s.%
%:: SCCS/s.%

View File

@@ -1,6 +1,7 @@
.\" Process this file with .\" Process this file with
.\" groff -man -Tascii htsserver.1 .\" groff -man -Tascii htsserver.1
.\" .\"
.\" SPDX-License-Identifier: GPL-3.0-or-later
.TH htsserver 1 "Mar 2003" "httrack website copier" .TH htsserver 1 "Mar 2003" "httrack website copier"
.SH NAME .SH NAME
htsserver \- offline browser server : copy websites to a local directory htsserver \- offline browser server : copy websites to a local directory
@@ -35,7 +36,7 @@ Please reports bugs to
.B <bugs@httrack.com>. .B <bugs@httrack.com>.
Include a complete, self-contained example that will allow the bug to be reproduced, and say which version of (web)httrack you are using. Do not forget to detail options used, OS version, and any other information you deem necessary. Include a complete, self-contained example that will allow the bug to be reproduced, and say which version of (web)httrack you are using. Do not forget to detail options used, OS version, and any other information you deem necessary.
.SH COPYRIGHT .SH COPYRIGHT
Copyright (C) 1998-2013 Xavier Roche and other contributors Copyright (C) 1998-2026 Xavier Roche and other contributors
This program is free software: you can redistribute it and/or modify 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 it under the terms of the GNU General Public License as published by

View File

@@ -2,7 +2,8 @@
.\" groff -man -Tascii httrack.1 .\" groff -man -Tascii httrack.1
.\" .\"
.\" This file is generated by man/makeman.sh; do not edit by hand. .\" This file is generated by man/makeman.sh; do not edit by hand.
.TH httrack 1 "07 June 2026" "httrack website copier" .\" SPDX-License-Identifier: GPL-3.0-or-later
.TH httrack 1 "13 June 2026" "httrack website copier"
.SH NAME .SH NAME
httrack \- offline browser : copy websites to a local directory httrack \- offline browser : copy websites to a local directory
.SH SYNOPSIS .SH SYNOPSIS
@@ -98,15 +99,15 @@ httrack \- offline browser : copy websites to a local directory
allows you to download a World Wide Web site from the Internet to a local directory, building recursively all directories, getting HTML, images, and other files from the server to your computer. HTTrack arranges the original site's relative link-structure. Simply open a page of the "mirrored" website in your browser, and you can browse the site from link to link, as if you were viewing it online. HTTrack can also update an existing mirrored site, and resume interrupted downloads. allows you to download a World Wide Web site from the Internet to a local directory, building recursively all directories, getting HTML, images, and other files from the server to your computer. HTTrack arranges the original site's relative link-structure. Simply open a page of the "mirrored" website in your browser, and you can browse the site from link to link, as if you were viewing it online. HTTrack can also update an existing mirrored site, and resume interrupted downloads.
.SH EXAMPLES .SH EXAMPLES
.TP .TP
.B httrack www.someweb.com/bob/ .B httrack www.example.com/bob/
mirror site www.someweb.com/bob/ and only this site mirror site www.example.com/bob/ and only this site
.TP .TP
.B httrack www.someweb.com/bob/ www.anothertest.com/mike/ +*.com/*.jpg \-mime:application/* .B httrack www.example.com/bob/ www.anothertest.com/mike/ +*.com/*.jpg \-mime:application/*
mirror the two sites together (with shared links) and accept any .jpg files on .com sites mirror the two sites together (with shared links) and accept any .jpg files on .com sites
.TP .TP
.B httrack www.someweb.com/bob/bobby.html +* \-r6 .B httrack www.example.com/bob/bobby.html +* \-r6
.TP .TP
.B httrack www.someweb.com/bob/bobby.html \-\-spider \-P proxy.myhost.com:8080 .B httrack www.example.com/bob/bobby.html \-\-spider \-P proxy.myhost.com:8080
.TP .TP
.B httrack \-\-update .B httrack \-\-update
.TP .TP
@@ -244,7 +245,7 @@ from email address sent in HTTP headers (\-\-from <param>)
.IP \-%F .IP \-%F
footer string in Html code (\-%F "Mirrored [from host %s [file %s [at %s]]]" (\-\-footer <param>) footer string in Html code (\-%F "Mirrored [from host %s [file %s [at %s]]]" (\-\-footer <param>)
.IP \-%l .IP \-%l
preffered language (\-%l "fr, en, jp, *" (\-\-language <param>) preferred language (\-%l "fr, en, jp, *" (\-\-language <param>)
.IP \-%a .IP \-%a
accepted formats (\-%a "text/html,image/png;q=0.9,*/*;q=0.1" (\-\-accept <param>) accepted formats (\-%a "text/html,image/png;q=0.9,*/*;q=0.1" (\-\-accept <param>)
.IP \-%X .IP \-%X
@@ -411,7 +412,7 @@ File type (ex: gif)
.IP \-%p .IP \-%p
Path [without ending /] (ex: /someimages) Path [without ending /] (ex: /someimages)
.IP \-%h .IP \-%h
Host name (ex: www.someweb.com) Host name (ex: www.example.com)
.IP \-%M .IP \-%M
URL MD5 (128 bits, 32 ascii bytes) URL MD5 (128 bits, 32 ascii bytes)
.IP \-%Q .IP \-%Q

View File

@@ -110,6 +110,7 @@ cat <<'EOF'
.\" groff -man -Tascii httrack.1 .\" groff -man -Tascii httrack.1
.\" .\"
.\" This file is generated by man/makeman.sh; do not edit by hand. .\" This file is generated by man/makeman.sh; do not edit by hand.
.\" SPDX-License-Identifier: GPL-3.0-or-later
EOF EOF
printf '.TH httrack 1 "%s" "httrack website copier"\n' "$date_str" printf '.TH httrack 1 "%s" "httrack website copier"\n' "$date_str"
cat <<'EOF' cat <<'EOF'

View File

@@ -1,6 +1,7 @@
.\" Process this file with .\" Process this file with
.\" groff -man -Tascii proxytrack.1 .\" groff -man -Tascii proxytrack.1
.\" .\"
.\" SPDX-License-Identifier: GPL-3.0-or-later
.TH proxytrack 1 "Mar 2003" "httrack website copier" .TH proxytrack 1 "Mar 2003" "httrack website copier"
.SH NAME .SH NAME
proxytrack \- proxy to serve content archived by httrack website copier proxytrack \- proxy to serve content archived by httrack website copier
@@ -25,7 +26,7 @@ Please reports bugs to
.B <bugs@httrack.com>. .B <bugs@httrack.com>.
Include a complete, self-contained example that will allow the bug to be reproduced, and say which version of (web)httrack you are using. Do not forget to detail options used, OS version, and any other information you deem necessary. Include a complete, self-contained example that will allow the bug to be reproduced, and say which version of (web)httrack you are using. Do not forget to detail options used, OS version, and any other information you deem necessary.
.SH COPYRIGHT .SH COPYRIGHT
Copyright (C) 1998-2013 Xavier Roche and other contributors Copyright (C) 1998-2026 Xavier Roche and other contributors
This program is free software: you can redistribute it and/or modify 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 it under the terms of the GNU General Public License as published by

View File

@@ -1,6 +1,7 @@
.\" Process this file with .\" Process this file with
.\" groff -man -Tascii webhttrack.1 .\" groff -man -Tascii webhttrack.1
.\" .\"
.\" SPDX-License-Identifier: GPL-3.0-or-later
.TH webhttrack 1 "Mar 2003" "httrack website copier" .TH webhttrack 1 "Mar 2003" "httrack website copier"
.SH NAME .SH NAME
webhttrack \- offline browser : copy websites to a local directory webhttrack \- offline browser : copy websites to a local directory
@@ -36,7 +37,7 @@ Please reports bugs to
.B <bugs@httrack.com>. .B <bugs@httrack.com>.
Include a complete, self-contained example that will allow the bug to be reproduced, and say which version of (web)httrack you are using. Do not forget to detail options used, OS version, and any other information you deem necessary. Include a complete, self-contained example that will allow the bug to be reproduced, and say which version of (web)httrack you are using. Do not forget to detail options used, OS version, and any other information you deem necessary.
.SH COPYRIGHT .SH COPYRIGHT
Copyright (C) 1998-2013 Xavier Roche and other contributors Copyright (C) 1998-2026 Xavier Roche and other contributors
This program is free software: you can redistribute it and/or modify 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 it under the terms of the GNU General Public License as published by

75
missing
View File

@@ -1,9 +1,11 @@
#! /bin/sh #! /bin/sh
# Common wrapper for a few potentially missing GNU programs. # Common wrapper for a few potentially missing GNU and other programs.
scriptversion=2018-03-07.03; # UTC scriptversion=2024-06-07.14; # UTC
# Copyright (C) 1996-2021 Free Software Foundation, Inc. # shellcheck disable=SC2006,SC2268 # we must support pre-POSIX shells
# Copyright (C) 1996-2024 Free Software Foundation, Inc.
# Originally written by Fran,cois Pinard <pinard@iro.umontreal.ca>, 1996. # Originally written by Fran,cois Pinard <pinard@iro.umontreal.ca>, 1996.
# This program is free software; you can redistribute it and/or modify # This program is free software; you can redistribute it and/or modify
@@ -54,18 +56,20 @@ Options:
-v, --version output version information and exit -v, --version output version information and exit
Supported PROGRAM values: Supported PROGRAM values:
aclocal autoconf autoheader autom4te automake makeinfo aclocal autoconf autogen autoheader autom4te automake autoreconf
bison yacc flex lex help2man bison flex help2man lex makeinfo perl yacc
Version suffixes to PROGRAM as well as the prefixes 'gnu-', 'gnu', and Version suffixes to PROGRAM as well as the prefixes 'gnu-', 'gnu', and
'g' are ignored when checking the name. 'g' are ignored when checking the name.
Send bug reports to <bug-automake@gnu.org>." Report bugs to <bug-automake@gnu.org>.
GNU Automake home page: <https://www.gnu.org/software/automake/>.
General help using GNU software: <https://www.gnu.org/gethelp/>."
exit $? exit $?
;; ;;
-v|--v|--ve|--ver|--vers|--versi|--versio|--version) -v|--v|--ve|--ver|--vers|--versi|--versio|--version)
echo "missing $scriptversion (GNU Automake)" echo "missing (GNU Automake) $scriptversion"
exit $? exit $?
;; ;;
@@ -108,7 +112,7 @@ gnu_software_URL=https://www.gnu.org/software
program_details () program_details ()
{ {
case $1 in case $1 in
aclocal|automake) aclocal|automake|autoreconf)
echo "The '$1' program is part of the GNU Automake package:" echo "The '$1' program is part of the GNU Automake package:"
echo "<$gnu_software_URL/automake>" echo "<$gnu_software_URL/automake>"
echo "It also requires GNU Autoconf, GNU m4 and Perl in order to run:" echo "It also requires GNU Autoconf, GNU m4 and Perl in order to run:"
@@ -123,6 +127,9 @@ program_details ()
echo "<$gnu_software_URL/m4/>" echo "<$gnu_software_URL/m4/>"
echo "<$perl_URL>" echo "<$perl_URL>"
;; ;;
*)
:
;;
esac esac
} }
@@ -137,48 +144,55 @@ give_advice ()
printf '%s\n' "'$1' is $msg." printf '%s\n' "'$1' is $msg."
configure_deps="'configure.ac' or m4 files included by 'configure.ac'" configure_deps="'configure.ac' or m4 files included by 'configure.ac'"
autoheader_deps="'acconfig.h'"
automake_deps="'Makefile.am'"
aclocal_deps="'acinclude.m4'"
case $normalized_program in case $normalized_program in
aclocal*)
echo "You should only need it if you modified $aclocal_deps or"
echo "$configure_deps."
;;
autoconf*) autoconf*)
echo "You should only need it if you modified 'configure.ac'," echo "You should only need it if you modified $configure_deps."
echo "or m4 files included by it." ;;
program_details 'autoconf' autogen*)
echo "You should only need it if you modified a '.def' or '.tpl' file."
echo "You may want to install the GNU AutoGen package:"
echo "<$gnu_software_URL/autogen/>"
;; ;;
autoheader*) autoheader*)
echo "You should only need it if you modified 'acconfig.h' or" echo "You should only need it if you modified $autoheader_deps or"
echo "$configure_deps." echo "$configure_deps."
program_details 'autoheader'
;; ;;
automake*) automake*)
echo "You should only need it if you modified 'Makefile.am' or" echo "You should only need it if you modified $automake_deps or"
echo "$configure_deps." echo "$configure_deps."
program_details 'automake'
;; ;;
aclocal*) autom4te*)
echo "You should only need it if you modified 'acinclude.m4' or"
echo "$configure_deps."
program_details 'aclocal'
;;
autom4te*)
echo "You might have modified some maintainer files that require" echo "You might have modified some maintainer files that require"
echo "the 'autom4te' program to be rebuilt." echo "the 'autom4te' program to be rebuilt."
program_details 'autom4te' ;;
autoreconf*)
echo "You should only need it if you modified $aclocal_deps or"
echo "$automake_deps or $autoheader_deps or $automake_deps or"
echo "$configure_deps."
;; ;;
bison*|yacc*) bison*|yacc*)
echo "You should only need it if you modified a '.y' file." echo "You should only need it if you modified a '.y' file."
echo "You may want to install the GNU Bison package:" echo "You may want to install the GNU Bison package:"
echo "<$gnu_software_URL/bison/>" echo "<$gnu_software_URL/bison/>"
;; ;;
lex*|flex*)
echo "You should only need it if you modified a '.l' file."
echo "You may want to install the Fast Lexical Analyzer package:"
echo "<$flex_URL>"
;;
help2man*) help2man*)
echo "You should only need it if you modified a dependency" \ echo "You should only need it if you modified a dependency" \
"of a man page." "of a man page."
echo "You may want to install the GNU Help2man package:" echo "You may want to install the GNU Help2man package:"
echo "<$gnu_software_URL/help2man/>" echo "<$gnu_software_URL/help2man/>"
;; ;;
lex*|flex*)
echo "You should only need it if you modified a '.l' file."
echo "You may want to install the Fast Lexical Analyzer package:"
echo "<$flex_URL>"
;;
makeinfo*) makeinfo*)
echo "You should only need it if you modified a '.texi' file, or" echo "You should only need it if you modified a '.texi' file, or"
echo "any other file indirectly affecting the aspect of the manual." echo "any other file indirectly affecting the aspect of the manual."
@@ -189,6 +203,12 @@ give_advice ()
echo "want to install GNU make:" echo "want to install GNU make:"
echo "<$gnu_software_URL/make/>" echo "<$gnu_software_URL/make/>"
;; ;;
perl*)
echo "You should only need it to run GNU Autoconf, GNU Automake, "
echo " assorted other tools, or if you modified a Perl source file."
echo "You may want to install the Perl 5 language interpreter:"
echo "<$perl_URL>"
;;
*) *)
echo "You might have modified some files without having the proper" echo "You might have modified some files without having the proper"
echo "tools for further handling them. Check the 'README' file, it" echo "tools for further handling them. Check the 'README' file, it"
@@ -197,6 +217,7 @@ give_advice ()
echo "case some other package contains this missing '$1' program." echo "case some other package contains this missing '$1' program."
;; ;;
esac esac
program_details "$normalized_program"
} }
give_advice "$1" | sed -e '1s/^/WARNING: /' \ give_advice "$1" | sed -e '1s/^/WARNING: /' \

View File

@@ -56,6 +56,7 @@ whttrackrundir = $(bindir)
whttrackrun_SCRIPTS = webhttrack whttrackrun_SCRIPTS = webhttrack
libhttrack_la_SOURCES = htscore.c htsparse.c htsback.c htscache.c \ libhttrack_la_SOURCES = htscore.c htsparse.c htsback.c htscache.c \
htscache_selftest.c \
htscatchurl.c htsfilters.c htsftp.c htshash.c coucal/coucal.c \ htscatchurl.c htsfilters.c htsftp.c htshash.c coucal/coucal.c \
htshelp.c htslib.c htscoremain.c \ htshelp.c htslib.c htscoremain.c \
htsname.c htsrobots.c htstools.c htswizard.c \ htsname.c htsrobots.c htstools.c htswizard.c \
@@ -65,7 +66,7 @@ libhttrack_la_SOURCES = htscore.c htsparse.c htsback.c htscache.c \
md5.c \ md5.c \
minizip/ioapi.c minizip/mztools.c minizip/unzip.c minizip/zip.c \ minizip/ioapi.c minizip/mztools.c minizip/unzip.c minizip/zip.c \
hts-indextmpl.h htsalias.h htsback.h htsbase.h htssafe.h \ hts-indextmpl.h htsalias.h htsback.h htsbase.h htssafe.h \
htsbasenet.h htsbauth.h htscache.h htscatchurl.h \ htsbasenet.h htsbauth.h htscache.h htscache_selftest.h htscatchurl.h \
htsconfig.h htscore.h htsparse.h htscoremain.h htsdefines.h \ htsconfig.h htscore.h htsparse.h htscoremain.h htsdefines.h \
htsfilters.h htsftp.h htsglobal.h htshash.h coucal/coucal.h \ htsfilters.h htsftp.h htsglobal.h htshash.h coucal/coucal.h \
htshelp.h htsindex.h htslib.h htsmd5.h \ htshelp.h htsindex.h htslib.h htsmd5.h \
@@ -83,7 +84,11 @@ libhttrack_la_LDFLAGS = $(AM_LDFLAGS) -version-info $(VERSION_INFO)
libhtsjava_la_SOURCES = htsjava.c htsjava.h libhtsjava_la_SOURCES = htsjava.c htsjava.h
libhtsjava_la_LIBADD = $(THREADS_LIBS) $(DL_LIBS) libhttrack.la libhtsjava_la_LIBADD = $(THREADS_LIBS) $(DL_LIBS) libhttrack.la
libhtsjava_la_LDFLAGS = $(AM_LDFLAGS) -version-info $(VERSION_INFO) # This thin JNI wrapper reaches libc only through libhttrack, so the direct
# libc edge is dropped from DT_NEEDED (library-not-linked-against-libc). Force
# libc back as a dependency; configure gates the flag since only a GNU-style
# linker accepts it (LIBC_FORCE_LINK is empty on e.g. macOS).
libhtsjava_la_LDFLAGS = $(AM_LDFLAGS) -version-info $(VERSION_INFO) $(LIBC_FORCE_LINK)
EXTRA_DIST = httrack.h webhttrack \ EXTRA_DIST = httrack.h webhttrack \
coucal/murmurhash3.h.diff \ coucal/murmurhash3.h.diff \

View File

@@ -1,7 +1,7 @@
# Makefile.in generated by automake 1.16.5 from Makefile.am. # Makefile.in generated by automake 1.17 from Makefile.am.
# @configure_input@ # @configure_input@
# Copyright (C) 1994-2021 Free Software Foundation, Inc. # Copyright (C) 1994-2024 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation # This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it, # gives unlimited permission to copy and/or distribute it,
@@ -73,6 +73,8 @@ am__make_running_with_option = \
test $$has_opt = yes test $$has_opt = yes
am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_dryrun = (target_option=n; $(am__make_running_with_option))
am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
am__rm_f = rm -f $(am__rm_f_notfound)
am__rm_rf = rm -rf $(am__rm_f_notfound)
pkgdatadir = $(datadir)/@PACKAGE@ pkgdatadir = $(datadir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@
@@ -131,10 +133,9 @@ am__base_list = \
sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
am__uninstall_files_from_dir = { \ am__uninstall_files_from_dir = { \
test -z "$$files" \ { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
|| { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
|| { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && echo $$files | $(am__xargs_n) 40 $(am__rm_f); }; \
$(am__cd) "$$dir" && rm -f $$files; }; \
} }
LTLIBRARIES = $(lib_LTLIBRARIES) LTLIBRARIES = $(lib_LTLIBRARIES)
am__DEPENDENCIES_1 = am__DEPENDENCIES_1 =
@@ -155,20 +156,20 @@ libhttrack_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \
am__dirstamp = $(am__leading_dot)dirstamp am__dirstamp = $(am__leading_dot)dirstamp
am_libhttrack_la_OBJECTS = libhttrack_la-htscore.lo \ am_libhttrack_la_OBJECTS = libhttrack_la-htscore.lo \
libhttrack_la-htsparse.lo libhttrack_la-htsback.lo \ libhttrack_la-htsparse.lo libhttrack_la-htsback.lo \
libhttrack_la-htscache.lo libhttrack_la-htscatchurl.lo \ libhttrack_la-htscache.lo libhttrack_la-htscache_selftest.lo \
libhttrack_la-htsfilters.lo libhttrack_la-htsftp.lo \ libhttrack_la-htscatchurl.lo libhttrack_la-htsfilters.lo \
libhttrack_la-htshash.lo coucal/libhttrack_la-coucal.lo \ libhttrack_la-htsftp.lo libhttrack_la-htshash.lo \
libhttrack_la-htshelp.lo libhttrack_la-htslib.lo \ coucal/libhttrack_la-coucal.lo libhttrack_la-htshelp.lo \
libhttrack_la-htscoremain.lo libhttrack_la-htsname.lo \ libhttrack_la-htslib.lo libhttrack_la-htscoremain.lo \
libhttrack_la-htsrobots.lo libhttrack_la-htstools.lo \ libhttrack_la-htsname.lo libhttrack_la-htsrobots.lo \
libhttrack_la-htswizard.lo libhttrack_la-htsalias.lo \ libhttrack_la-htstools.lo libhttrack_la-htswizard.lo \
libhttrack_la-htsthread.lo libhttrack_la-htsindex.lo \ libhttrack_la-htsalias.lo libhttrack_la-htsthread.lo \
libhttrack_la-htsbauth.lo libhttrack_la-htsmd5.lo \ libhttrack_la-htsindex.lo libhttrack_la-htsbauth.lo \
libhttrack_la-htszlib.lo libhttrack_la-htswrap.lo \ libhttrack_la-htsmd5.lo libhttrack_la-htszlib.lo \
libhttrack_la-htsconcat.lo libhttrack_la-htsmodules.lo \ libhttrack_la-htswrap.lo libhttrack_la-htsconcat.lo \
libhttrack_la-htscharset.lo libhttrack_la-punycode.lo \ libhttrack_la-htsmodules.lo libhttrack_la-htscharset.lo \
libhttrack_la-htsencoding.lo libhttrack_la-md5.lo \ libhttrack_la-punycode.lo libhttrack_la-htsencoding.lo \
minizip/libhttrack_la-ioapi.lo \ libhttrack_la-md5.lo minizip/libhttrack_la-ioapi.lo \
minizip/libhttrack_la-mztools.lo \ minizip/libhttrack_la-mztools.lo \
minizip/libhttrack_la-unzip.lo minizip/libhttrack_la-zip.lo minizip/libhttrack_la-unzip.lo minizip/libhttrack_la-zip.lo
libhttrack_la_OBJECTS = $(am_libhttrack_la_OBJECTS) libhttrack_la_OBJECTS = $(am_libhttrack_la_OBJECTS)
@@ -225,6 +226,7 @@ am__depfiles_remade = ./$(DEPDIR)/htsjava.Plo \
./$(DEPDIR)/libhttrack_la-htsback.Plo \ ./$(DEPDIR)/libhttrack_la-htsback.Plo \
./$(DEPDIR)/libhttrack_la-htsbauth.Plo \ ./$(DEPDIR)/libhttrack_la-htsbauth.Plo \
./$(DEPDIR)/libhttrack_la-htscache.Plo \ ./$(DEPDIR)/libhttrack_la-htscache.Plo \
./$(DEPDIR)/libhttrack_la-htscache_selftest.Plo \
./$(DEPDIR)/libhttrack_la-htscatchurl.Plo \ ./$(DEPDIR)/libhttrack_la-htscatchurl.Plo \
./$(DEPDIR)/libhttrack_la-htscharset.Plo \ ./$(DEPDIR)/libhttrack_la-htscharset.Plo \
./$(DEPDIR)/libhttrack_la-htsconcat.Plo \ ./$(DEPDIR)/libhttrack_la-htsconcat.Plo \
@@ -320,6 +322,7 @@ AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@ AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@ AUTOMAKE = @AUTOMAKE@
AWK = @AWK@ AWK = @AWK@
BASH = @BASH@
CC = @CC@ CC = @CC@
CCDEPMODE = @CCDEPMODE@ CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@ CFLAGS = @CFLAGS@
@@ -358,6 +361,7 @@ LD = @LD@
LDFLAGS = @LDFLAGS@ LDFLAGS = @LDFLAGS@
LDFLAGS_PIE = @LDFLAGS_PIE@ LDFLAGS_PIE = @LDFLAGS_PIE@
LFS_FLAG = @LFS_FLAG@ LFS_FLAG = @LFS_FLAG@
LIBC_FORCE_LINK = @LIBC_FORCE_LINK@
LIBOBJS = @LIBOBJS@ LIBOBJS = @LIBOBJS@
LIBS = @LIBS@ LIBS = @LIBS@
LIBTOOL = @LIBTOOL@ LIBTOOL = @LIBTOOL@
@@ -408,8 +412,10 @@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
am__include = @am__include@ am__include = @am__include@
am__leading_dot = @am__leading_dot@ am__leading_dot = @am__leading_dot@
am__quote = @am__quote@ am__quote = @am__quote@
am__rm_f_notfound = @am__rm_f_notfound@
am__tar = @am__tar@ am__tar = @am__tar@
am__untar = @am__untar@ am__untar = @am__untar@
am__xargs_n = @am__xargs_n@
bindir = @bindir@ bindir = @bindir@
build = @build@ build = @build@
build_alias = @build_alias@ build_alias = @build_alias@
@@ -502,6 +508,7 @@ proxytrack_SOURCES = proxy/main.c \
whttrackrundir = $(bindir) whttrackrundir = $(bindir)
whttrackrun_SCRIPTS = webhttrack whttrackrun_SCRIPTS = webhttrack
libhttrack_la_SOURCES = htscore.c htsparse.c htsback.c htscache.c \ libhttrack_la_SOURCES = htscore.c htsparse.c htsback.c htscache.c \
htscache_selftest.c \
htscatchurl.c htsfilters.c htsftp.c htshash.c coucal/coucal.c \ htscatchurl.c htsfilters.c htsftp.c htshash.c coucal/coucal.c \
htshelp.c htslib.c htscoremain.c \ htshelp.c htslib.c htscoremain.c \
htsname.c htsrobots.c htstools.c htswizard.c \ htsname.c htsrobots.c htstools.c htswizard.c \
@@ -511,7 +518,7 @@ libhttrack_la_SOURCES = htscore.c htsparse.c htsback.c htscache.c \
md5.c \ md5.c \
minizip/ioapi.c minizip/mztools.c minizip/unzip.c minizip/zip.c \ minizip/ioapi.c minizip/mztools.c minizip/unzip.c minizip/zip.c \
hts-indextmpl.h htsalias.h htsback.h htsbase.h htssafe.h \ hts-indextmpl.h htsalias.h htsback.h htsbase.h htssafe.h \
htsbasenet.h htsbauth.h htscache.h htscatchurl.h \ htsbasenet.h htsbauth.h htscache.h htscache_selftest.h htscatchurl.h \
htsconfig.h htscore.h htsparse.h htscoremain.h htsdefines.h \ htsconfig.h htscore.h htsparse.h htscoremain.h htsdefines.h \
htsfilters.h htsftp.h htsglobal.h htshash.h coucal/coucal.h \ htsfilters.h htsftp.h htsglobal.h htshash.h coucal/coucal.h \
htshelp.h htsindex.h htslib.h htsmd5.h \ htshelp.h htsindex.h htslib.h htsmd5.h \
@@ -529,7 +536,11 @@ libhttrack_la_CFLAGS = $(AM_CFLAGS) -DLIBHTTRACK_EXPORTS -DZLIB_CONST
libhttrack_la_LDFLAGS = $(AM_LDFLAGS) -version-info $(VERSION_INFO) libhttrack_la_LDFLAGS = $(AM_LDFLAGS) -version-info $(VERSION_INFO)
libhtsjava_la_SOURCES = htsjava.c htsjava.h libhtsjava_la_SOURCES = htsjava.c htsjava.h
libhtsjava_la_LIBADD = $(THREADS_LIBS) $(DL_LIBS) libhttrack.la libhtsjava_la_LIBADD = $(THREADS_LIBS) $(DL_LIBS) libhttrack.la
libhtsjava_la_LDFLAGS = $(AM_LDFLAGS) -version-info $(VERSION_INFO) # This thin JNI wrapper reaches libc only through libhttrack, so the direct
# libc edge is dropped from DT_NEEDED (library-not-linked-against-libc). Force
# libc back as a dependency; configure gates the flag since only a GNU-style
# linker accepts it (LIBC_FORCE_LINK is empty on e.g. macOS).
libhtsjava_la_LDFLAGS = $(AM_LDFLAGS) -version-info $(VERSION_INFO) $(LIBC_FORCE_LINK)
EXTRA_DIST = httrack.h webhttrack \ EXTRA_DIST = httrack.h webhttrack \
coucal/murmurhash3.h.diff \ coucal/murmurhash3.h.diff \
coucal/murmurhash3.h.orig \ coucal/murmurhash3.h.orig \
@@ -629,16 +640,11 @@ uninstall-binPROGRAMS:
`; \ `; \
test -n "$$list" || exit 0; \ test -n "$$list" || exit 0; \
echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \
cd "$(DESTDIR)$(bindir)" && rm -f $$files cd "$(DESTDIR)$(bindir)" && $(am__rm_f) $$files
clean-binPROGRAMS: clean-binPROGRAMS:
@list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ $(am__rm_f) $(bin_PROGRAMS)
echo " rm -f" $$list; \ test -z "$(EXEEXT)" || $(am__rm_f) $(bin_PROGRAMS:$(EXEEXT)=)
rm -f $$list || exit $$?; \
test -n "$(EXEEXT)" || exit 0; \
list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
echo " rm -f" $$list; \
rm -f $$list
install-libLTLIBRARIES: $(lib_LTLIBRARIES) install-libLTLIBRARIES: $(lib_LTLIBRARIES)
@$(NORMAL_INSTALL) @$(NORMAL_INSTALL)
@@ -665,32 +671,30 @@ uninstall-libLTLIBRARIES:
done done
clean-libLTLIBRARIES: clean-libLTLIBRARIES:
-test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) -$(am__rm_f) $(lib_LTLIBRARIES)
@list='$(lib_LTLIBRARIES)'; \ @list='$(lib_LTLIBRARIES)'; \
locs=`for p in $$list; do echo $$p; done | \ locs=`for p in $$list; do echo $$p; done | \
sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
sort -u`; \ sort -u`; \
test -z "$$locs" || { \ echo rm -f $${locs}; \
echo rm -f $${locs}; \ $(am__rm_f) $${locs}
rm -f $${locs}; \
}
libhtsjava.la: $(libhtsjava_la_OBJECTS) $(libhtsjava_la_DEPENDENCIES) $(EXTRA_libhtsjava_la_DEPENDENCIES) libhtsjava.la: $(libhtsjava_la_OBJECTS) $(libhtsjava_la_DEPENDENCIES) $(EXTRA_libhtsjava_la_DEPENDENCIES)
$(AM_V_CCLD)$(libhtsjava_la_LINK) -rpath $(libdir) $(libhtsjava_la_OBJECTS) $(libhtsjava_la_LIBADD) $(LIBS) $(AM_V_CCLD)$(libhtsjava_la_LINK) -rpath $(libdir) $(libhtsjava_la_OBJECTS) $(libhtsjava_la_LIBADD) $(LIBS)
coucal/$(am__dirstamp): coucal/$(am__dirstamp):
@$(MKDIR_P) coucal @$(MKDIR_P) coucal
@: > coucal/$(am__dirstamp) @: >>coucal/$(am__dirstamp)
coucal/$(DEPDIR)/$(am__dirstamp): coucal/$(DEPDIR)/$(am__dirstamp):
@$(MKDIR_P) coucal/$(DEPDIR) @$(MKDIR_P) coucal/$(DEPDIR)
@: > coucal/$(DEPDIR)/$(am__dirstamp) @: >>coucal/$(DEPDIR)/$(am__dirstamp)
coucal/libhttrack_la-coucal.lo: coucal/$(am__dirstamp) \ coucal/libhttrack_la-coucal.lo: coucal/$(am__dirstamp) \
coucal/$(DEPDIR)/$(am__dirstamp) coucal/$(DEPDIR)/$(am__dirstamp)
minizip/$(am__dirstamp): minizip/$(am__dirstamp):
@$(MKDIR_P) minizip @$(MKDIR_P) minizip
@: > minizip/$(am__dirstamp) @: >>minizip/$(am__dirstamp)
minizip/$(DEPDIR)/$(am__dirstamp): minizip/$(DEPDIR)/$(am__dirstamp):
@$(MKDIR_P) minizip/$(DEPDIR) @$(MKDIR_P) minizip/$(DEPDIR)
@: > minizip/$(DEPDIR)/$(am__dirstamp) @: >>minizip/$(DEPDIR)/$(am__dirstamp)
minizip/libhttrack_la-ioapi.lo: minizip/$(am__dirstamp) \ minizip/libhttrack_la-ioapi.lo: minizip/$(am__dirstamp) \
minizip/$(DEPDIR)/$(am__dirstamp) minizip/$(DEPDIR)/$(am__dirstamp)
minizip/libhttrack_la-mztools.lo: minizip/$(am__dirstamp) \ minizip/libhttrack_la-mztools.lo: minizip/$(am__dirstamp) \
@@ -712,10 +716,10 @@ httrack$(EXEEXT): $(httrack_OBJECTS) $(httrack_DEPENDENCIES) $(EXTRA_httrack_DEP
$(AM_V_CCLD)$(httrack_LINK) $(httrack_OBJECTS) $(httrack_LDADD) $(LIBS) $(AM_V_CCLD)$(httrack_LINK) $(httrack_OBJECTS) $(httrack_LDADD) $(LIBS)
proxy/$(am__dirstamp): proxy/$(am__dirstamp):
@$(MKDIR_P) proxy @$(MKDIR_P) proxy
@: > proxy/$(am__dirstamp) @: >>proxy/$(am__dirstamp)
proxy/$(DEPDIR)/$(am__dirstamp): proxy/$(DEPDIR)/$(am__dirstamp):
@$(MKDIR_P) proxy/$(DEPDIR) @$(MKDIR_P) proxy/$(DEPDIR)
@: > proxy/$(DEPDIR)/$(am__dirstamp) @: >>proxy/$(DEPDIR)/$(am__dirstamp)
proxy/proxytrack-main.$(OBJEXT): proxy/$(am__dirstamp) \ proxy/proxytrack-main.$(OBJEXT): proxy/$(am__dirstamp) \
proxy/$(DEPDIR)/$(am__dirstamp) proxy/$(DEPDIR)/$(am__dirstamp)
proxy/proxytrack-proxytrack.$(OBJEXT): proxy/$(am__dirstamp) \ proxy/proxytrack-proxytrack.$(OBJEXT): proxy/$(am__dirstamp) \
@@ -791,6 +795,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhttrack_la-htsback.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhttrack_la-htsback.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhttrack_la-htsbauth.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhttrack_la-htsbauth.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhttrack_la-htscache.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhttrack_la-htscache.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhttrack_la-htscache_selftest.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhttrack_la-htscatchurl.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhttrack_la-htscatchurl.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhttrack_la-htscharset.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhttrack_la-htscharset.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhttrack_la-htsconcat.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhttrack_la-htsconcat.Plo@am__quote@ # am--include-marker
@@ -833,7 +838,7 @@ distclean-compile:
$(am__depfiles_remade): $(am__depfiles_remade):
@$(MKDIR_P) $(@D) @$(MKDIR_P) $(@D)
@echo '# dummy' >$@-t && $(am__mv) $@-t $@ @: >>$@
am--depfiles: $(am__depfiles_remade) am--depfiles: $(am__depfiles_remade)
@@ -889,6 +894,13 @@ libhttrack_la-htscache.lo: htscache.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --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 @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --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
libhttrack_la-htscache_selftest.lo: htscache_selftest.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhttrack_la_CFLAGS) $(CFLAGS) -MT libhttrack_la-htscache_selftest.lo -MD -MP -MF $(DEPDIR)/libhttrack_la-htscache_selftest.Tpo -c -o libhttrack_la-htscache_selftest.lo `test -f 'htscache_selftest.c' || echo '$(srcdir)/'`htscache_selftest.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libhttrack_la-htscache_selftest.Tpo $(DEPDIR)/libhttrack_la-htscache_selftest.Plo
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='htscache_selftest.c' object='libhttrack_la-htscache_selftest.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhttrack_la_CFLAGS) $(CFLAGS) -c -o libhttrack_la-htscache_selftest.lo `test -f 'htscache_selftest.c' || echo '$(srcdir)/'`htscache_selftest.c
libhttrack_la-htscatchurl.lo: htscatchurl.c libhttrack_la-htscatchurl.lo: htscatchurl.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --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_V_CC)$(LIBTOOL) $(AM_V_lt) --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_V_at)$(am__mv) $(DEPDIR)/libhttrack_la-htscatchurl.Tpo $(DEPDIR)/libhttrack_la-htscatchurl.Plo @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libhttrack_la-htscatchurl.Tpo $(DEPDIR)/libhttrack_la-htscatchurl.Plo
@@ -1420,14 +1432,14 @@ mostlyclean-generic:
clean-generic: clean-generic:
distclean-generic: distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -$(am__rm_f) $(CONFIG_CLEAN_FILES)
-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) -test . = "$(srcdir)" || $(am__rm_f) $(CONFIG_CLEAN_VPATH_FILES)
-rm -f coucal/$(DEPDIR)/$(am__dirstamp) -$(am__rm_f) coucal/$(DEPDIR)/$(am__dirstamp)
-rm -f coucal/$(am__dirstamp) -$(am__rm_f) coucal/$(am__dirstamp)
-rm -f minizip/$(DEPDIR)/$(am__dirstamp) -$(am__rm_f) minizip/$(DEPDIR)/$(am__dirstamp)
-rm -f minizip/$(am__dirstamp) -$(am__rm_f) minizip/$(am__dirstamp)
-rm -f proxy/$(DEPDIR)/$(am__dirstamp) -$(am__rm_f) proxy/$(DEPDIR)/$(am__dirstamp)
-rm -f proxy/$(am__dirstamp) -$(am__rm_f) proxy/$(am__dirstamp)
maintainer-clean-generic: maintainer-clean-generic:
@echo "This command is intended for maintainers to use" @echo "This command is intended for maintainers to use"
@@ -1438,7 +1450,7 @@ clean-am: clean-binPROGRAMS clean-generic clean-libLTLIBRARIES \
clean-libtool mostlyclean-am clean-libtool mostlyclean-am
distclean: distclean-am distclean: distclean-am
-rm -f ./$(DEPDIR)/htsjava.Plo -rm -f ./$(DEPDIR)/htsjava.Plo
-rm -f ./$(DEPDIR)/htsserver-htsserver.Po -rm -f ./$(DEPDIR)/htsserver-htsserver.Po
-rm -f ./$(DEPDIR)/htsserver-htsweb.Po -rm -f ./$(DEPDIR)/htsserver-htsweb.Po
-rm -f ./$(DEPDIR)/httrack-httrack.Po -rm -f ./$(DEPDIR)/httrack-httrack.Po
@@ -1446,6 +1458,7 @@ distclean: distclean-am
-rm -f ./$(DEPDIR)/libhttrack_la-htsback.Plo -rm -f ./$(DEPDIR)/libhttrack_la-htsback.Plo
-rm -f ./$(DEPDIR)/libhttrack_la-htsbauth.Plo -rm -f ./$(DEPDIR)/libhttrack_la-htsbauth.Plo
-rm -f ./$(DEPDIR)/libhttrack_la-htscache.Plo -rm -f ./$(DEPDIR)/libhttrack_la-htscache.Plo
-rm -f ./$(DEPDIR)/libhttrack_la-htscache_selftest.Plo
-rm -f ./$(DEPDIR)/libhttrack_la-htscatchurl.Plo -rm -f ./$(DEPDIR)/libhttrack_la-htscatchurl.Plo
-rm -f ./$(DEPDIR)/libhttrack_la-htscharset.Plo -rm -f ./$(DEPDIR)/libhttrack_la-htscharset.Plo
-rm -f ./$(DEPDIR)/libhttrack_la-htsconcat.Plo -rm -f ./$(DEPDIR)/libhttrack_la-htsconcat.Plo
@@ -1530,7 +1543,7 @@ install-ps-am:
installcheck-am: installcheck-am:
maintainer-clean: maintainer-clean-am maintainer-clean: maintainer-clean-am
-rm -f ./$(DEPDIR)/htsjava.Plo -rm -f ./$(DEPDIR)/htsjava.Plo
-rm -f ./$(DEPDIR)/htsserver-htsserver.Po -rm -f ./$(DEPDIR)/htsserver-htsserver.Po
-rm -f ./$(DEPDIR)/htsserver-htsweb.Po -rm -f ./$(DEPDIR)/htsserver-htsweb.Po
-rm -f ./$(DEPDIR)/httrack-httrack.Po -rm -f ./$(DEPDIR)/httrack-httrack.Po
@@ -1538,6 +1551,7 @@ maintainer-clean: maintainer-clean-am
-rm -f ./$(DEPDIR)/libhttrack_la-htsback.Plo -rm -f ./$(DEPDIR)/libhttrack_la-htsback.Plo
-rm -f ./$(DEPDIR)/libhttrack_la-htsbauth.Plo -rm -f ./$(DEPDIR)/libhttrack_la-htsbauth.Plo
-rm -f ./$(DEPDIR)/libhttrack_la-htscache.Plo -rm -f ./$(DEPDIR)/libhttrack_la-htscache.Plo
-rm -f ./$(DEPDIR)/libhttrack_la-htscache_selftest.Plo
-rm -f ./$(DEPDIR)/libhttrack_la-htscatchurl.Plo -rm -f ./$(DEPDIR)/libhttrack_la-htscatchurl.Plo
-rm -f ./$(DEPDIR)/libhttrack_la-htscharset.Plo -rm -f ./$(DEPDIR)/libhttrack_la-htscharset.Plo
-rm -f ./$(DEPDIR)/libhttrack_la-htsconcat.Plo -rm -f ./$(DEPDIR)/libhttrack_la-htsconcat.Plo
@@ -1622,3 +1636,10 @@ uninstall-am: uninstall-DevIncludesDATA uninstall-binPROGRAMS \
# Tell versions [3.59,3.63) of GNU make to not export all variables. # Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded. # Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT: .NOEXPORT:
# Tell GNU make to disable its built-in pattern rules.
%:: %,v
%:: RCS/%,v
%:: RCS/%
%:: s.%
%:: SCCS/s.%

View File

@@ -1,7 +1,9 @@
/* ------------------------------------------------------------ */ /* ------------------------------------------------------------ */
/* /*
HTTrack Website Copier, Offline Browser for Windows and Unix HTTrack Website Copier, Offline Browser for Windows and Unix
Copyright (C) 1998-2017 Xavier Roche and other contributors Copyright (C) 1998 Xavier Roche and other contributors
SPDX-License-Identifier: GPL-3.0-or-later
This program is free software: you can redistribute it and/or modify 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 it under the terms of the GNU General Public License as published by
@@ -16,11 +18,9 @@ GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. along with this program. If not, see <http://www.gnu.org/licenses/>.
Important notes: Ethical use: we kindly ask that you NOT use this software to harvest email
addresses or to collect any other private information about people. Doing so
- We hereby ask people using this source NOT to use it in purpose of grabbing would dishonor our work and waste the many hours we have spent on it.
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 Please visit our Website: http://www.httrack.com
*/ */

View File

@@ -1,7 +1,9 @@
/* ------------------------------------------------------------ */ /* ------------------------------------------------------------ */
/* /*
HTTrack Website Copier, Offline Browser for Windows and Unix HTTrack Website Copier, Offline Browser for Windows and Unix
Copyright (C) 1998-2017 Xavier Roche and other contributors Copyright (C) 1998 Xavier Roche and other contributors
SPDX-License-Identifier: GPL-3.0-or-later
This program is free software: you can redistribute it and/or modify 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 it under the terms of the GNU General Public License as published by
@@ -16,11 +18,9 @@ GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. along with this program. If not, see <http://www.gnu.org/licenses/>.
Important notes: Ethical use: we kindly ask that you NOT use this software to harvest email
addresses or to collect any other private information about people. Doing so
- We hereby ask people using this source NOT to use it in purpose of grabbing would dishonor our work and waste the many hours we have spent on it.
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 Please visit our Website: http://www.httrack.com
*/ */
@@ -266,13 +266,18 @@ const char *hts_optalias[][4] = {
return value: number of arguments treated (0 if error) return value: number of arguments treated (0 if error)
*/ */
int optalias_check(int argc, const char *const *argv, int n_arg, int optalias_check(int argc, const char *const *argv, int n_arg,
int *return_argc, char **return_argv, char *return_error) { int *return_argc, char **return_argv,
size_t return_argv_size, char *return_error,
size_t return_error_size) {
return_error[0] = '\0'; return_error[0] = '\0';
*return_argc = 1; *return_argc = 1;
if (argv[n_arg][0] == '-') if (argv[n_arg][0] == '-')
if (argv[n_arg][1] == '-') { if (argv[n_arg][1] == '-') {
char command[1000]; /* sized to HTS_CDLMAXSIZE: a long-form option value (--user-agent,
char param[1000]; --headers, ...) is copied into param, and the value is bounded by the
general per-argument check in htscoremain.c (HTS_CDLMAXSIZE) */
char command[HTS_CDLMAXSIZE];
char param[HTS_CDLMAXSIZE];
char addcommand[256]; char addcommand[256];
/* */ /* */
@@ -320,9 +325,10 @@ int optalias_check(int argc, const char *const *argv, int n_arg,
/* Copy parameters? */ /* Copy parameters? */
if (need_param == 2) { if (need_param == 2) {
if ((n_arg + 1 >= argc) || (argv[n_arg + 1][0] == '-')) { /* no supplemental parameter */ if ((n_arg + 1 >= argc) || (argv[n_arg + 1][0] == '-')) { /* no supplemental parameter */
sprintf(return_error, snprintf(return_error, return_error_size,
"Syntax error:\n\tOption %s needs to be followed by a parameter: %s <param>\n\t%s\n", "Syntax error:\n\tOption %s needs to be followed by a "
command, command, _NOT_NULL(optalias_help(command))); "parameter: %s <param>\n\t%s\n",
command, command, _NOT_NULL(optalias_help(command)));
return 0; return 0;
} }
strcpybuff(param, argv[n_arg + 1]); strcpybuff(param, argv[n_arg + 1]);
@@ -335,35 +341,36 @@ int optalias_check(int argc, const char *const *argv, int n_arg,
/* Must be alone (-P /tmp) */ /* Must be alone (-P /tmp) */
if (strcmp(hts_optalias[pos][2], "param1") == 0) { if (strcmp(hts_optalias[pos][2], "param1") == 0) {
strcpybuff(return_argv[0], command); strlcpybuff(return_argv[0], command, return_argv_size);
strcpybuff(return_argv[1], param); strlcpybuff(return_argv[1], param, return_argv_size);
*return_argc = 2; /* 2 parameters returned */ *return_argc = 2; /* 2 parameters returned */
} }
/* Alone with parameter (+*.gif) */ /* Alone with parameter (+*.gif) */
else if (strcmp(hts_optalias[pos][2], "param0") == 0) { else if (strcmp(hts_optalias[pos][2], "param0") == 0) {
/* Command */ /* Command */
strcpybuff(return_argv[0], command); strlcpybuff(return_argv[0], command, return_argv_size);
strcatbuff(return_argv[0], param); strlcatbuff(return_argv[0], param, return_argv_size);
} }
/* Together (-c8) */ /* Together (-c8) */
else { else {
/* Command */ /* Command */
strcpybuff(return_argv[0], command); strlcpybuff(return_argv[0], command, return_argv_size);
/* Parameters accepted */ /* Parameters accepted */
if (strncmp(hts_optalias[pos][2], "param", 5) == 0) { if (strncmp(hts_optalias[pos][2], "param", 5) == 0) {
/* --cache=off or --index=on */ /* --cache=off or --index=on */
if (strcmp(param, "off") == 0) if (strcmp(param, "off") == 0)
strcatbuff(return_argv[0], "0"); strlcatbuff(return_argv[0], "0", return_argv_size);
else if (strcmp(param, "on") == 0) { else if (strcmp(param, "on") == 0) {
// on is the default // on is the default
// strcatbuff(return_argv[0],"1"); // strcatbuff(return_argv[0],"1");
} else } else
strcatbuff(return_argv[0], param); strlcatbuff(return_argv[0], param, return_argv_size);
} }
*return_argc = 1; /* 1 parameter returned */ *return_argc = 1; /* 1 parameter returned */
} }
} else { } else {
sprintf(return_error, "Unknown option: %s\n", command); snprintf(return_error, return_error_size, "Unknown option: %s\n",
command);
return 0; return 0;
} }
return need_param; return need_param;
@@ -377,15 +384,16 @@ int optalias_check(int argc, const char *const *argv, int n_arg,
if ((strcmp(hts_optalias[pos][2], "param1") == 0) if ((strcmp(hts_optalias[pos][2], "param1") == 0)
|| (strcmp(hts_optalias[pos][2], "param0") == 0)) { || (strcmp(hts_optalias[pos][2], "param0") == 0)) {
if ((n_arg + 1 >= argc) || (argv[n_arg + 1][0] == '-')) { /* no supplemental parameter */ if ((n_arg + 1 >= argc) || (argv[n_arg + 1][0] == '-')) { /* no supplemental parameter */
sprintf(return_error, snprintf(return_error, return_error_size,
"Syntax error:\n\tOption %s needs to be followed by a parameter: %s <param>\n\t%s\n", "Syntax error:\n\tOption %s needs to be followed by a "
argv[n_arg], argv[n_arg], "parameter: %s <param>\n\t%s\n",
_NOT_NULL(optalias_help(argv[n_arg]))); argv[n_arg], argv[n_arg],
_NOT_NULL(optalias_help(argv[n_arg])));
return 0; return 0;
} }
/* Copy parameters */ /* Copy parameters */
strcpybuff(return_argv[0], argv[n_arg]); strlcpybuff(return_argv[0], argv[n_arg], return_argv_size);
strcpybuff(return_argv[1], argv[n_arg + 1]); strlcpybuff(return_argv[1], argv[n_arg + 1], return_argv_size);
/* And return */ /* And return */
*return_argc = 2; /* 2 parameters returned */ *return_argc = 2; /* 2 parameters returned */
return 2; /* 2 parameters used */ return 2; /* 2 parameters used */
@@ -394,7 +402,7 @@ int optalias_check(int argc, const char *const *argv, int n_arg,
} }
/* Copy and return other unknown option */ /* Copy and return other unknown option */
strcpybuff(return_argv[0], argv[n_arg]); strlcpybuff(return_argv[0], argv[n_arg], return_argv_size);
return 1; return 1;
} }
@@ -521,9 +529,10 @@ int optinclude_file(const char *name, int *argc, char **argv, char *x_argvblk,
strcatbuff(_tmp_argv[0], a); strcatbuff(_tmp_argv[0], a);
strcpybuff(_tmp_argv[1], b); strcpybuff(_tmp_argv[1], b);
result = result = optalias_check(2, (const char *const *) tmp_argv, 0,
optalias_check(2, (const char *const *) tmp_argv, 0, &return_argc, &return_argc, (tmp_argv + 2),
(tmp_argv + 2), return_error); sizeof(_tmp_argv[0]), return_error,
sizeof(return_error));
if (!result) { if (!result) {
printf("%s\n", return_error); printf("%s\n", return_error);
} else { } else {

View File

@@ -1,7 +1,9 @@
/* ------------------------------------------------------------ */ /* ------------------------------------------------------------ */
/* /*
HTTrack Website Copier, Offline Browser for Windows and Unix HTTrack Website Copier, Offline Browser for Windows and Unix
Copyright (C) 1998-2017 Xavier Roche and other contributors Copyright (C) 1998 Xavier Roche and other contributors
SPDX-License-Identifier: GPL-3.0-or-later
This program is free software: you can redistribute it and/or modify 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 it under the terms of the GNU General Public License as published by
@@ -16,11 +18,9 @@ GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. along with this program. If not, see <http://www.gnu.org/licenses/>.
Important notes: Ethical use: we kindly ask that you NOT use this software to harvest email
addresses or to collect any other private information about people. Doing so
- We hereby ask people using this source NOT to use it in purpose of grabbing would dishonor our work and waste the many hours we have spent on it.
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 Please visit our Website: http://www.httrack.com
*/ */
@@ -38,7 +38,9 @@ Please visit our Website: http://www.httrack.com
#ifdef HTS_INTERNAL_BYTECODE #ifdef HTS_INTERNAL_BYTECODE
extern const char *hts_optalias[][4]; extern const char *hts_optalias[][4];
int optalias_check(int argc, const char *const *argv, int n_arg, int optalias_check(int argc, const char *const *argv, int n_arg,
int *return_argc, char **return_argv, char *return_error); int *return_argc, char **return_argv,
size_t return_argv_size, char *return_error,
size_t return_error_size);
int optalias_find(const char *token); int optalias_find(const char *token);
const char *optalias_help(const char *token); const char *optalias_help(const char *token);
int optreal_find(const char *token); int optreal_find(const char *token);

View File

@@ -1,7 +1,9 @@
/* ------------------------------------------------------------ */ /* ------------------------------------------------------------ */
/* /*
HTTrack Website Copier, Offline Browser for Windows and Unix HTTrack Website Copier, Offline Browser for Windows and Unix
Copyright (C) 1998-2017 Xavier Roche and other contributors Copyright (C) 2014 Xavier Roche and other contributors
SPDX-License-Identifier: GPL-3.0-or-later
This program is free software: you can redistribute it and/or modify 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 it under the terms of the GNU General Public License as published by
@@ -16,11 +18,9 @@ GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. along with this program. If not, see <http://www.gnu.org/licenses/>.
Important notes: Ethical use: we kindly ask that you NOT use this software to harvest email
addresses or to collect any other private information about people. Doing so
- We hereby ask people using this source NOT to use it in purpose of grabbing would dishonor our work and waste the many hours we have spent on it.
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 Please visit our Website: http://www.httrack.com
*/ */

View File

@@ -1,7 +1,9 @@
/* ------------------------------------------------------------ */ /* ------------------------------------------------------------ */
/* /*
HTTrack Website Copier, Offline Browser for Windows and Unix HTTrack Website Copier, Offline Browser for Windows and Unix
Copyright (C) 1998-2017 Xavier Roche and other contributors Copyright (C) 1998 Xavier Roche and other contributors
SPDX-License-Identifier: GPL-3.0-or-later
This program is free software: you can redistribute it and/or modify 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 it under the terms of the GNU General Public License as published by
@@ -16,11 +18,9 @@ GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. along with this program. If not, see <http://www.gnu.org/licenses/>.
Important notes: Ethical use: we kindly ask that you NOT use this software to harvest email
addresses or to collect any other private information about people. Doing so
- We hereby ask people using this source NOT to use it in purpose of grabbing would dishonor our work and waste the many hours we have spent on it.
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 Please visit our Website: http://www.httrack.com
*/ */
@@ -1516,9 +1516,11 @@ int back_add(struct_back * sback, httrackp * opt, cache_back * cache, const char
if (sscanf(text, "%d", &code) == 1) { // got code if (sscanf(text, "%d", &code) == 1) { // got code
back[p].r.statuscode = code; back[p].r.statuscode = code;
back[p].status = STATUS_READY; // terminé back[p].status = STATUS_READY; // done
if (lf != NULL && *lf != '\0') { // got location ? if (lf != NULL && *lf != '\0') { // got location ?
strcpybuff(back[p].r.location, lf + 1); // r.location aliases location_buffer (set above); write the array
// so the bounded macro picks up its capacity.
strcpybuff(back[p].location_buffer, lf + 1);
} }
return 0; return 0;
} }
@@ -3996,26 +3998,30 @@ LLint back_transferred(LLint nb, struct_back * sback) {
return nb; return nb;
} }
// infos backing // backing info
// j: 1 afficher sockets 2 afficher autres 3 tout afficher // j: 1=show sockets 2=show others 3=show all
void back_info(struct_back * sback, int i, int j, FILE * fp) { void back_info(struct_back * sback, int i, int j, FILE * fp) {
lien_back *const back = sback->lnk; lien_back *const back = sback->lnk;
const int back_max = sback->count; const int back_max = sback->count;
assertf(i >= 0 && i < back_max); assertf(i >= 0 && i < back_max);
if (back[i].status >= 0) { if (back[i].status >= 0) {
char BIGSTK s[HTS_URLMAXSIZE * 2 + 1024]; // Holds the status tag plus the full URL: url_adr and url_fil are each
// HTS_URLMAXSIZE*2, so reserve room for both (*4) plus framing/trailer.
// Undersizing would make back_infostr's bounded appends abort on a long
// URL.
char BIGSTK s[HTS_URLMAXSIZE * 4 + 1024];
s[0] = '\0'; s[0] = '\0';
back_infostr(sback, i, j, s); back_infostr(sback, i, j, s, sizeof(s));
strcatbuff(s, LF); strcatbuff(s, LF);
fprintf(fp, "%s", s); fprintf(fp, "%s", s);
} }
} }
// infos backing // backing info
// j: 1 afficher sockets 2 afficher autres 3 tout afficher // j: 1=show sockets 2=show others 3=show all
void back_infostr(struct_back * sback, int i, int j, char *s) { void back_infostr(struct_back *sback, int i, int j, char *s, size_t size) {
lien_back *const back = sback->lnk; lien_back *const back = sback->lnk;
const int back_max = sback->count; const int back_max = sback->count;
@@ -4025,16 +4031,16 @@ void back_infostr(struct_back * sback, int i, int j, char *s) {
if (j & 1) { if (j & 1) {
if (back[i].status == STATUS_CONNECTING) { if (back[i].status == STATUS_CONNECTING) {
strcatbuff(s, "CONNECT "); strlcatbuff(s, "CONNECT ", size);
} else if (back[i].status == STATUS_WAIT_HEADERS) { } else if (back[i].status == STATUS_WAIT_HEADERS) {
strcatbuff(s, "INFOS "); strlcatbuff(s, "INFOS ", size);
aff = 1; aff = 1;
} else if (back[i].status == STATUS_CHUNK_WAIT } else if (back[i].status == STATUS_CHUNK_WAIT
|| back[i].status == STATUS_CHUNK_CR) { || back[i].status == STATUS_CHUNK_CR) {
strcatbuff(s, "INFOSC"); // infos chunk strlcatbuff(s, "INFOSC", size); // chunk info
aff = 1; aff = 1;
} else if (back[i].status > 0) { } else if (back[i].status > 0) {
strcatbuff(s, "RECEIVE "); strlcatbuff(s, "RECEIVE ", size);
aff = 1; aff = 1;
} }
} }
@@ -4042,44 +4048,44 @@ void back_infostr(struct_back * sback, int i, int j, char *s) {
if (back[i].status == STATUS_READY) { if (back[i].status == STATUS_READY) {
switch (back[i].r.statuscode) { switch (back[i].r.statuscode) {
case 200: case 200:
strcatbuff(s, "READY "); strlcatbuff(s, "READY ", size);
aff = 1; aff = 1;
break; break;
case -1: case -1:
strcatbuff(s, "ERROR "); strlcatbuff(s, "ERROR ", size);
aff = 1; aff = 1;
break; break;
case -2: case -2:
strcatbuff(s, "TIMEOUT "); strlcatbuff(s, "TIMEOUT ", size);
aff = 1; aff = 1;
break; break;
case -3: case -3:
strcatbuff(s, "TOOSLOW "); strlcatbuff(s, "TOOSLOW ", size);
aff = 1; aff = 1;
break; break;
case 400: case 400:
strcatbuff(s, "BADREQUEST "); strlcatbuff(s, "BADREQUEST ", size);
aff = 1; aff = 1;
break; break;
case 401: case 401:
case 403: case 403:
strcatbuff(s, "FORBIDDEN "); strlcatbuff(s, "FORBIDDEN ", size);
aff = 1; aff = 1;
break; break;
case 404: case 404:
strcatbuff(s, "NOT FOUND "); strlcatbuff(s, "NOT FOUND ", size);
aff = 1; aff = 1;
break; break;
case 500: case 500:
strcatbuff(s, "SERVERROR "); strlcatbuff(s, "SERVERROR ", size);
aff = 1; aff = 1;
break; break;
default: default:
{ {
char s2[256]; char s2[256];
sprintf(s2, "ERROR(%d)", back[i].r.statuscode); snprintf(s2, sizeof(s2), "ERROR(%d)", back[i].r.statuscode);
strcatbuff(s, s2); strlcatbuff(s, s2, size);
} }
aff = 1; aff = 1;
} }
@@ -4090,16 +4096,18 @@ void back_infostr(struct_back * sback, int i, int j, char *s) {
{ {
char BIGSTK s2[HTS_URLMAXSIZE * 2 + 1024]; char BIGSTK s2[HTS_URLMAXSIZE * 2 + 1024];
sprintf(s2, "\"%s", back[i].url_adr); snprintf(s2, sizeof(s2), "\"%s", back[i].url_adr);
strcatbuff(s, s2); strlcatbuff(s, s2, size);
if (back[i].url_fil[0] != '/') if (back[i].url_fil[0] != '/')
strcatbuff(s, "/"); strlcatbuff(s, "/", size);
sprintf(s2, "%s\" ", back[i].url_fil); snprintf(s2, sizeof(s2), "%s\" ", back[i].url_fil);
strcatbuff(s, s2); strlcatbuff(s, s2, size);
sprintf(s, LLintP " " LLintP " ", (LLint) back[i].r.size, // size/totalsize trailer: build in s2, then append (the old code wrote
(LLint) back[i].r.totalsize); // straight into s here, clobbering the URL it had just assembled).
strcatbuff(s, s2); snprintf(s2, sizeof(s2), LLintP " " LLintP " ", (LLint) back[i].r.size,
(LLint) back[i].r.totalsize);
strlcatbuff(s, s2, size);
} }
} }
} }

View File

@@ -1,7 +1,9 @@
/* ------------------------------------------------------------ */ /* ------------------------------------------------------------ */
/* /*
HTTrack Website Copier, Offline Browser for Windows and Unix HTTrack Website Copier, Offline Browser for Windows and Unix
Copyright (C) 1998-2017 Xavier Roche and other contributors Copyright (C) 1998 Xavier Roche and other contributors
SPDX-License-Identifier: GPL-3.0-or-later
This program is free software: you can redistribute it and/or modify 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 it under the terms of the GNU General Public License as published by
@@ -16,11 +18,9 @@ GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. along with this program. If not, see <http://www.gnu.org/licenses/>.
Important notes: Ethical use: we kindly ask that you NOT use this software to harvest email
addresses or to collect any other private information about people. Doing so
- We hereby ask people using this source NOT to use it in purpose of grabbing would dishonor our work and waste the many hours we have spent on it.
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 Please visit our Website: http://www.httrack.com
*/ */
@@ -127,7 +127,7 @@ int back_trylive(httrackp * opt, cache_back * cache, struct_back * sback,
int back_finalize(httrackp * opt, cache_back * cache, struct_back * sback, int back_finalize(httrackp * opt, cache_back * cache, struct_back * sback,
const int p); const int p);
void back_info(struct_back * sback, int i, int j, FILE * fp); void back_info(struct_back * sback, int i, int j, FILE * fp);
void back_infostr(struct_back * sback, int i, int j, char *s); void back_infostr(struct_back *sback, int i, int j, char *s, size_t size);
LLint back_transferred(LLint add, struct_back * sback); LLint back_transferred(LLint add, struct_back * sback);
// hostback // hostback

View File

@@ -1,7 +1,9 @@
/* ------------------------------------------------------------ */ /* ------------------------------------------------------------ */
/* /*
HTTrack Website Copier, Offline Browser for Windows and Unix HTTrack Website Copier, Offline Browser for Windows and Unix
Copyright (C) 1998-2017 Xavier Roche and other contributors Copyright (C) 1998 Xavier Roche and other contributors
SPDX-License-Identifier: GPL-3.0-or-later
This program is free software: you can redistribute it and/or modify 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 it under the terms of the GNU General Public License as published by
@@ -16,11 +18,9 @@ GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. along with this program. If not, see <http://www.gnu.org/licenses/>.
Important notes: Ethical use: we kindly ask that you NOT use this software to harvest email
addresses or to collect any other private information about people. Doing so
- We hereby ask people using this source NOT to use it in purpose of grabbing would dishonor our work and waste the many hours we have spent on it.
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 Please visit our Website: http://www.httrack.com
*/ */

View File

@@ -1,7 +1,9 @@
/* ------------------------------------------------------------ */ /* ------------------------------------------------------------ */
/* /*
HTTrack Website Copier, Offline Browser for Windows and Unix HTTrack Website Copier, Offline Browser for Windows and Unix
Copyright (C) 1998-2017 Xavier Roche and other contributors Copyright (C) 1998 Xavier Roche and other contributors
SPDX-License-Identifier: GPL-3.0-or-later
This program is free software: you can redistribute it and/or modify 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 it under the terms of the GNU General Public License as published by
@@ -16,11 +18,9 @@ GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. along with this program. If not, see <http://www.gnu.org/licenses/>.
Important notes: Ethical use: we kindly ask that you NOT use this software to harvest email
addresses or to collect any other private information about people. Doing so
- We hereby ask people using this source NOT to use it in purpose of grabbing would dishonor our work and waste the many hours we have spent on it.
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 Please visit our Website: http://www.httrack.com
*/ */

View File

@@ -1,6 +1,8 @@
/* /*
HTTrack Website Copier, Offline Browser for Windows and Unix HTTrack Website Copier, Offline Browser for Windows and Unix
Copyright (C) 1998-2017 Xavier Roche and other contributors Copyright (C) 1998 Xavier Roche and other contributors
SPDX-License-Identifier: GPL-3.0-or-later
This program is free software: you can redistribute it and/or modify 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 it under the terms of the GNU General Public License as published by
@@ -15,11 +17,9 @@ GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. along with this program. If not, see <http://www.gnu.org/licenses/>.
Important notes: Ethical use: we kindly ask that you NOT use this software to harvest email
addresses or to collect any other private information about people. Doing so
- We hereby ask people using this source NOT to use it in purpose of grabbing would dishonor our work and waste the many hours we have spent on it.
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 Please visit our Website: http://www.httrack.com
*/ */
@@ -102,7 +102,8 @@ int cookie_add(t_cookie * cookie, const char *cook_name, const char *cook_value,
strcatbuff(cook, "\n"); strcatbuff(cook, "\n");
if (!((strlen(cookie->data) + strlen(cook)) < cookie->max_len)) if (!((strlen(cookie->data) + strlen(cook)) < cookie->max_len))
return -1; // impossible d'ajouter return -1; // impossible d'ajouter
cookie_insert(insert, cook); cookie_insert(insert, cookie->max_len - (size_t) (insert - cookie->data),
cook);
#if DEBUG_COOK #if DEBUG_COOK
printf("add_new cookie: name=\"%s\" value=\"%s\" domain=\"%s\" path=\"%s\"\n", printf("add_new cookie: name=\"%s\" value=\"%s\" domain=\"%s\" path=\"%s\"\n",
cook_name, cook_value, domain, path); cook_name, cook_value, domain, path);
@@ -118,7 +119,7 @@ int cookie_del(t_cookie * cookie, const char *cook_name, const char *domain, con
b = cookie_find(cookie->data, cook_name, domain, path); b = cookie_find(cookie->data, cook_name, domain, path);
if (b) { if (b) {
a = cookie_nextfield(b); a = cookie_nextfield(b);
cookie_delete(b, a - b); cookie_delete(b, cookie->max_len - (size_t) (b - cookie->data), a - b);
#if DEBUG_COOK #if DEBUG_COOK
printf("deleted old cookie: %s %s %s\n", cook_name, domain, path); printf("deleted old cookie: %s %s %s\n", cook_name, domain, path);
#endif #endif
@@ -133,8 +134,8 @@ static int cookie_cmp_wildcard_domain(const char *chk_dom, const char *domain) {
const size_t n = strlen(chk_dom); const size_t n = strlen(chk_dom);
const size_t m = strlen(domain); const size_t m = strlen(domain);
const size_t l = n < m ? n : m; const size_t l = n < m ? n : m;
size_t i; int i;
for (i = l - 1; i >= 0; i--) { for (i = (int) l - 1; i >= 0; i--) {
if (chk_dom[n - i - 1] != domain[m - i - 1]) { if (chk_dom[n - i - 1] != domain[m - i - 1]) {
return 1; return 1;
} }
@@ -336,41 +337,44 @@ int cookie_save(t_cookie * cookie, const char *name) {
return -1; return -1;
} }
// insertion chaine ins avant s // Insert string ins before s. s_size is the capacity of the buffer at s.
void cookie_insert(char *s, const char *ins) { void cookie_insert(char *s, size_t s_size, const char *ins) {
char *buff; char *buff;
if (strnotempty(s) == 0) { // rien à faire, juste concat if (strnotempty(s) == 0) { // nothing there yet: just concatenate
strcatbuff(s, ins); strlcatbuff(s, ins, s_size);
} else { } else {
buff = (char *) malloct(strlen(s) + 1); buff = (char *) malloct(strlen(s) + 1);
if (buff) { if (buff) {
strcpybuff(buff, s); // copie temporaire strlcpybuff(buff, s, strlen(s) + 1); // temporary copy of s
strcpybuff(s, ins); // insérer strlcpybuff(s, ins, s_size); // write ins
strcatbuff(s, buff); // copier strlcatbuff(s, buff, s_size); // then the saved content
freet(buff); freet(buff);
} }
} }
} }
// destruction chaine dans s position pos // Delete the substring of s at position pos. s_size is the capacity at s.
void cookie_delete(char *s, size_t pos) { void cookie_delete(char *s, size_t s_size, size_t pos) {
char *buff; char *buff;
if (strnotempty(s + pos) == 0) { // rien à faire, effacer if (strnotempty(s + pos) == 0) { // nothing after pos: truncate
s[0] = '\0'; s[0] = '\0';
} else { } else {
buff = (char *) malloct(strlen(s + pos) + 1); buff = (char *) malloct(strlen(s + pos) + 1);
if (buff) { if (buff) {
strcpybuff(buff, s + pos); // copie temporaire strlcpybuff(buff, s + pos, strlen(s + pos) + 1); // temporary copy
strcpybuff(s, buff); // copier strlcpybuff(s, buff, s_size); // overwrite from start
freet(buff); freet(buff);
} }
} }
} }
// renvoie champ param de la chaine cookie_base // Return field <param> (0-based, tab-separated) of the cookie line cookie_base,
// ex: cookie_get("ceci est<tab>un<tab>exemple",1) renvoi "un" // into buffer. ex: cookie_get("ceci est<tab>un<tab>exemple", 1) returns "un".
// buffer must hold at least COOKIE_FIELD_BUFFER_SIZE bytes (all callers use
// char[8192]).
#define COOKIE_FIELD_BUFFER_SIZE 8192
const char *cookie_get(char *buffer, const char *cookie_base, int param) { const char *cookie_get(char *buffer, const char *cookie_base, int param) {
const char *limit; const char *limit;
@@ -394,11 +398,11 @@ const char *cookie_get(char *buffer, const char *cookie_base, int param) {
if (cookie_base) { if (cookie_base) {
if (cookie_base < limit) { if (cookie_base < limit) {
const char *a = cookie_base; const char *a = cookie_base;
htsbuff b = htsbuff_ptr(buffer, COOKIE_FIELD_BUFFER_SIZE);
while((*a) && (*a != '\t') && (*a != '\n')) while((*a) && (*a != '\t') && (*a != '\n'))
a++; a++;
buffer[0] = '\0'; htsbuff_catn(&b, cookie_base, (size_t) (a - cookie_base));
strncatbuff(buffer, cookie_base, (int) (a - cookie_base));
return buffer; return buffer;
} else } else
return ""; return "";
@@ -458,11 +462,13 @@ char *bauth_check(t_cookie * cookie, const char *adr, const char *fil) {
return NULL; return NULL;
} }
/* Build the auth prefix (host + path, query stripped) into prefix.
Callers pass a buffer of HTS_URLMAXSIZE * 2 bytes. */
char *bauth_prefix(char *prefix, const char *adr, const char *fil) { char *bauth_prefix(char *prefix, const char *adr, const char *fil) {
char *a; char *a;
strcpybuff(prefix, jump_identification_const(adr)); strlcpybuff(prefix, jump_identification_const(adr), HTS_URLMAXSIZE * 2);
strcatbuff(prefix, fil); strlcatbuff(prefix, fil, HTS_URLMAXSIZE * 2);
a = strchr(prefix, '?'); a = strchr(prefix, '?');
if (a) if (a)
*a = '\0'; *a = '\0';

View File

@@ -1,7 +1,9 @@
/* ------------------------------------------------------------ */ /* ------------------------------------------------------------ */
/* /*
HTTrack Website Copier, Offline Browser for Windows and Unix HTTrack Website Copier, Offline Browser for Windows and Unix
Copyright (C) 1998-2017 Xavier Roche and other contributors Copyright (C) 1998 Xavier Roche and other contributors
SPDX-License-Identifier: GPL-3.0-or-later
This program is free software: you can redistribute it and/or modify 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 it under the terms of the GNU General Public License as published by
@@ -16,11 +18,9 @@ GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. along with this program. If not, see <http://www.gnu.org/licenses/>.
Important notes: Ethical use: we kindly ask that you NOT use this software to harvest email
addresses or to collect any other private information about people. Doing so
- We hereby ask people using this source NOT to use it in purpose of grabbing would dishonor our work and waste the many hours we have spent on it.
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 Please visit our Website: http://www.httrack.com
*/ */
@@ -67,8 +67,8 @@ int cookie_add(t_cookie * cookie, const char *cook_name, const char *cook_valu
int cookie_del(t_cookie * cookie, const char *cook_name, 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_load(t_cookie * cookie, const char *path, const char *name);
int cookie_save(t_cookie * cookie, const char *name); int cookie_save(t_cookie * cookie, const char *name);
void cookie_insert(char *s, const char *ins); void cookie_insert(char *s, size_t s_size, const char *ins);
void cookie_delete(char *s, size_t pos); void cookie_delete(char *s, size_t s_size, size_t pos);
const char *cookie_get(char *buffer, const char *cookie_base, int param); 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_find(char *s, const char *cook_name, const char *domain, const char *path);
char *cookie_nextfield(char *a); char *cookie_nextfield(char *a);

View File

@@ -1,7 +1,9 @@
/* ------------------------------------------------------------ */ /* ------------------------------------------------------------ */
/* /*
HTTrack Website Copier, Offline Browser for Windows and Unix HTTrack Website Copier, Offline Browser for Windows and Unix
Copyright (C) 1998-2017 Xavier Roche and other contributors Copyright (C) 1998 Xavier Roche and other contributors
SPDX-License-Identifier: GPL-3.0-or-later
This program is free software: you can redistribute it and/or modify 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 it under the terms of the GNU General Public License as published by
@@ -16,11 +18,9 @@ GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. along with this program. If not, see <http://www.gnu.org/licenses/>.
Important notes: Ethical use: we kindly ask that you NOT use this software to harvest email
addresses or to collect any other private information about people. Doing so
- We hereby ask people using this source NOT to use it in purpose of grabbing would dishonor our work and waste the many hours we have spent on it.
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 Please visit our Website: http://www.httrack.com
*/ */
@@ -196,12 +196,13 @@ struct cache_back_zip_entry {
int compressionMethod; int compressionMethod;
}; };
#define ZIP_READFIELD_STRING(line, value, refline, refvalue) do { \ #define ZIP_READFIELD_STRING(line, value, refline, refvalue, refvalue_size) \
if (line[0] != '\0' && strfield2(line, refline)) { \ do { \
strcpybuff(refvalue, value); \ if (line[0] != '\0' && strfield2(line, refline)) { \
line[0] = '\0'; \ strlcpybuff(refvalue, value, refvalue_size); \
} \ line[0] = '\0'; \
} while(0) } \
} while (0)
#define ZIP_READFIELD_INT(line, value, refline, refvalue) do { \ #define ZIP_READFIELD_INT(line, value, refline, refvalue) do { \
if (line[0] != '\0' && strfield2(line, refline)) { \ if (line[0] != '\0' && strfield2(line, refline)) { \
int intval = 0; \ int intval = 0; \
@@ -643,7 +644,7 @@ static htsblk cache_readex_new(httrackp * opt, cache_back * cache,
} else { } else {
r.location = location_default; r.location = location_default;
} }
strcpybuff(r.location, ""); r.location[0] = '\0';
strcpybuff(buff, adr); strcpybuff(buff, adr);
strcatbuff(buff, fil); strcatbuff(buff, fil);
hash_pos_return = coucal_read(cache->hashtable, buff, &hash_pos); hash_pos_return = coucal_read(cache->hashtable, buff, &hash_pos);
@@ -706,17 +707,25 @@ static htsblk cache_readex_new(httrackp * opt, cache_back * cache,
value++; value++;
ZIP_READFIELD_INT(line, value, "X-In-Cache", dataincache); ZIP_READFIELD_INT(line, value, "X-In-Cache", dataincache);
ZIP_READFIELD_INT(line, value, "X-Statuscode", r.statuscode); ZIP_READFIELD_INT(line, value, "X-Statuscode", r.statuscode);
ZIP_READFIELD_STRING(line, value, "X-StatusMessage", r.msg); // msg ZIP_READFIELD_STRING(line, value, "X-StatusMessage", r.msg,
sizeof(r.msg));
ZIP_READFIELD_LLINT(line, value, "X-Size", r.size); // size ZIP_READFIELD_LLINT(line, value, "X-Size", r.size); // size
ZIP_READFIELD_STRING(line, value, "Content-Type", r.contenttype); // contenttype ZIP_READFIELD_STRING(line, value, "Content-Type", r.contenttype,
ZIP_READFIELD_STRING(line, value, "X-Charset", r.charset); // contenttype sizeof(r.contenttype));
ZIP_READFIELD_STRING(line, value, "Last-Modified", r.lastmodified); // last-modified ZIP_READFIELD_STRING(line, value, "X-Charset", r.charset,
ZIP_READFIELD_STRING(line, value, "Etag", r.etag); // Etag sizeof(r.charset));
ZIP_READFIELD_STRING(line, value, "Location", r.location); // 'location' pour moved ZIP_READFIELD_STRING(line, value, "Last-Modified", r.lastmodified,
ZIP_READFIELD_STRING(line, value, "Content-Disposition", r.cdispo); // Content-disposition sizeof(r.lastmodified));
ZIP_READFIELD_STRING(line, value, "Etag", r.etag, sizeof(r.etag));
// r.location is a char* pointing into a HTS_URLMAXSIZE*2 buffer
ZIP_READFIELD_STRING(line, value, "Location", r.location,
HTS_URLMAXSIZE * 2);
ZIP_READFIELD_STRING(line, value, "Content-Disposition", r.cdispo,
sizeof(r.cdispo));
//ZIP_READFIELD_STRING(line, value, "X-Addr", ..); // Original address //ZIP_READFIELD_STRING(line, value, "X-Addr", ..); // Original address
//ZIP_READFIELD_STRING(line, value, "X-Fil", ..); // Original URI filename //ZIP_READFIELD_STRING(line, value, "X-Fil", ..); // Original URI filename
ZIP_READFIELD_STRING(line, value, "X-Save", previous_save_); // Original save filename ZIP_READFIELD_STRING(line, value, "X-Save", previous_save_,
sizeof(previous_save_));
} }
} while(offset < readSizeHeader && !lineEof); } while(offset < readSizeHeader && !lineEof);
//totalHeader = offset; //totalHeader = offset;
@@ -733,7 +742,7 @@ static htsblk cache_readex_new(httrackp * opt, cache_back * cache,
} }
} }
if (return_save != NULL) { if (return_save != NULL) {
strcpybuff(return_save, previous_save); strlcpybuff(return_save, previous_save, HTS_URLMAXSIZE * 2);
} }
/* Complete fields */ /* Complete fields */
@@ -1025,7 +1034,7 @@ static htsblk cache_readex_old(httrackp * opt, cache_back * cache,
} else { } else {
r.location = location_default; r.location = location_default;
} }
strcpybuff(r.location, ""); r.location[0] = '\0';
#if HTS_FAST_CACHE #if HTS_FAST_CACHE
strcpybuff(buff, adr); strcpybuff(buff, adr);
strcatbuff(buff, fil); strcatbuff(buff, fil);
@@ -1096,30 +1105,34 @@ static htsblk cache_readex_old(httrackp * opt, cache_back * cache,
// //
cache_rint(cache->olddat, &r.statuscode); cache_rint(cache->olddat, &r.statuscode);
cache_rLLint(cache->olddat, &r.size); cache_rLLint(cache->olddat, &r.size);
cache_rstr(cache->olddat, r.msg); cache_rstr(cache->olddat, r.msg, sizeof(r.msg));
cache_rstr(cache->olddat, r.contenttype); cache_rstr(cache->olddat, r.contenttype, sizeof(r.contenttype));
if (cache->version >= 3) if (cache->version >= 3)
cache_rstr(cache->olddat, r.charset); cache_rstr(cache->olddat, r.charset, sizeof(r.charset));
cache_rstr(cache->olddat, r.lastmodified); cache_rstr(cache->olddat, r.lastmodified, sizeof(r.lastmodified));
cache_rstr(cache->olddat, r.etag); cache_rstr(cache->olddat, r.etag, sizeof(r.etag));
cache_rstr(cache->olddat, r.location); // r.location points into a HTS_URLMAXSIZE*2 buffer
cache_rstr(cache->olddat, r.location, HTS_URLMAXSIZE * 2);
if (cache->version >= 2) if (cache->version >= 2)
cache_rstr(cache->olddat, r.cdispo); cache_rstr(cache->olddat, r.cdispo, sizeof(r.cdispo));
if (cache->version >= 4) { if (cache->version >= 4) {
cache_rstr(cache->olddat, previous_save); // adr cache_rstr(cache->olddat, previous_save,
cache_rstr(cache->olddat, previous_save); // fil sizeof(previous_save)); // adr
cache_rstr(cache->olddat, previous_save,
sizeof(previous_save)); // fil
previous_save[0] = '\0'; previous_save[0] = '\0';
cache_rstr(cache->olddat, previous_save); // save cache_rstr(cache->olddat, previous_save,
sizeof(previous_save)); // save
if (return_save != NULL) { if (return_save != NULL) {
strcpybuff(return_save, previous_save); strlcpybuff(return_save, previous_save, HTS_URLMAXSIZE * 2);
} }
} }
if (cache->version >= 5) { if (cache->version >= 5) {
r.headers = cache_rstr_addr(cache->olddat); r.headers = cache_rstr_addr(cache->olddat);
} }
// //
cache_rstr(cache->olddat, check); cache_rstr(cache->olddat, check, sizeof(check));
if (strcmp(check, "HTS") == 0) { /* intégrité OK */ if (strcmp(check, "HTS") == 0) { /* integrity OK */
ok = 1; ok = 1;
} }
cache_rLLint(cache->olddat, &size_read); /* lire size pour être sûr de la taille déclarée (réécrire) */ cache_rLLint(cache->olddat, &size_read); /* lire size pour être sûr de la taille déclarée (réécrire) */
@@ -1758,12 +1771,12 @@ void cache_init(cache_back * cache, httrackp * opt) {
char firstline[256]; char firstline[256];
char *a = cache->use; char *a = cache->use;
a += cache_brstr(a, firstline); a += cache_brstr(a, firstline, sizeof(firstline));
if (strncmp(firstline, "CACHE-", 6) == 0) { // Nouvelle version du cache if (strncmp(firstline, "CACHE-", 6) == 0) { // new cache format
if (strncmp(firstline, "CACHE-1.", 8) == 0) { // Version 1.1x if (strncmp(firstline, "CACHE-1.", 8) == 0) { // version 1.1x
cache->version = (int) (firstline[8] - '0'); // cache 1.x cache->version = (int) (firstline[8] - '0'); // cache 1.x
if (cache->version <= 5) { if (cache->version <= 5) {
a += cache_brstr(a, firstline); a += cache_brstr(a, firstline, sizeof(firstline));
strcpybuff(cache->lastmodified, firstline); strcpybuff(cache->lastmodified, firstline);
} else { } else {
hts_log_print(opt, LOG_ERROR, hts_log_print(opt, LOG_ERROR,
@@ -1774,7 +1787,7 @@ void cache_init(cache_back * cache, httrackp * opt) {
freet(cache->use); freet(cache->use);
cache->use = NULL; cache->use = NULL;
} }
} else { // non supporté } else { // non supporté
hts_log_print(opt, LOG_ERROR, hts_log_print(opt, LOG_ERROR,
"Cache: %s not supported, ignoring current cache", "Cache: %s not supported, ignoring current cache",
firstline); firstline);
@@ -1784,7 +1797,7 @@ void cache_init(cache_back * cache, httrackp * opt) {
cache->use = NULL; cache->use = NULL;
} }
/* */ /* */
} else { // Vieille version du cache } else { // Vieille version du cache
/* */ /* */
hts_log_print(opt, LOG_WARNING, hts_log_print(opt, LOG_WARNING,
"Cache: importing old cache format"); "Cache: importing old cache format");
@@ -2088,7 +2101,7 @@ char *readfile_or(const char *fil, const char *defaultdata) {
char *adr = malloct(strlen(defaultdata) + 1); char *adr = malloct(strlen(defaultdata) + 1);
if (adr) { if (adr) {
strcpybuff(adr, defaultdata); strlcpybuff(adr, defaultdata, strlen(defaultdata) + 1);
return adr; return adr;
} }
} }
@@ -2109,7 +2122,7 @@ int cache_wstr(FILE * fp, const char *s) {
return -1; return -1;
return 0; return 0;
} }
void cache_rstr(FILE * fp, char *s) { void cache_rstr(FILE *fp, char *s, size_t s_size) {
INTsys i; INTsys i;
char buff[256 + 4]; char buff[256 + 4];
@@ -2118,13 +2131,26 @@ void cache_rstr(FILE * fp, char *s) {
if (i < 0 || i > 32768) /* error, something nasty happened */ if (i < 0 || i > 32768) /* error, something nasty happened */
i = 0; i = 0;
if (i > 0) { if (i > 0) {
if ((int) fread(s, 1, i, fp) != i) { /* Store at most s_size-1 bytes into s, but consume all i bytes from the
stream so the next field stays aligned (the field may be longer than the
destination in a tampered/old cache). */
const size_t want = (size_t) i;
const size_t store = want < s_size ? want : s_size - 1;
if (fread(s, 1, store, fp) != store) {
int fread_cache_failed = 0; int fread_cache_failed = 0;
assertf(fread_cache_failed); assertf(fread_cache_failed);
} }
if (want > store && fseek(fp, (long) (want - store), SEEK_CUR) != 0) {
int fseek_cache_failed = 0;
assertf(fseek_cache_failed);
}
s[store] = '\0';
} else {
s[0] = '\0';
} }
*(s + i) = '\0';
} }
char *cache_rstr_addr(FILE * fp) { char *cache_rstr_addr(FILE * fp) {
INTsys i; INTsys i;
@@ -2148,7 +2174,7 @@ char *cache_rstr_addr(FILE * fp) {
} }
return addr; return addr;
} }
int cache_brstr(char *adr, char *s) { int cache_brstr(char *adr, char *s, size_t s_size) {
int i; int i;
int off; int off;
char buff[256 + 4]; char buff[256 + 4];
@@ -2156,23 +2182,17 @@ int cache_brstr(char *adr, char *s) {
off = binput(adr, buff, 256); off = binput(adr, buff, 256);
adr += off; adr += off;
sscanf(buff, "%d", &i); sscanf(buff, "%d", &i);
if (i > 0) if (i < 0 || i > 32768) /* guard a corrupt length */
strncpy(s, adr, i); i = 0;
*(s + i) = '\0'; if (i > 0) {
off += i; /* copy at most s_size-1 bytes; advance past the full field regardless */
return off; const size_t store = (size_t) i < s_size ? (size_t) i : s_size - 1;
}
int cache_quickbrstr(char *adr, char *s) {
int i;
int off;
char buff[256 + 4];
off = binput(adr, buff, 256); strncpy(s, adr, store);
adr += off; s[store] = '\0';
sscanf(buff, "%d", &i); } else {
if (i > 0) s[0] = '\0';
strncpy(s, adr, i); }
*(s + i) = '\0';
off += i; off += i;
return off; return off;
} }
@@ -2180,7 +2200,7 @@ int cache_quickbrstr(char *adr, char *s) {
/* idem, mais en int */ /* idem, mais en int */
int cache_brint(char *adr, int *i) { int cache_brint(char *adr, int *i) {
char s[256]; char s[256];
int r = cache_brstr(adr, s); int r = cache_brstr(adr, s, sizeof(s));
if (r != -1) if (r != -1)
sscanf(s, "%d", i); sscanf(s, "%d", i);
@@ -2189,7 +2209,7 @@ int cache_brint(char *adr, int *i) {
void cache_rint(FILE * fp, int *i) { void cache_rint(FILE * fp, int *i) {
char s[256]; char s[256];
cache_rstr(fp, s); cache_rstr(fp, s, sizeof(s));
sscanf(s, "%d", i); sscanf(s, "%d", i);
} }
int cache_wint(FILE * fp, int i) { int cache_wint(FILE * fp, int i) {
@@ -2201,7 +2221,7 @@ int cache_wint(FILE * fp, int i) {
void cache_rLLint(FILE * fp, LLint * i) { void cache_rLLint(FILE * fp, LLint * i) {
char s[256]; char s[256];
cache_rstr(fp, s); cache_rstr(fp, s, sizeof(s));
sscanf(s, LLintP, i); sscanf(s, LLintP, i);
} }
int cache_wLLint(FILE * fp, LLint i) { int cache_wLLint(FILE * fp, LLint i) {

View File

@@ -1,7 +1,9 @@
/* ------------------------------------------------------------ */ /* ------------------------------------------------------------ */
/* /*
HTTrack Website Copier, Offline Browser for Windows and Unix HTTrack Website Copier, Offline Browser for Windows and Unix
Copyright (C) 1998-2017 Xavier Roche and other contributors Copyright (C) 1998 Xavier Roche and other contributors
SPDX-License-Identifier: GPL-3.0-or-later
This program is free software: you can redistribute it and/or modify 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 it under the terms of the GNU General Public License as published by
@@ -16,11 +18,9 @@ GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. along with this program. If not, see <http://www.gnu.org/licenses/>.
Important notes: Ethical use: we kindly ask that you NOT use this software to harvest email
addresses or to collect any other private information about people. Doing so
- We hereby ask people using this source NOT to use it in purpose of grabbing would dishonor our work and waste the many hours we have spent on it.
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 Please visit our Website: http://www.httrack.com
*/ */
@@ -80,10 +80,9 @@ int cache_writedata(FILE * cache_ndx, FILE * cache_dat, const char *str1,
int cache_readdata(cache_back * cache, const char *str1, const char *str2, int cache_readdata(cache_back * cache, const char *str1, const char *str2,
char **inbuff, int *len); char **inbuff, int *len);
void cache_rstr(FILE * fp, char *s); void cache_rstr(FILE *fp, char *s, size_t s_size);
char *cache_rstr_addr(FILE * fp); char *cache_rstr_addr(FILE * fp);
int cache_brstr(char *adr, char *s); int cache_brstr(char *adr, char *s, size_t s_size);
int cache_quickbrstr(char *adr, char *s);
int cache_brint(char *adr, int *i); int cache_brint(char *adr, int *i);
void cache_rint(FILE * fp, int *i); void cache_rint(FILE * fp, int *i);
void cache_rLLint(FILE * fp, LLint * i); void cache_rLLint(FILE * fp, LLint * i);

374
src/htscache_selftest.c Normal file
View File

@@ -0,0 +1,374 @@
/* ------------------------------------------------------------ */
/*
HTTrack Website Copier, Offline Browser for Windows and Unix
Copyright (C) 2026 Xavier Roche and other contributors
SPDX-License-Identifier: GPL-3.0-or-later
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/>.
Ethical use: we kindly ask that you NOT use this software to harvest email
addresses or to collect any other private information about people. Doing so
would dishonor our work and waste the many hours we have spent on it.
Please visit our Website: http://www.httrack.com
*/
/* ------------------------------------------------------------ */
/* File: htscache_selftest.c subroutines: */
/* in-process self-test for the (ZIP) cache subsystem */
/* Author: Xavier Roche */
/* ------------------------------------------------------------ */
/* Drives the public cache API (cache_init / cache_add / cache_readex)
through a create -> read -> update cycle on a real on-disk ZIP cache,
asserting every header field and the (binary-safe) body round-trips.
Besides a few hand-crafted edge cases it stores a few thousand entries
(index/lookup scale) and a handful of large compressible/incompressible
bodies (zlib deflate/inflate). Reached via `httrack -#A <dir>`. */
#define HTS_INTERNAL_BYTECODE
#include "htscache_selftest.h"
#include "htscache.h"
#include "htscore.h"
#include "htslib.h"
#include "htszlib.h"
#include <stdio.h>
#include <string.h>
#define SELFTEST_VOLUME 3000 /* number of small entries in the scale pass */
/* Open a cache session. A write session (ro=0) rotates new.zip -> old.zip and
opens a fresh new.zip; a read session (ro=1) opens new.zip in place. */
static void selftest_open(cache_back *cache, httrackp *opt, int ro) {
memset(cache, 0, sizeof(*cache));
cache->type = 1;
cache->log = stderr;
cache->errlog = stderr;
cache->hashtable = coucal_new(0);
cache->ro = ro;
cache_init(cache, opt);
}
static void selftest_open_for_write(cache_back *cache, httrackp *opt) {
selftest_open(cache, opt, 0);
}
static void selftest_open_for_read(cache_back *cache, httrackp *opt) {
selftest_open(cache, opt, 1);
}
static void selftest_close(cache_back *cache) {
if (cache->dat != NULL) {
fclose(cache->dat);
cache->dat = NULL;
}
if (cache->ndx != NULL) {
fclose(cache->ndx);
cache->ndx = NULL;
}
if (cache->zipOutput != NULL) {
zipClose(cache->zipOutput,
"Created by HTTrack Website Copier (cache self-test)");
cache->zipOutput = NULL;
}
if (cache->zipInput != NULL) {
unzClose(cache->zipInput);
cache->zipInput = NULL;
}
/* hashtable is intentionally not coucal_delete()d: it would dump a stats
summary to stderr on every call, and this is a one-shot CLI subcommand
that exits right after (same choice as the other -# cache subcommands) */
}
/* Store one entry. The body is copied into a private buffer (any size), so
callers may pass const data and cache_add never sees a cast-away qualifier;
it consumes everything synchronously, so the copy is freed on return. */
static void store_entry(httrackp *opt, cache_back *cache, const char *adr,
const char *fil, const char *save, int statuscode,
const char *msg, const char *contenttype,
const char *charset, const char *lastmodified,
const char *etag, const char *location,
const char *body, size_t body_len) {
htsblk r;
char locbuf[HTS_URLMAXSIZE * 2];
char *bodycopy = NULL;
hts_init_htsblk(&r);
r.statuscode = statuscode;
r.size = (LLint) body_len;
strcpybuff(r.msg, msg);
strcpybuff(r.contenttype, contenttype);
strcpybuff(r.charset, charset);
strcpybuff(r.lastmodified, lastmodified);
strcpybuff(r.etag, etag);
strcpybuff(locbuf, location);
r.location = locbuf;
r.is_write = 0;
/* an empty body must be a NULL pointer: cache_add rejects a non-NULL
pointer with size 0 */
if (body_len != 0) {
bodycopy = malloct(body_len);
memcpy(bodycopy, body, body_len);
r.adr = bodycopy;
}
/* all_in_cache=1: keep the body in the ZIP whatever the content-type,
so the read path never depends on a file on disk */
cache_add(opt, cache, &r, adr, fil, save, 1, NULL);
if (bodycopy != NULL) {
freet(bodycopy);
}
}
/* Read one entry back and check every field. Returns the number of
mismatches (0 == success). */
static int check_entry(httrackp *opt, cache_back *cache, const char *adr,
const char *fil, int statuscode, const char *msg,
const char *contenttype, const char *charset,
const char *lastmodified, const char *etag,
const char *location, const char *body,
size_t body_len) {
int fail = 0;
char *locbuf = malloct(HTS_URLMAXSIZE * 2);
htsblk r;
locbuf[0] = '\0';
/* readonly=1: pure read, no rename/disk-write decision logic */
r = cache_readex(opt, cache, adr, fil, "", locbuf, NULL, 1);
#define CHECK_STR(field, want) \
do { \
if (strcmp((field), (want)) != 0) { \
fprintf(stderr, \
"cache-selftest: %s%s: " #field " is '%s', expected '%s'\n", \
adr, fil, (field), (want)); \
fail++; \
} \
} while (0)
if (r.statuscode != statuscode) {
fprintf(stderr, "cache-selftest: %s%s: statuscode is %d, expected %d\n",
adr, fil, r.statuscode, statuscode);
fail++;
}
CHECK_STR(r.msg, msg);
CHECK_STR(r.contenttype, contenttype);
CHECK_STR(r.charset, charset);
CHECK_STR(r.lastmodified, lastmodified);
CHECK_STR(r.etag, etag);
CHECK_STR(locbuf, location);
if (r.size != (LLint) body_len) {
fprintf(stderr, "cache-selftest: %s%s: size is " LLintP ", expected %d\n",
adr, fil, (LLint) r.size, (int) body_len);
fail++;
} else if (body_len != 0 &&
(r.adr == NULL || memcmp(r.adr, body, body_len) != 0)) {
fprintf(stderr, "cache-selftest: %s%s: body mismatch\n", adr, fil);
fail++;
}
#undef CHECK_STR
if (r.adr != NULL) {
freet(r.adr);
}
freet(locbuf);
return fail;
}
/* Fill a body of the requested size. kind 0 is highly compressible (a short
repeating pattern), kind 1 is incompressible (a deterministic PRNG), kind 2
alternates the two -- together they exercise both deflate outcomes. */
static void gen_body(char *buf, size_t len, int kind) {
unsigned int seed = 0x9e3779b1u ^ (unsigned int) len;
size_t j;
for (j = 0; j < len; j++) {
if (kind == 0 || (kind == 2 && (j & 1) == 0)) {
buf[j] = (char) ('A' + (j % 26));
} else {
seed = seed * 1103515245u + 12345u;
buf[j] = (char) (seed >> 16);
}
}
}
int cache_selftests(httrackp *opt, const char *dir) {
int failures = 0;
cache_back cache;
int i;
/* near-limit field values. The etag stresses htsblk.etag[256]; the location
stresses a long redirect URL. Each cached header line is read back through
a HTS_URLMAXSIZE-sized parse buffer ("<field>: <value>\r\n"), so the
round-trippable value is shorter than HTS_URLMAXSIZE: 1000 stays safely
under that real limit. */
static char etag_long[251];
static char location_long[1001];
/* a body with embedded NUL and high bytes, to prove binary safety */
static const char binary_body[] = {
'P', 'N', 'G', '\0', '\r', '\n', (char) 0xFF, (char) 0x80,
'\0', '\0', 'e', 'n', 'd', (char) 0xCA, (char) 0xFE, '\n'};
/* large bodies for the compression pass; kept alive across the write and
read passes so the read can compare against them */
static const size_t large_size[] = {200000, 200000, 50000};
const int large_count = (int) (sizeof(large_size) / sizeof(large_size[0]));
char *large_body[3];
/* edge-case bodies, named so store and read assert the exact same bytes */
const char *const body_index = "<html><body>hello</body></html>";
const char *const body_api = "{\"k\":\"v\"}";
const char *const body_updated = "<html><body>UPDATED CONTENT</body></html>";
const char *const body_404 = "<html><body>404 Not Found</body></html>";
memset(etag_long, 'E', sizeof(etag_long) - 1);
etag_long[sizeof(etag_long) - 1] = '\0';
memset(location_long, 'L', sizeof(location_long) - 1);
location_long[sizeof(location_long) - 1] = '\0';
for (i = 0; i < large_count; i++) {
large_body[i] = malloct(large_size[i]);
gen_body(large_body[i], large_size[i], i);
}
/* set up an isolated cache directory */
{
char base[HTS_URLMAXSIZE];
strcpybuff(base, dir);
if (base[0] != '\0' && base[strlen(base) - 1] != '/') {
strcatbuff(base, "/");
}
StringCopy(opt->path_log, base);
}
opt->cache = 1;
/* pass 1: create everything in a single write session */
selftest_open_for_write(&cache, opt);
/* edge cases: normal HTML page */
store_entry(opt, &cache, "example.com", "/", "example.com/index.html", 200,
"OK", "text/html", "utf-8", "Mon, 01 Jan 2024 00:00:00 GMT",
"etag-normal", "", body_index, strlen(body_index));
/* redirect: empty body, empty optional fields, near-limit location */
store_entry(opt, &cache, "example.com", "/moved", "example.com/moved.html",
301, "Moved Permanently", "text/html", "", "", "", location_long,
NULL, 0);
/* non-HTML content-type kept in cache via all_in_cache, near-limit etag */
store_entry(opt, &cache, "example.com", "/api", "example.com/api.json", 200,
"OK", "application/json", "utf-8",
"Tue, 02 Jan 2024 12:00:00 GMT", etag_long, "", body_api,
strlen(body_api));
/* binary body */
store_entry(opt, &cache, "example.com", "/logo", "example.com/logo.png", 200,
"OK", "image/png", "", "", "etag-bin", "", binary_body,
sizeof(binary_body));
/* error status with a body and a location (non-2xx codes are cached too) */
store_entry(opt, &cache, "example.com", "/gone", "example.com/gone.html", 404,
"Not Found", "text/html", "utf-8", "", "etag-404",
"https://example.com/where-it-went", body_404, strlen(body_404));
/* scale: a few thousand small entries */
for (i = 0; i < SELFTEST_VOLUME; i++) {
char fil[64], save[128], body[64];
sprintf(fil, "/v/%05d", i);
sprintf(save, "example.com/v/%05d.html", i);
sprintf(body, "<html>volume entry %d</html>", i);
store_entry(opt, &cache, "example.com", fil, save, 200, "OK", "text/html",
"utf-8", "", "", "", body, strlen(body));
}
/* compression: a few large bodies */
for (i = 0; i < large_count; i++) {
char fil[64], save[128];
sprintf(fil, "/big/%d.bin", i);
sprintf(save, "example.com/big/%d.bin", i);
store_entry(opt, &cache, "example.com", fil, save, 200, "OK",
"application/octet-stream", "", "", "", "", large_body[i],
large_size[i]);
}
selftest_close(&cache);
/* pass 2: read back and verify everything round-tripped */
selftest_open_for_read(&cache, opt);
failures += check_entry(opt, &cache, "example.com", "/", 200, "OK",
"text/html", "utf-8", "Mon, 01 Jan 2024 00:00:00 GMT",
"etag-normal", "", body_index, strlen(body_index));
failures += check_entry(opt, &cache, "example.com", "/moved", 301,
"Moved Permanently", "text/html", "", "", "",
location_long, NULL, 0);
failures +=
check_entry(opt, &cache, "example.com", "/api", 200, "OK",
"application/json", "utf-8", "Tue, 02 Jan 2024 12:00:00 GMT",
etag_long, "", body_api, strlen(body_api));
failures +=
check_entry(opt, &cache, "example.com", "/logo", 200, "OK", "image/png",
"", "", "etag-bin", "", binary_body, sizeof(binary_body));
failures += check_entry(opt, &cache, "example.com", "/gone", 404, "Not Found",
"text/html", "utf-8", "", "etag-404",
"https://example.com/where-it-went", body_404,
strlen(body_404));
for (i = 0; i < SELFTEST_VOLUME; i++) {
char fil[64], body[64];
sprintf(fil, "/v/%05d", i);
sprintf(body, "<html>volume entry %d</html>", i);
failures +=
check_entry(opt, &cache, "example.com", fil, 200, "OK", "text/html",
"utf-8", "", "", "", body, strlen(body));
}
for (i = 0; i < large_count; i++) {
char fil[64];
sprintf(fil, "/big/%d.bin", i);
failures += check_entry(opt, &cache, "example.com", fil, 200, "OK",
"application/octet-stream", "", "", "", "",
large_body[i], large_size[i]);
}
selftest_close(&cache);
/* pass 3: update one edge entry with new body and headers */
selftest_open_for_write(&cache, opt);
store_entry(opt, &cache, "example.com", "/", "example.com/index.html", 200,
"OK", "text/html", "iso-8859-1", "Wed, 03 Jan 2024 09:30:00 GMT",
"etag-updated", "", body_updated, strlen(body_updated));
selftest_close(&cache);
/* pass 4: re-read and confirm the updated value, not the old one */
selftest_open_for_read(&cache, opt);
failures +=
check_entry(opt, &cache, "example.com", "/", 200, "OK", "text/html",
"iso-8859-1", "Wed, 03 Jan 2024 09:30:00 GMT", "etag-updated",
"", body_updated, strlen(body_updated));
selftest_close(&cache);
for (i = 0; i < large_count; i++) {
freet(large_body[i]);
}
return failures;
}

49
src/htscache_selftest.h Normal file
View File

@@ -0,0 +1,49 @@
/* ------------------------------------------------------------ */
/*
HTTrack Website Copier, Offline Browser for Windows and Unix
Copyright (C) 2026 Xavier Roche and other contributors
SPDX-License-Identifier: GPL-3.0-or-later
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/>.
Ethical use: we kindly ask that you NOT use this software to harvest email
addresses or to collect any other private information about people. Doing so
would dishonor our work and waste the many hours we have spent on it.
Please visit our Website: http://www.httrack.com
*/
/* ------------------------------------------------------------ */
/* File: htscache_selftest.h */
/* Author: Xavier Roche */
/* ------------------------------------------------------------ */
#ifndef HTSCACHE_SELFTEST_DEFH
#define HTSCACHE_SELFTEST_DEFH
#ifdef HTS_INTERNAL_BYTECODE
#ifndef HTS_DEF_FWSTRUCT_httrackp
#define HTS_DEF_FWSTRUCT_httrackp
typedef struct httrackp httrackp;
#endif
/* Run the cache create/read/update self-test against a working directory.
Returns the number of failed checks (0 == success). */
int cache_selftests(httrackp *opt, const char *dir);
#endif
#endif

View File

@@ -1,7 +1,9 @@
/* ------------------------------------------------------------ */ /* ------------------------------------------------------------ */
/* /*
HTTrack Website Copier, Offline Browser for Windows and Unix HTTrack Website Copier, Offline Browser for Windows and Unix
Copyright (C) 1998-2017 Xavier Roche and other contributors Copyright (C) 1998 Xavier Roche and other contributors
SPDX-License-Identifier: GPL-3.0-or-later
This program is free software: you can redistribute it and/or modify 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 it under the terms of the GNU General Public License as published by
@@ -16,11 +18,9 @@ GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. along with this program. If not, see <http://www.gnu.org/licenses/>.
Important notes: Ethical use: we kindly ask that you NOT use this software to harvest email
addresses or to collect any other private information about people. Doing so
- We hereby ask people using this source NOT to use it in purpose of grabbing would dishonor our work and waste the many hours we have spent on it.
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 Please visit our Website: http://www.httrack.com
*/ */
@@ -201,8 +201,8 @@ HTSEXT_API int catch_url(T_SOC soc, char *url, char *method, char *data) {
while(strnotempty(line)) { while(strnotempty(line)) {
socinput(soc, line, 1000); socinput(soc, line, 1000);
treathead(NULL, NULL, NULL, &blkretour, line); // traiter treathead(NULL, NULL, NULL, &blkretour, line); // traiter
strcatbuff(data, line); strlcatbuff(data, line, CATCH_URL_DATA_SIZE);
strcatbuff(data, "\r\n"); strlcatbuff(data, "\r\n", CATCH_URL_DATA_SIZE);
} }
// CR/LF final de l'en tête inutile car déja placé via la ligne vide juste au dessus // CR/LF final de l'en tête inutile car déja placé via la ligne vide juste au dessus
//strcatbuff(data,"\r\n"); //strcatbuff(data,"\r\n");

View File

@@ -1,7 +1,9 @@
/* ------------------------------------------------------------ */ /* ------------------------------------------------------------ */
/* /*
HTTrack Website Copier, Offline Browser for Windows and Unix HTTrack Website Copier, Offline Browser for Windows and Unix
Copyright (C) 1998-2017 Xavier Roche and other contributors Copyright (C) 1998 Xavier Roche and other contributors
SPDX-License-Identifier: GPL-3.0-or-later
This program is free software: you can redistribute it and/or modify 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 it under the terms of the GNU General Public License as published by
@@ -16,11 +18,9 @@ GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. along with this program. If not, see <http://www.gnu.org/licenses/>.
Important notes: Ethical use: we kindly ask that you NOT use this software to harvest email
addresses or to collect any other private information about people. Doing so
- We hereby ask people using this source NOT to use it in purpose of grabbing would dishonor our work and waste the many hours we have spent on it.
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 Please visit our Website: http://www.httrack.com
*/ */
@@ -40,6 +40,9 @@ Please visit our Website: http://www.httrack.com
/* Library internal definictions */ /* Library internal definictions */
#ifdef HTS_INTERNAL_BYTECODE #ifdef HTS_INTERNAL_BYTECODE
// Capacity contract for the catch_url() 'data' buffer (32 Kb).
#define CATCH_URL_DATA_SIZE 32768
// Fonctions // Fonctions
void socinput(T_SOC soc, char *s, int max); void socinput(T_SOC soc, char *s, int max);

View File

@@ -1,7 +1,9 @@
/* ------------------------------------------------------------ */ /* ------------------------------------------------------------ */
/* /*
HTTrack Website Copier, Offline Browser for Windows and Unix HTTrack Website Copier, Offline Browser for Windows and Unix
Copyright (C) 1998-2017 Xavier Roche and other contributors Copyright (C) 1998 Xavier Roche and other contributors
SPDX-License-Identifier: GPL-3.0-or-later
This program is free software: you can redistribute it and/or modify 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 it under the terms of the GNU General Public License as published by
@@ -16,11 +18,9 @@ GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. along with this program. If not, see <http://www.gnu.org/licenses/>.
Important notes: Ethical use: we kindly ask that you NOT use this software to harvest email
addresses or to collect any other private information about people. Doing so
- We hereby ask people using this source NOT to use it in purpose of grabbing would dishonor our work and waste the many hours we have spent on it.
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 Please visit our Website: http://www.httrack.com
*/ */

View File

@@ -1,7 +1,9 @@
/* ------------------------------------------------------------ */ /* ------------------------------------------------------------ */
/* /*
HTTrack Website Copier, Offline Browser for Windows and Unix HTTrack Website Copier, Offline Browser for Windows and Unix
Copyright (C) 1998-2017 Xavier Roche and other contributors Copyright (C) 1998 Xavier Roche and other contributors
SPDX-License-Identifier: GPL-3.0-or-later
This program is free software: you can redistribute it and/or modify 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 it under the terms of the GNU General Public License as published by
@@ -16,11 +18,9 @@ GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. along with this program. If not, see <http://www.gnu.org/licenses/>.
Important notes: Ethical use: we kindly ask that you NOT use this software to harvest email
addresses or to collect any other private information about people. Doing so
- We hereby ask people using this source NOT to use it in purpose of grabbing would dishonor our work and waste the many hours we have spent on it.
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 Please visit our Website: http://www.httrack.com
*/ */

View File

@@ -1,7 +1,9 @@
/* ------------------------------------------------------------ */ /* ------------------------------------------------------------ */
/* /*
HTTrack Website Copier, Offline Browser for Windows and Unix HTTrack Website Copier, Offline Browser for Windows and Unix
Copyright (C) 1998-2013 Xavier Roche and other contributors Copyright (C) 2014 Xavier Roche and other contributors
SPDX-License-Identifier: GPL-3.0-or-later
This program is free software: you can redistribute it and/or modify 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 it under the terms of the GNU General Public License as published by
@@ -16,11 +18,9 @@ GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. along with this program. If not, see <http://www.gnu.org/licenses/>.
Important notes: Ethical use: we kindly ask that you NOT use this software to harvest email
addresses or to collect any other private information about people. Doing so
- We hereby ask people using this source NOT to use it in purpose of grabbing would dishonor our work and waste the many hours we have spent on it.
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 Please visit our Website: http://www.httrack.com
*/ */

View File

@@ -1,7 +1,9 @@
/* ------------------------------------------------------------ */ /* ------------------------------------------------------------ */
/* /*
HTTrack Website Copier, Offline Browser for Windows and Unix HTTrack Website Copier, Offline Browser for Windows and Unix
Copyright (C) 1998-2017 Xavier Roche and other contributors Copyright (C) 1998 Xavier Roche and other contributors
SPDX-License-Identifier: GPL-3.0-or-later
This program is free software: you can redistribute it and/or modify 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 it under the terms of the GNU General Public License as published by
@@ -16,11 +18,9 @@ GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. along with this program. If not, see <http://www.gnu.org/licenses/>.
Important notes: Ethical use: we kindly ask that you NOT use this software to harvest email
addresses or to collect any other private information about people. Doing so
- We hereby ask people using this source NOT to use it in purpose of grabbing would dishonor our work and waste the many hours we have spent on it.
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 Please visit our Website: http://www.httrack.com
*/ */

View File

@@ -1,7 +1,9 @@
/* ------------------------------------------------------------ */ /* ------------------------------------------------------------ */
/* /*
HTTrack Website Copier, Offline Browser for Windows and Unix HTTrack Website Copier, Offline Browser for Windows and Unix
Copyright (C) 1998-2017 Xavier Roche and other contributors Copyright (C) 1998 Xavier Roche and other contributors
SPDX-License-Identifier: GPL-3.0-or-later
This program is free software: you can redistribute it and/or modify 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 it under the terms of the GNU General Public License as published by
@@ -16,11 +18,9 @@ GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. along with this program. If not, see <http://www.gnu.org/licenses/>.
Important notes: Ethical use: we kindly ask that you NOT use this software to harvest email
addresses or to collect any other private information about people. Doing so
- We hereby ask people using this source NOT to use it in purpose of grabbing would dishonor our work and waste the many hours we have spent on it.
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 Please visit our Website: http://www.httrack.com
*/ */
@@ -3993,5 +3993,5 @@ void voidf(void) {
(void) a; (void) a;
} }
// HTTrack Website Copier Copyright (C) 1998-2017 Xavier Roche and other contributors // HTTrack Website Copier Copyright (C) 1998 Xavier Roche and other contributors
// //

View File

@@ -1,7 +1,9 @@
/* ------------------------------------------------------------ */ /* ------------------------------------------------------------ */
/* /*
HTTrack Website Copier, Offline Browser for Windows and Unix HTTrack Website Copier, Offline Browser for Windows and Unix
Copyright (C) 1998-2017 Xavier Roche and other contributors Copyright (C) 1998 Xavier Roche and other contributors
SPDX-License-Identifier: GPL-3.0-or-later
This program is free software: you can redistribute it and/or modify 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 it under the terms of the GNU General Public License as published by
@@ -16,11 +18,9 @@ GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. along with this program. If not, see <http://www.gnu.org/licenses/>.
Important notes: Ethical use: we kindly ask that you NOT use this software to harvest email
addresses or to collect any other private information about people. Doing so
- We hereby ask people using this source NOT to use it in purpose of grabbing would dishonor our work and waste the many hours we have spent on it.
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 Please visit our Website: http://www.httrack.com
*/ */

View File

@@ -1,7 +1,9 @@
/* ------------------------------------------------------------ */ /* ------------------------------------------------------------ */
/* /*
HTTrack Website Copier, Offline Browser for Windows and Unix HTTrack Website Copier, Offline Browser for Windows and Unix
Copyright (C) 1998-2017 Xavier Roche and other contributors Copyright (C) 1998 Xavier Roche and other contributors
SPDX-License-Identifier: GPL-3.0-or-later
This program is free software: you can redistribute it and/or modify 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 it under the terms of the GNU General Public License as published by
@@ -16,11 +18,9 @@ GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. along with this program. If not, see <http://www.gnu.org/licenses/>.
Important notes: Ethical use: we kindly ask that you NOT use this software to harvest email
addresses or to collect any other private information about people. Doing so
- We hereby ask people using this source NOT to use it in purpose of grabbing would dishonor our work and waste the many hours we have spent on it.
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 Please visit our Website: http://www.httrack.com
*/ */
@@ -40,11 +40,13 @@ Please visit our Website: http://www.httrack.com
#include "htscore.h" #include "htscore.h"
#include "htsdefines.h" #include "htsdefines.h"
#include "htsalias.h" #include "htsalias.h"
#include "htsbauth.h"
#include "htswrap.h" #include "htswrap.h"
#include "htsmodules.h" #include "htsmodules.h"
#include "htszlib.h" #include "htszlib.h"
#include "htscharset.h" #include "htscharset.h"
#include "htsencoding.h" #include "htsencoding.h"
#include "htscache_selftest.h"
#include "htsmd5.h" #include "htsmd5.h"
#include <ctype.h> #include <ctype.h>
@@ -138,6 +140,193 @@ static void basic_selftests(void) {
fil_normalized(source, buffer); fil_normalized(source, buffer);
// MD5 selftests // MD5 selftests
md5selftest(); md5selftest();
// cookie_get field extraction (tab-separated, 0-based)
{
char cbuf[8192];
assertf(strcmp(cookie_get(cbuf, "a\tb\tc", 0), "a") == 0);
assertf(strcmp(cookie_get(cbuf, "a\tb\tc", 1), "b") == 0);
assertf(strcmp(cookie_get(cbuf, "a\tb\tc", 2), "c") == 0);
// multi-char fields catch length/boundary bugs that 1-char fields hide
assertf(strcmp(cookie_get(cbuf, "host\tx\t/path/to", 0), "host") == 0);
assertf(strcmp(cookie_get(cbuf, "host\tx\t/path/to", 2), "/path/to") == 0);
assertf(strcmp(cookie_get(cbuf, "a\t\tc", 1), "") == 0); // empty field
assertf(strcmp(cookie_get(cbuf, "a\tb\tc", 9), "") == 0); // beyond last
}
// back_infostr() status-line formatting (no sockets: pure formatting over
// in-memory slots). Stresses a few thousand entries across every status-code
// arm. Regression for a clobber bug where the size/totalsize trailer was
// written straight into the destination, wiping the URL it had just built.
{
static const struct {
int code;
const char *tag;
} cases[] = {
{200, "READY "}, {-1, "ERROR "}, {-2, "TIMEOUT "},
{-3, "TOOSLOW "}, {400, "BADREQUEST "}, {403, "FORBIDDEN "},
{404, "NOT FOUND "}, {500, "SERVERROR "}, {999, "ERROR(999)"},
};
const int ncases = (int) (sizeof(cases) / sizeof(cases[0]));
const int n = 2000;
lien_back *slots = calloct(n, sizeof(lien_back));
char line[HTS_URLMAXSIZE * 4 + 1024];
char expect[HTS_URLMAXSIZE * 4 + 1024];
struct_back sb;
int idx;
sb.lnk = slots;
sb.count = n;
sb.ready = NULL;
sb.ready_size_bytes = 0;
for (idx = 0; idx < n; idx++) {
lien_back *const slot = &slots[idx];
slot->r.location = slot->location_buffer;
slot->status = STATUS_READY;
slot->r.statuscode = cases[idx % ncases].code;
slot->r.size = idx;
slot->r.totalsize = idx + 1;
snprintf(slot->url_adr, sizeof(slot->url_adr), "http://h%d.example", idx);
snprintf(slot->url_fil, sizeof(slot->url_fil), "/p/%d.html", idx);
}
for (idx = 0; idx < n; idx++) {
line[0] = '\0';
back_infostr(&sb, idx, 3, line, sizeof(line));
// Exact match (not substring): pins tag/URL/trailer order and rejects a
// partial clobber, duplication, or truncation that a presence check would
// let through. The expected format is stated here independently.
snprintf(expect, sizeof(expect),
"%s\"http://h%d.example/p/%d.html\" " LLintP " " LLintP " ",
cases[idx % ncases].tag, idx, idx, (LLint) idx,
(LLint) (idx + 1));
assertf(strcmp(line, expect) == 0);
}
// Near-maximal URL, driven through back_info() (which owns the status
// buffer internally and prints to a FILE*). url_adr + url_fil together
// overrun the old HTS_URLMAXSIZE*2+1024 buffer, so the bounded appends
// would abort unless that buffer is sized to hold both fields. Regression
// for that sizing -- exercising back_infostr() directly would miss it,
// since the caller's buffer is what matters.
{
lien_back *const slot = &slots[0];
const size_t adrlen = sizeof(slot->url_adr) - 8;
const size_t fillen = sizeof(slot->url_fil) - 8;
FILE *const fp = tmpfile();
size_t got;
assertf(fp != NULL);
slot->status = STATUS_READY;
slot->r.statuscode = 200;
slot->r.size = 1;
slot->r.totalsize = 2;
memset(slot->url_adr, 'a', adrlen);
slot->url_adr[adrlen] = '\0';
slot->url_fil[0] = '/';
memset(slot->url_fil + 1, 'b', fillen - 1);
slot->url_fil[fillen] = '\0';
back_info(&sb, 0, 3, fp);
rewind(fp);
got = fread(line, 1, sizeof(line) - 1, fp);
line[got] = '\0';
fclose(fp);
snprintf(expect, sizeof(expect),
"READY \"%s%s\" " LLintP " " LLintP " " LF, slot->url_adr,
slot->url_fil, (LLint) 1, (LLint) 2);
assertf(strcmp(line, expect) == 0);
}
freet(slots);
}
}
/* Self-tests for the htssafe.h bounded string ops (driven by httrack -#8).
Returns 0 if every bounded operation behaved correctly, 1 otherwise.
The abort-on-overflow guarantee is checked separately by the -#8 "overflow"
sub-mode (it aborts the process by design). */
static int string_safety_selftests(void) {
char buf[8];
/* strcpybuff into a sized array: exact copy */
strcpybuff(buf, "abc");
if (strcmp(buf, "abc") != 0)
return 1;
/* strcatbuff append within capacity */
strcatbuff(buf, "de");
if (strcmp(buf, "abcde") != 0)
return 1;
/* strncatbuff appends at most N source chars */
strcpybuff(buf, "ab");
strncatbuff(buf, "cdef", 2);
if (strcmp(buf, "abcd") != 0)
return 1;
/* strlcpybuff: explicit-capacity copy into a pointer destination, the form
the migration moves toward */
{
char storage[8];
char *const p = storage;
strlcpybuff(p, "hello", sizeof(storage));
if (strcmp(p, "hello") != 0)
return 1;
}
/* strcpybuff into a pointer destination: routes through the unchecked
strcpybuff_ptr_ fallback (the path the -#8 warning flags). The warning is
intentional here; we only verify the fallback still copies correctly. */
#if defined(__GNUC__)
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wattribute-warning"
#endif
{
char storage[8];
char *const p = storage;
strcpybuff(p, "ptr");
if (strcmp(p, "ptr") != 0)
return 1;
}
#if defined(__GNUC__)
#pragma GCC diagnostic pop
#endif
/* htsbuff: bounded builder over a fixed array (append, truncating append,
reset, and length tracking) */
{
char dst[8];
htsbuff b = htsbuff_array(dst);
htsbuff_cat(&b, "ab");
htsbuff_cat(&b, "cd");
if (strcmp(htsbuff_str(&b), "abcd") != 0 || b.len != 4)
return 1;
htsbuff_catn(&b, "efghij", 2); /* append at most 2 */
if (strcmp(htsbuff_str(&b), "abcdef") != 0)
return 1;
htsbuff_cpy(&b, "xyz"); /* reset */
if (strcmp(htsbuff_str(&b), "xyz") != 0 || b.len != 3)
return 1;
htsbuff_catc(&b, '!'); /* single character */
if (strcmp(htsbuff_str(&b), "xyz!") != 0 || b.len != 4)
return 1;
}
/* boundary: filling to exactly cap-1 must succeed (one more aborts, which the
-#8 overflow-buff mode checks) */
{
char d2[4];
htsbuff c = htsbuff_array(d2);
htsbuff_cat(&c, "abc");
if (strcmp(htsbuff_str(&c), "abc") != 0 || c.len != 3)
return 1;
}
return 0;
} }
static int hts_main_internal(int argc, char **argv, httrackp * opt); static int hts_main_internal(int argc, char **argv, httrackp * opt);
@@ -294,10 +483,10 @@ static int hts_main_internal(int argc, char **argv, httrackp * opt) {
/* Vérifier argv[] non vide */ /* Vérifier argv[] non vide */
if (strnotempty(argv[na])) { if (strnotempty(argv[na])) {
/* Vérifier Commande (alias) */ /* Resolve an option alias, if any */
result = result = optalias_check(argc, (const char *const *) argv, na, &tmp_argc,
optalias_check(argc, (const char *const *) argv, na, &tmp_argc, (char **) tmp_argv, sizeof(_tmp_argv[0]),
(char **) tmp_argv, tmp_error); tmp_error, sizeof(tmp_error));
if (!result) { if (!result) {
HTS_PANIC_PRINTF(tmp_error); HTS_PANIC_PRINTF(tmp_error);
htsmain_free(); htsmain_free();
@@ -1787,10 +1976,6 @@ static int hts_main_internal(int argc, char **argv, httrackp * opt) {
HTS_PANIC_PRINTF("Empty string given"); HTS_PANIC_PRINTF("Empty string given");
htsmain_free(); htsmain_free();
return -1; return -1;
} else if (strlen(argv[na]) >= 256) {
HTS_PANIC_PRINTF("Header line string too long");
htsmain_free();
return -1;
} }
StringCat(opt->headers, argv[na]); StringCat(opt->headers, argv[na]);
StringCat(opt->headers, "\r\n"); /* separator */ StringCat(opt->headers, "\r\n"); /* separator */
@@ -2012,6 +2197,19 @@ static int hts_main_internal(int argc, char **argv, httrackp * opt) {
case '#':{ // non documenté case '#':{ // non documenté
com++; com++;
switch (*com) { switch (*com) {
case 'A': // cache self-test: httrack -#A <dir>
if (na + 1 < argc) {
const int err = cache_selftests(opt, argv[na + 1]);
printf("cache-selftest: %s\n", err ? "FAIL" : "OK");
htsmain_free();
return err;
} else {
fprintf(stderr, "Option #A requires a directory argument\n");
htsmain_free();
return 1;
}
break;
case 'C': // list cache files : httrack -#C '*spid*.gif' will attempt to find the matching file case 'C': // list cache files : httrack -#C '*spid*.gif' will attempt to find the matching file
{ {
int hasFilter = 0; int hasFilter = 0;
@@ -2054,8 +2252,8 @@ static int hts_main_internal(int argc, char **argv, httrackp * opt) {
char firstline[256]; char firstline[256];
char *a = cacheNdx; char *a = cacheNdx;
a += cache_brstr(a, firstline); a += cache_brstr(a, firstline, sizeof(firstline));
a += cache_brstr(a, firstline); a += cache_brstr(a, firstline, sizeof(firstline));
while(a != NULL) { while(a != NULL) {
a = strchr(a + 1, '\n'); /* start of line */ a = strchr(a + 1, '\n'); /* start of line */
if (a) { if (a) {
@@ -2441,6 +2639,35 @@ static int hts_main_internal(int argc, char **argv, httrackp * opt) {
htsmain_free(); htsmain_free();
return 0; return 0;
break; break;
case '8': /* string-safety selftest: httrack -#8 [overflow <bigstr>] */
if (na + 1 < argc
&& strncmp(argv[na + 1], "overflow", 8) == 0) {
/* Deliberately exceed a sized buffer: the bounded op must
abort. The source comes from argv so its length is opaque
to the compiler (no static -Wstringop-overflow, genuine
runtime check). "overflow-buff" exercises htsbuff. */
char small[4];
const char *const src =
(na + 2 < argc) ? argv[na + 2] : "overflowing";
if (strcmp(argv[na + 1], "overflow-buff") == 0) {
htsbuff b = htsbuff_array(small);
htsbuff_cat(&b, src);
} else {
strcpybuff(small, src);
}
printf("strsafe: NOT aborted\n"); /* must be unreachable */
htsmain_free();
return 1;
} else {
const int err = string_safety_selftests();
printf("strsafe: %s\n", err ? "FAIL" : "OK");
htsmain_free();
return err;
}
break;
case '7': // hashtable selftest: httrack -#7 nb_entries case '7': // hashtable selftest: httrack -#7 nb_entries
basic_selftests(); basic_selftests();
if (++na < argc) { if (++na < argc) {
@@ -2691,11 +2918,6 @@ static int hts_main_internal(int argc, char **argv, httrackp * opt) {
return -1; return -1;
} else { } else {
na++; na++;
if (strlen(argv[na]) >= 126) {
HTS_PANIC_PRINTF("User-agent length too long");
htsmain_free();
return -1;
}
StringCopy(opt->user_agent, argv[na]); StringCopy(opt->user_agent, argv[na]);
if (StringNotEmpty(opt->user_agent)) if (StringNotEmpty(opt->user_agent))
opt->user_agent_send = 1; opt->user_agent_send = 1;
@@ -2899,7 +3121,9 @@ static int hts_main_internal(int argc, char **argv, httrackp * opt) {
} }
{ {
char n_lock[256]; /* Sized to the concat-buffer capacity so it can always hold the lock-file
path produced by fconcat(), even with a long log path (issue #183). */
char n_lock[OPT_GET_BUFF_SIZE(opt)];
// on peut pas avoir un affichage ET un fichier log // on peut pas avoir un affichage ET un fichier log
// ca sera pour la version 2 // ca sera pour la version 2

View File

@@ -1,7 +1,9 @@
/* ------------------------------------------------------------ */ /* ------------------------------------------------------------ */
/* /*
HTTrack Website Copier, Offline Browser for Windows and Unix HTTrack Website Copier, Offline Browser for Windows and Unix
Copyright (C) 1998-2017 Xavier Roche and other contributors Copyright (C) 1998 Xavier Roche and other contributors
SPDX-License-Identifier: GPL-3.0-or-later
This program is free software: you can redistribute it and/or modify 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 it under the terms of the GNU General Public License as published by
@@ -16,11 +18,9 @@ GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. along with this program. If not, see <http://www.gnu.org/licenses/>.
Important notes: Ethical use: we kindly ask that you NOT use this software to harvest email
addresses or to collect any other private information about people. Doing so
- We hereby ask people using this source NOT to use it in purpose of grabbing would dishonor our work and waste the many hours we have spent on it.
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 Please visit our Website: http://www.httrack.com
*/ */

View File

@@ -1,7 +1,9 @@
/* ------------------------------------------------------------ */ /* ------------------------------------------------------------ */
/* /*
HTTrack Website Copier, Offline Browser for Windows and Unix HTTrack Website Copier, Offline Browser for Windows and Unix
Copyright (C) 1998-2017 Xavier Roche and other contributors Copyright (C) 1998 Xavier Roche and other contributors
SPDX-License-Identifier: GPL-3.0-or-later
This program is free software: you can redistribute it and/or modify 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 it under the terms of the GNU General Public License as published by
@@ -16,11 +18,9 @@ GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. along with this program. If not, see <http://www.gnu.org/licenses/>.
Important notes: Ethical use: we kindly ask that you NOT use this software to harvest email
addresses or to collect any other private information about people. Doing so
- We hereby ask people using this source NOT to use it in purpose of grabbing would dishonor our work and waste the many hours we have spent on it.
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 Please visit our Website: http://www.httrack.com
*/ */

View File

@@ -1,7 +1,9 @@
/* ------------------------------------------------------------ */ /* ------------------------------------------------------------ */
/* /*
HTTrack Website Copier, Offline Browser for Windows and Unix HTTrack Website Copier, Offline Browser for Windows and Unix
Copyright (C) 1998-2017 Xavier Roche and other contributors Copyright (C) 2013 Xavier Roche and other contributors
SPDX-License-Identifier: GPL-3.0-or-later
This program is free software: you can redistribute it and/or modify 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 it under the terms of the GNU General Public License as published by
@@ -16,11 +18,9 @@ GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. along with this program. If not, see <http://www.gnu.org/licenses/>.
Important notes: Ethical use: we kindly ask that you NOT use this software to harvest email
addresses or to collect any other private information about people. Doing so
- We hereby ask people using this source NOT to use it in purpose of grabbing would dishonor our work and waste the many hours we have spent on it.
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 Please visit our Website: http://www.httrack.com
*/ */

View File

@@ -1,7 +1,9 @@
/* ------------------------------------------------------------ */ /* ------------------------------------------------------------ */
/* /*
HTTrack Website Copier, Offline Browser for Windows and Unix HTTrack Website Copier, Offline Browser for Windows and Unix
Copyright (C) 1998-2017 Xavier Roche and other contributors Copyright (C) 2013 Xavier Roche and other contributors
SPDX-License-Identifier: GPL-3.0-or-later
This program is free software: you can redistribute it and/or modify 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 it under the terms of the GNU General Public License as published by
@@ -16,11 +18,9 @@ GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. along with this program. If not, see <http://www.gnu.org/licenses/>.
Important notes: Ethical use: we kindly ask that you NOT use this software to harvest email
addresses or to collect any other private information about people. Doing so
- We hereby ask people using this source NOT to use it in purpose of grabbing would dishonor our work and waste the many hours we have spent on it.
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 Please visit our Website: http://www.httrack.com
*/ */

View File

@@ -1,7 +1,9 @@
/* ------------------------------------------------------------ */ /* ------------------------------------------------------------ */
/* /*
HTTrack Website Copier, Offline Browser for Windows and Unix HTTrack Website Copier, Offline Browser for Windows and Unix
Copyright (C) 1998-2017 Xavier Roche and other contributors Copyright (C) 1998 Xavier Roche and other contributors
SPDX-License-Identifier: GPL-3.0-or-later
This program is free software: you can redistribute it and/or modify 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 it under the terms of the GNU General Public License as published by
@@ -16,11 +18,9 @@ GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. along with this program. If not, see <http://www.gnu.org/licenses/>.
Important notes: Ethical use: we kindly ask that you NOT use this software to harvest email
addresses or to collect any other private information about people. Doing so
- We hereby ask people using this source NOT to use it in purpose of grabbing would dishonor our work and waste the many hours we have spent on it.
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 Please visit our Website: http://www.httrack.com
*/ */

View File

@@ -1,7 +1,9 @@
/* ------------------------------------------------------------ */ /* ------------------------------------------------------------ */
/* /*
HTTrack Website Copier, Offline Browser for Windows and Unix HTTrack Website Copier, Offline Browser for Windows and Unix
Copyright (C) 1998-2017 Xavier Roche and other contributors Copyright (C) 1998 Xavier Roche and other contributors
SPDX-License-Identifier: GPL-3.0-or-later
This program is free software: you can redistribute it and/or modify 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 it under the terms of the GNU General Public License as published by
@@ -16,11 +18,9 @@ GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. along with this program. If not, see <http://www.gnu.org/licenses/>.
Important notes: Ethical use: we kindly ask that you NOT use this software to harvest email
addresses or to collect any other private information about people. Doing so
- We hereby ask people using this source NOT to use it in purpose of grabbing would dishonor our work and waste the many hours we have spent on it.
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 Please visit our Website: http://www.httrack.com
*/ */

View File

@@ -1,7 +1,9 @@
/* ------------------------------------------------------------ */ /* ------------------------------------------------------------ */
/* /*
HTTrack Website Copier, Offline Browser for Windows and Unix HTTrack Website Copier, Offline Browser for Windows and Unix
Copyright (C) 1998-2017 Xavier Roche and other contributors Copyright (C) 1998 Xavier Roche and other contributors
SPDX-License-Identifier: GPL-3.0-or-later
This program is free software: you can redistribute it and/or modify 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 it under the terms of the GNU General Public License as published by
@@ -16,11 +18,9 @@ GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. along with this program. If not, see <http://www.gnu.org/licenses/>.
Important notes: Ethical use: we kindly ask that you NOT use this software to harvest email
addresses or to collect any other private information about people. Doing so
- We hereby ask people using this source NOT to use it in purpose of grabbing would dishonor our work and waste the many hours we have spent on it.
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 Please visit our Website: http://www.httrack.com
*/ */

View File

@@ -1,7 +1,9 @@
/* ------------------------------------------------------------ */ /* ------------------------------------------------------------ */
/* /*
HTTrack Website Copier, Offline Browser for Windows and Unix HTTrack Website Copier, Offline Browser for Windows and Unix
Copyright (C) 1998-2017 Xavier Roche and other contributors Copyright (C) 1998 Xavier Roche and other contributors
SPDX-License-Identifier: GPL-3.0-or-later
This program is free software: you can redistribute it and/or modify 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 it under the terms of the GNU General Public License as published by
@@ -16,11 +18,9 @@ GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. along with this program. If not, see <http://www.gnu.org/licenses/>.
Important notes: Ethical use: we kindly ask that you NOT use this software to harvest email
addresses or to collect any other private information about people. Doing so
- We hereby ask people using this source NOT to use it in purpose of grabbing would dishonor our work and waste the many hours we have spent on it.
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 Please visit our Website: http://www.httrack.com
*/ */

View File

@@ -1,7 +1,9 @@
/* ------------------------------------------------------------ */ /* ------------------------------------------------------------ */
/* /*
HTTrack Website Copier, Offline Browser for Windows and Unix HTTrack Website Copier, Offline Browser for Windows and Unix
Copyright (C) 1998-2017 Xavier Roche and other contributors Copyright (C) 1998 Xavier Roche and other contributors
SPDX-License-Identifier: GPL-3.0-or-later
This program is free software: you can redistribute it and/or modify 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 it under the terms of the GNU General Public License as published by
@@ -16,11 +18,9 @@ GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. along with this program. If not, see <http://www.gnu.org/licenses/>.
Important notes: Ethical use: we kindly ask that you NOT use this software to harvest email
addresses or to collect any other private information about people. Doing so
- We hereby ask people using this source NOT to use it in purpose of grabbing would dishonor our work and waste the many hours we have spent on it.
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 Please visit our Website: http://www.httrack.com
*/ */
@@ -202,7 +202,7 @@ Please visit our Website: http://www.httrack.com
/* Taille max ligne de commande (>=HTS_URLMAXSIZE*2) */ /* Taille max ligne de commande (>=HTS_URLMAXSIZE*2) */
#define HTS_CDLMAXSIZE 1024 #define HTS_CDLMAXSIZE 1024
/* Copyright (C) 1998-2017 Xavier Roche and other contributors */ /* Copyright (C) 1998 Xavier Roche and other contributors */
#define HTTRACK_AFF_AUTHORS "[XR&CO'2014]" #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 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 HTTRACK_WEB "http://www.httrack.com"

View File

@@ -1,7 +1,9 @@
/* ------------------------------------------------------------ */ /* ------------------------------------------------------------ */
/* /*
HTTrack Website Copier, Offline Browser for Windows and Unix HTTrack Website Copier, Offline Browser for Windows and Unix
Copyright (C) 1998-2017 Xavier Roche and other contributors Copyright (C) 1998 Xavier Roche and other contributors
SPDX-License-Identifier: GPL-3.0-or-later
This program is free software: you can redistribute it and/or modify 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 it under the terms of the GNU General Public License as published by
@@ -16,11 +18,9 @@ GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. along with this program. If not, see <http://www.gnu.org/licenses/>.
Important notes: Ethical use: we kindly ask that you NOT use this software to harvest email
addresses or to collect any other private information about people. Doing so
- We hereby ask people using this source NOT to use it in purpose of grabbing would dishonor our work and waste the many hours we have spent on it.
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 Please visit our Website: http://www.httrack.com
*/ */

View File

@@ -1,7 +1,9 @@
/* ------------------------------------------------------------ */ /* ------------------------------------------------------------ */
/* /*
HTTrack Website Copier, Offline Browser for Windows and Unix HTTrack Website Copier, Offline Browser for Windows and Unix
Copyright (C) 1998-2017 Xavier Roche and other contributors Copyright (C) 1998 Xavier Roche and other contributors
SPDX-License-Identifier: GPL-3.0-or-later
This program is free software: you can redistribute it and/or modify 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 it under the terms of the GNU General Public License as published by
@@ -16,11 +18,9 @@ GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. along with this program. If not, see <http://www.gnu.org/licenses/>.
Important notes: Ethical use: we kindly ask that you NOT use this software to harvest email
addresses or to collect any other private information about people. Doing so
- We hereby ask people using this source NOT to use it in purpose of grabbing would dishonor our work and waste the many hours we have spent on it.
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 Please visit our Website: http://www.httrack.com
*/ */

View File

@@ -1,7 +1,9 @@
/* ------------------------------------------------------------ */ /* ------------------------------------------------------------ */
/* /*
HTTrack Website Copier, Offline Browser for Windows and Unix HTTrack Website Copier, Offline Browser for Windows and Unix
Copyright (C) 1998-2017 Xavier Roche and other contributors Copyright (C) 1998 Xavier Roche and other contributors
SPDX-License-Identifier: GPL-3.0-or-later
This program is free software: you can redistribute it and/or modify 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 it under the terms of the GNU General Public License as published by
@@ -16,11 +18,9 @@ GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. along with this program. If not, see <http://www.gnu.org/licenses/>.
Important notes: Ethical use: we kindly ask that you NOT use this software to harvest email
addresses or to collect any other private information about people. Doing so
- We hereby ask people using this source NOT to use it in purpose of grabbing would dishonor our work and waste the many hours we have spent on it.
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 Please visit our Website: http://www.httrack.com
*/ */
@@ -182,7 +182,8 @@ void help_wizard(httrackp * opt) {
printf("\n"); printf("\n");
printf("Welcome to HTTrack Website Copier (Offline Browser) " HTTRACK_VERSION printf("Welcome to HTTrack Website Copier (Offline Browser) " HTTRACK_VERSION
"%s\n", hts_get_version_info(opt)); "%s\n", hts_get_version_info(opt));
printf("Copyright (C) 1998-2017 Xavier Roche and other contributors\n"); printf("Copyright (C) 1998-%s Xavier Roche and other contributors\n",
&__DATE__[7]);
#ifdef _WIN32 #ifdef _WIN32
printf("Note: You are running the commandline version,\n"); printf("Note: You are running the commandline version,\n");
printf("run 'WinHTTrack.exe' to get the GUI version.\n"); printf("run 'WinHTTrack.exe' to get the GUI version.\n");
@@ -409,7 +410,7 @@ void help_catchurl(const char *dest_path) {
if (soc != INVALID_SOCKET) { if (soc != INVALID_SOCKET) {
char BIGSTK url[HTS_URLMAXSIZE * 2]; char BIGSTK url[HTS_URLMAXSIZE * 2];
char method[32]; char method[32];
char BIGSTK data[32768]; char BIGSTK data[CATCH_URL_DATA_SIZE];
url[0] = method[0] = data[0] = '\0'; url[0] = method[0] = data[0] = '\0';
// //
@@ -604,7 +605,7 @@ void help(const char *app, int more) {
infomsg(" %E from email address sent in HTTP headers"); infomsg(" %E from email address sent in HTTP headers");
infomsg infomsg
(" %F footer string in Html code (-%F \"Mirrored [from host %s [file %s [at %s]]]\""); (" %F footer string in Html code (-%F \"Mirrored [from host %s [file %s [at %s]]]\"");
infomsg(" %l preffered language (-%l \"fr, en, jp, *\""); infomsg(" %l preferred language (-%l \"fr, en, jp, *\"");
infomsg(" %a accepted formats (-%a \"text/html,image/png;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(" %X additional HTTP header line (-%X \"X-Magic: 42\"");
infomsg(""); infomsg("");
@@ -712,7 +713,7 @@ void help(const char *app, int more) {
infomsg(" '%N' Name of file, including file type (ex: image.gif)"); infomsg(" '%N' Name of file, including file type (ex: image.gif)");
infomsg(" '%t' File type (ex: gif)"); infomsg(" '%t' File type (ex: gif)");
infomsg(" '%p' Path [without ending /] (ex: /someimages)"); infomsg(" '%p' Path [without ending /] (ex: /someimages)");
infomsg(" '%h' Host name (ex: www.someweb.com)"); infomsg(" '%h' Host name (ex: www.example.com)");
infomsg(" '%M' URL MD5 (128 bits, 32 ascii bytes)"); infomsg(" '%M' URL MD5 (128 bits, 32 ascii bytes)");
infomsg(" '%Q' query string MD5 (128 bits, 32 ascii bytes)"); infomsg(" '%Q' query string MD5 (128 bits, 32 ascii bytes)");
infomsg(" '%k' full query string"); infomsg(" '%k' full query string");
@@ -767,21 +768,21 @@ void help(const char *app, int more) {
infomsg("Details: Option %W: External callbacks prototypes"); infomsg("Details: Option %W: External callbacks prototypes");
infomsg("see htsdefines.h"); infomsg("see htsdefines.h");
infomsg(""); infomsg("");
infomsg("example: httrack www.someweb.com/bob/"); infomsg("example: httrack www.example.com/bob/");
infomsg("means: mirror site www.someweb.com/bob/ and only this site"); infomsg("means: mirror site www.example.com/bob/ and only this site");
infomsg(""); infomsg("");
infomsg infomsg
("example: httrack www.someweb.com/bob/ www.anothertest.com/mike/ +*.com/*.jpg -mime:application/*"); ("example: httrack www.example.com/bob/ www.anothertest.com/mike/ +*.com/*.jpg -mime:application/*");
infomsg infomsg
("means: mirror the two sites together (with shared links) and accept any .jpg files on .com sites"); ("means: mirror the two sites together (with shared links) and accept any .jpg files on .com sites");
infomsg(""); infomsg("");
infomsg("example: httrack www.someweb.com/bob/bobby.html +* -r6"); infomsg("example: httrack www.example.com/bob/bobby.html +* -r6");
infomsg infomsg
("means get all files starting from bobby.html, with 6 link-depth, and possibility of going everywhere on the web"); ("means get all files starting from bobby.html, with 6 link-depth, and possibility of going everywhere on the web");
infomsg(""); infomsg("");
infomsg infomsg
("example: httrack www.someweb.com/bob/bobby.html --spider -P proxy.myhost.com:8080"); ("example: httrack www.example.com/bob/bobby.html --spider -P proxy.myhost.com:8080");
infomsg("runs the spider on www.someweb.com/bob/bobby.html using a proxy"); infomsg("runs the spider on www.example.com/bob/bobby.html using a proxy");
infomsg(""); infomsg("");
infomsg("example: httrack --update"); infomsg("example: httrack --update");
infomsg("updates a mirror in the current folder"); infomsg("updates a mirror in the current folder");
@@ -795,7 +796,10 @@ void help(const char *app, int more) {
snprintf(info, sizeof(info), "HTTrack version " HTTRACK_VERSION "%s", snprintf(info, sizeof(info), "HTTrack version " HTTRACK_VERSION "%s",
hts_is_available()); hts_is_available());
infomsg(info); infomsg(info);
infomsg("Copyright (C) 1998-2017 Xavier Roche and other contributors"); snprintf(info, sizeof(info),
"Copyright (C) 1998-%s Xavier Roche and other contributors",
&__DATE__[7]);
infomsg(info);
#ifdef HTS_PLATFORM_NAME #ifdef HTS_PLATFORM_NAME
infomsg("[compiled: " HTS_PLATFORM_NAME "]"); infomsg("[compiled: " HTS_PLATFORM_NAME "]");
#endif #endif

Some files were not shown because too many files have changed in this diff Show More