# Changelog

All notable changes to this project will be documented in this file.

The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
and this project adheres to
[Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [Unreleased]

## [1.3.3] - 2026-06-11

### Added

- ci: Add a dedicated CodeQL scanning job targeting GitHub Actions workflows
  while streamlining the C/C++ analysis job
  ([d8e07c0](https://github.com/fangfufu/httpdirfs/commit/d8e07c0a62e1b465d51034afb07cec02b9814076),
  [c02c0d1](https://github.com/fangfufu/httpdirfs/commit/c02c0d1d8a7ee7bd474ce340dc5e48aac4d0c68b)).

### Changed

- Update and expand `USAGE.md` to comprehensively document raw help options and
  FUSE/module flags, linking to Git commit `0855c0a`
  ([2bc5306](https://github.com/fangfufu/httpdirfs/commit/2bc5306da9155998a666e138379440c95029cdbf)).
- ci: Update pre-commit hook revisions for `pre-commit-hooks`, `codespell`,
  `mdformat`, and `yamlfmt`
  ([8cf9d4c](https://github.com/fangfufu/httpdirfs/commit/8cf9d4c9aa1a989f1b3ef0466e8b09a84ff2aa64)).
- test: Update unity test framework subproject wrap file to track the latest
  master branch commit
  ([2b4c765](https://github.com/fangfufu/httpdirfs/commit/2b4c7654a772e275bdc014ddd3d51f39152a9ee3)).
- ci: Replace legacy Prettier hooks with `yamlfmt` and `mdformat` (with GFM and
  alerts plugins) to format all Markdown and YAML files repo-wide, removing
  obsolete formatting bypass tags
  ([a7d2931](https://github.com/fangfufu/httpdirfs/commit/a7d2931699ae98e847df4a14594601a7935af45b)).
- ci: Restrict automated pull request pre-commit hook runs to branches targeting
  the `master` branch
  ([30dac3e](https://github.com/fangfufu/httpdirfs/commit/30dac3e231263f4f4b22a48ba3e1423c37f1af24)).
- ci: Modernize pre-commit configuration readability with clean multi-line block
  literal scripts and structure the `PKG_CONFIG_PATH` definition in `build.yml`
  incrementally
  ([4c8f561](https://github.com/fangfufu/httpdirfs/commit/4c8f56113b4c7674bd95446f7060792946fc1fec)).
- doc: Fix grammar regarding parsing options in `README.md`
  ([3746293](https://github.com/fangfufu/httpdirfs/commit/374629327241405a557e1b5226e1d35ff9d3bbe2)).

### Fixed

- ci: Harden GitHub Actions workflows (`build.yml` and `pre-commit.yml`) by
  explicitly defining read-only contents permissions to resolve CodeQL workflow
  permissions alerts
  ([81b87a0](https://github.com/fangfufu/httpdirfs/commit/81b87a03dd7c21858e89c8b86b3bfb16b2489eb9),
  [52b9baa](https://github.com/fangfufu/httpdirfs/commit/52b9baa0414345d253738e471b82b01e61e148c5)).
- doc: Fix typos in documentation
  ([ca848fc](https://github.com/fangfufu/httpdirfs/commit/ca848fc657b4fb60467070d1123fd9b0f839c154)).

## [1.3.2] - 2026-05-29

### Added

- Add opt-in `--external-links` feature to parse absolute cross-origin directory
  links from HTML listings and expose them as local files and subdirectories,
  featuring first-wins deduplication and same-origin scoping of headers and
  credentials ([edce0ca](https://github.com/fangfufu/httpdirfs/commit/edce0ca)).
- Add persistent caching support for external links, mapping and sanitizing
  cache paths dynamically to prevent directory traversal
  ([855e134](https://github.com/fangfufu/httpdirfs/commit/855e134)).
- Introduce comprehensive unit and integration tests verifying external links
  detection, filename sanitization, same-origin credential isolation, cache
  mapping, and robust error handling
  ([edce0ca](https://github.com/fangfufu/httpdirfs/commit/edce0ca),
  [855e134](https://github.com/fangfufu/httpdirfs/commit/855e134)).
- Add `--cache-min-size` and `--cache-max-size` command-line flags and
  configuration options to dynamically enforce file size thresholds for
  persistent caching
  ([1547e39](https://github.com/fangfufu/httpdirfs/commit/1547e39)).
- Introduce unit and integration tests verifying caching thresholds, including
  boundary conditions and bypass behavior
  ([1547e39](https://github.com/fangfufu/httpdirfs/commit/1547e39)).

### Changed

- Update macOS build job in GitHub Actions workflow to only run unit tests and
  exclude integration tests, which are unsupported due to the lack of
  FUSE/macFUSE in the GitHub Actions runner environment
  ([93bb8b5](https://github.com/fangfufu/httpdirfs/commit/93bb8b5)).
- Optimize macOS CI workflow by removing redundant packages (`openssl`, `curl`,
  and `pkg-config`) from the brew installation step, as these are pre-installed
  in the runner environment
  ([bd3503c](https://github.com/fangfufu/httpdirfs/commit/bd3503c)).
- Suppress zero-length file checks in the long integration test suite,
  preventing redundant skip messages when running integration tests under the
  long profile since zero-length files are only generated under the short
  profile ([e8c6e16](https://github.com/fangfufu/httpdirfs/commit/e8c6e16)).
- Rewrite and expand `USAGE.md` into a comprehensive reference manual detailing
  all 35 command-line flags, option syntax, security considerations, and
  defaults ([37bb031](https://github.com/fangfufu/httpdirfs/commit/37bb031)).
- Implement complete dynamic global state reset in `tearDown()` in
  `tests/test_link.c` to prevent configuration and root link table mutations
  from leaking between unit tests
  ([1a13d41](https://github.com/fangfufu/httpdirfs/commit/1a13d41)).
- Improve integration test compatibility with BSD and macOS systems by replacing
  GNU-specific `find -print -quit` options with portable POSIX pipelines using
  `head -n 1` ([47d79de](https://github.com/fangfufu/httpdirfs/commit/47d79de)).

### Fixed

- Fix origin validation by canonicalizing default ports (HTTP/80 and HTTPS/443)
  in `is_cross_origin()` checks, ensuring same-origin URLs utilizing default
  ports are not misclassified as cross-origin
  ([7ca2f2a](https://github.com/fangfufu/httpdirfs/commit/7ca2f2a)).
- Fix argument parsing and help output when parsing `--help` or `--version`
  options internally
  ([860453a](https://github.com/fangfufu/httpdirfs/commit/860453a)).
- Harden argument parsing error handling by terminating early with
  `exit(EXIT_FAILURE)` instead of returning non-zero error codes from
  `parse_arg_list`
  ([8d13093](https://github.com/fangfufu/httpdirfs/commit/8d13093)).

## [1.3.1] - 2026-05-27

### Added

- Add comprehensive unit and integration tests for duplicate URL handling,
  including unit tests for `linknames_equal`, `hash_str`, `LinkHashSet`
  operations, and `LinkTable_parse_html`
  ([4534563](https://github.com/fangfufu/httpdirfs/commit/4534563)).
- Extend the system integration test HTTP server to inject duplicate URLs and
  directories, and implement mounted directory integration tests to verify
  robust FUSE duplicate deduplication
  ([4534563](https://github.com/fangfufu/httpdirfs/commit/4534563)).
- Expose and document internal `LinkHashSet` operations and comparison helpers
  in `link.h` using Doxygen
  ([4534563](https://github.com/fangfufu/httpdirfs/commit/4534563)).

### Changed

- Optimize duplicate link detection during HTML parsing by replacing the
  $O(N^2)$ linear scan in `HTML_to_LinkTable` with a custom open-addressing hash
  set (`LinkHashSet`) using linear probing and a djb2-based `hash_str` function
  ([26c0c5c](https://github.com/fangfufu/httpdirfs/commit/26c0c5c)).
- Refine HTTP version negotiation behavior in `Link_to_curl` to gracefully fall
  back to HTTP/2 (`CURL_HTTP_VERSION_2_0`) if negotiation for HTTP/3
  (`CURL_HTTP_VERSION_3`) is unsupported or fails
  ([5de0dd6](https://github.com/fangfufu/httpdirfs/commit/5de0dd6)).

### Fixed

- Fix formatting in error log outputs by adding missing newlines (`\n`) to
  multiple `lprintf(error, ...)` calls logging curl easy setup/info errors in
  `src/link.c` and `src/network.c`
  ([2f5cf96](https://github.com/fangfufu/httpdirfs/commit/2f5cf96)).

## [1.3.0] - 2026-05-27

Creating a new minor release, because of the following major changes:

- The new threading model of the cache system, which allows multiple downloads
  (blocking foreground and background) to be done simultaneously.
- When cache system is enabled, the downloading thread yields as soon as there
  is enough data to reply to the FUSE read call.
- New pre-commit hooks to help developers to maintain a basic level of quality
  in each commit.
- New unit tests which test individual software components.
- New system integration tests which launch a HTTP server, then mount it for
  read testing. There are two variants:
  - A short test which tests the filesystem against different edge case
    filenames.
  - A long test which do multithread read on a 1GB file with different block
    sizes.

### Added

- Dynamically scale the number of background prefetch worker threads to match up
  to half of the maximum concurrent connection capacity (`CONFIG.max_conns`
  capped at `DEFAULT_NETWORK_MAX_CONNS`), transitioning from a single hardcoded
  thread to improve performance when multiple concurrent active downloads are
  supported ([2c39a7a](https://github.com/fangfufu/httpdirfs/commit/2c39a7a)).
- Add a unit test `test_Cache_alloc_num_bg_workers` to verify correct background
  worker allocation scaling under different network connection capacities
  ([2c39a7a](https://github.com/fangfufu/httpdirfs/commit/2c39a7a)).
- Implement a thread-safe manual reference-counting mechanism
  (`ActiveDownload_ref` and `ActiveDownload_unref`) for `ActiveDownload` nodes
  to prevent Use-After-Free (UAF) vulnerabilities during concurrent read
  operations, background transfers, and cache teardown
  ([9c34463](https://github.com/fangfufu/httpdirfs/commit/9c34463)).
- Add a unit test `test_Cache_free_active_downloads` to verify that active
  download nodes are not prematurely freed while waiter threads are still active
  ([9c34463](https://github.com/fangfufu/httpdirfs/commit/9c34463)).
- Implement a robust shutdown handshake mechanism in `Cache_free` to coordinate
  safe cache teardown when reader threads are actively blocked on segment
  downloads, ensuring all threads unregister before mutexes and condition
  variables are destroyed
  ([a01c9b1](https://github.com/fangfufu/httpdirfs/commit/a01c9b1)).
- Add a unit test `test_Cache_free_active_downloads_with_waiters` to exercise
  and verify proper thread synchronization and early-exit cleanup during cache
  shutdown ([a01c9b1](https://github.com/fangfufu/httpdirfs/commit/a01c9b1)).
- Add standardized GPLv3/OpenSSL copyright headers and detailed Doxygen
  file-level `\brief` annotations to all C source and header files under the
  `src/` directory to improve legal compliance and maintain consistent
  documentation headers
  ([f621da7](https://github.com/fangfufu/httpdirfs/commit/f621da7),
  [666d53a](https://github.com/fangfufu/httpdirfs/commit/666d53a)).
- Add `CURLOPT_PIPEWAIT` setting to curl easy handles to optimize HTTP/2
  multiplexing during concurrent file and directory transfers
  ([4114977](https://github.com/fangfufu/httpdirfs/commit/4114977)).
- Support HTTP/3 (QUIC) protocol version negotiation with automatic and seamless
  fallback to HTTP/2 or HTTP/1.1 when unavailable
  ([4114977](https://github.com/fangfufu/httpdirfs/commit/4114977)).
- Implement shutdown memory leak detection in `DEBUG` builds, recursively
  traversing the virtual filesystem at shutdown to tear down resources and
  verify that no memory leaks exist
  ([30d7d10](https://github.com/fangfufu/httpdirfs/commit/30d7d10)).
- Add FUSE `.opendir` and `.releasedir` handlers to safely evict directories
  (`LinkTable`s) from memory when they are no longer in use, using an atomic
  reference-counting strategy to prevent crashes in other subsystems
  ([2fff24a](https://github.com/fangfufu/httpdirfs/commit/2fff24a)).
- Introduce a comprehensive unit test suite `test_memory_tracking` to validate
  correct allocation, reallocation, and free behavior of debug allocator
  wrappers ([9b38614](https://github.com/fangfufu/httpdirfs/commit/9b38614)).
- Implement asynchronous early-return download support in cache mode to improve
  read performance during ongoing background downloads
  ([0fb2d06](https://github.com/fangfufu/httpdirfs/commit/0fb2d06)).
- Introduce robust logging and error-checking wrappers for pthread condition
  variable APIs (`PTHREAD_COND_INIT`, `PTHREAD_COND_DESTROY`,
  `PTHREAD_COND_BROADCAST`, and `PTHREAD_COND_WAIT`)
  ([af0e263](https://github.com/fangfufu/httpdirfs/commit/af0e263)).
- Support concurrent background segment downloads in cache mode by replacing the
  single active download tracker with a linked list of `ActiveDownload` structs;
  add `ActiveDownload_find`, `ActiveDownload_add`, and `ActiveDownload_remove`
  helpers and implement double-checked locking in `Cache_read_segment` to
  prevent duplicate downloads under concurrent FUSE workers
  ([7286314](https://github.com/fangfufu/httpdirfs/commit/7286314)).
- Add unit test for `ActiveDownload_find` verifying lookup behavior on both
  empty and populated active download lists
  ([0441ced](https://github.com/fangfufu/httpdirfs/commit/0441ced)).
- Define a custom `sys_sem_t` type and emulate unnamed POSIX semaphores
  (`sem_init`, `sem_destroy`, `sem_wait`, `sem_post`, and `sem_trywait`) using
  pthread mutex and condition variables on Apple/macOS platforms, where unnamed
  POSIX semaphores are unsupported
  ([af24b36](https://github.com/fangfufu/httpdirfs/commit/af24b36)).
- Add zero-length file coverage to integration and unit test suites, including a
  dedicated test group verifying size, content, and SHA-256 digest in both
  direct and cache modes; add unit tests for negative-len, NULL `cf`, and NULL
  `cf->link` guards in `Cache_read`
  ([d02ac05](https://github.com/fangfufu/httpdirfs/commit/d02ac05)).

### Changed

- Transition from a single global condition variable (`dl_cond`) to granular,
  block-specific condition variables integrated directly within `ActiveDownload`
  nodes to eliminate redundant wakeups of unrelated FUSE waiter threads and
  reduce thread scheduling overhead
  ([a40bd74](https://github.com/fangfufu/httpdirfs/commit/a40bd74)).
- Optimize the cache wait loop inside `Cache_read_segment` to check status in
  $O(1)$ time by introducing an `unlinked` state flag on the `ActiveDownload`
  structure, avoiding expensive $O(N)$ list lookups on every loop iteration
  ([42a4dd3](https://github.com/fangfufu/httpdirfs/commit/42a4dd3)).
- Clean up and standardize `#include` directives across all source files,
  headers, and test suites, using forward struct declarations to break circular
  dependency chains
  ([94ced41](https://github.com/fangfufu/httpdirfs/commit/94ced41)).
- Extract common cache test setup logic into dedicated helper functions
  (`setup_mock_link_table` and `setup_temp_cache_dir`) inside
  `tests/test_cache.c`
  ([2c39a7a](https://github.com/fangfufu/httpdirfs/commit/2c39a7a)).
- Replace raw octal literals with symbolic permission constants (such as
  `S_IRWXU`) in test directory creation calls to address SonarCloud security
  hotspot alerts
  ([2c39a7a](https://github.com/fangfufu/httpdirfs/commit/2c39a7a)).
- Update `README.md` to document the permanent cache thread-safety improvements,
  including granular signaling, manual reference counting, and the shutdown
  handshake mechanism
  ([7eea0ea](https://github.com/fangfufu/httpdirfs/commit/7eea0ea)).
- Update `USAGE.md` to document the `--proxy-capath` and `--capath` flags,
  update the default value of `--max-conns` to 6, and update internal commit
  reference links
  ([1864cce](https://github.com/fangfufu/httpdirfs/commit/1864cce),
  [7bcbcb2](https://github.com/fangfufu/httpdirfs/commit/7bcbcb2),
  [7d76285](https://github.com/fangfufu/httpdirfs/commit/7d76285)).
- Lower the default maximum network connection count
  (`DEFAULT_NETWORK_MAX_CONNS`) from `10` to `6` to align with the standard
  persistent connection limits agreed upon by all major modern web browsers
  ([c049e6d](https://github.com/fangfufu/httpdirfs/commit/c049e6d)).
- Update `tests/test_config.c` configuration initialization test to assert
  `max_conns` against the configuration macro instead of a hardcoded value
  ([c049e6d](https://github.com/fangfufu/httpdirfs/commit/c049e6d)).
- Optimize GitHub Actions workflows by separating short and long integration
  tests and removing redundant manual pre-commit hook stages to avoid duplicate,
  slow sequential CI execution
  ([86b0e8e](https://github.com/fangfufu/httpdirfs/commit/86b0e8e)).
- Refactor synchronization and memory wrappers (mutex, semaphore, condvar, and
  allocator) to remove trailing name string parameters and clean up debug log
  statements ([efb8c24](https://github.com/fangfufu/httpdirfs/commit/efb8c24)).
- Remove all debug log statements (`log_printf` and `lprintf` calls under the
  `debug` log type) across FUSE, cache, and link modules to eliminate tracing
  overhead ([efb8c24](https://github.com/fangfufu/httpdirfs/commit/efb8c24)).
- Eliminate unused helper variables (such as the static loop counter inside
  `LinkTable_new`) that were only required by the removed debug prints,
  preventing compiler warnings
  ([efb8c24](https://github.com/fangfufu/httpdirfs/commit/efb8c24)).
- Optimize memory tracking in debug allocator wrappers by replacing the $O(N)$
  linear linked list with a statically sized 8192-slot hash table with chaining
  ([9b38614](https://github.com/fangfufu/httpdirfs/commit/9b38614)).
- Optimize string sanitization loop in `sanitise_LinkTable` by replacing
  `strlen()` with a null-terminator check, eliminating $O(N^2)$ overhead
  ([c8fbf51](https://github.com/fangfufu/httpdirfs/commit/c8fbf51)).
- Refactor test suites into granular profiles (`unit_test` for C unit tests,
  `integration_short` for fast integration tests, and `integration_long` for
  intensive tests) and align documentation in `src/README.md`
  ([39963f7](https://github.com/fangfufu/httpdirfs/commit/39963f7)).
- Revise pre-commit hook configurations to isolate builds, add debug-based
  verification (`meson-test-debug`), restrict the automatic hook to fast unit
  tests, and provide manual pre-push hooks (`all-tests` and `all-tests-clang`)
  ([39963f7](https://github.com/fangfufu/httpdirfs/commit/39963f7),
  [76fa30b](https://github.com/fangfufu/httpdirfs/commit/76fa30b),
  [9ad044e](https://github.com/fangfufu/httpdirfs/commit/9ad044e),
  [89ac572](https://github.com/fangfufu/httpdirfs/commit/89ac572),
  [af4ee30](https://github.com/fangfufu/httpdirfs/commit/af4ee30)).
- Expand the GitHub Actions build matrix on Ubuntu and macOS to execute the test
  suite under both debug and release configurations in parallel
  ([1554ed3](https://github.com/fangfufu/httpdirfs/commit/1554ed3)).
- Upgrade GitHub Actions workflows to use the latest major runner and dependency
  actions version
  ([68dd7bb](https://github.com/fangfufu/httpdirfs/commit/68dd7bb),
  [f819603](https://github.com/fangfufu/httpdirfs/commit/f819603)).
- Add `--short` and `--long` flags to `generate_test_files.py` and isolate short
  and long integration test suites so that long cache tests no longer generate
  short fixture files redundantly; dynamically select the range-check probe file
  to match the active test mode
  ([2225d0d](https://github.com/fangfufu/httpdirfs/commit/2225d0d)).
- Default `generate_test_files.py` to a no-op when no flag is given, removing
  the implicit `--large` alias; `--all` remains the canonical way to generate
  both the short fixture set and the 1 GB large file
  ([3bb8737](https://github.com/fangfufu/httpdirfs/commit/3bb8737)).
- Refactor `struct Cache` to remove redundant `time`, `content_length`, and
  `fs_path` fields; update `Meta_read`/`Meta_write` to preserve the on-disk
  binary format using local variables, keeping `struct Link` as the single
  source of truth for core link attributes
  ([63860bc](https://github.com/fangfufu/httpdirfs/commit/63860bc)).
- Statically initialize `link_lock` using `PTHREAD_MUTEX_INITIALIZER`, removing
  redundant runtime initialization and resolving `EINVAL` crashes in unit tests
  where `LinkSystem_init` is bypassed
  ([af24b36](https://github.com/fangfufu/httpdirfs/commit/af24b36)).
- Extract repeated transfer-cleanup logic from `Link_download` into a single
  static `Link_download_finish_transfer` helper, replacing three identical
  lock/clear/broadcast/reset blocks
  ([12c6888](https://github.com/fangfufu/httpdirfs/commit/12c6888)).
- Update `README.md` to describe high-performance concurrent and asynchronous
  cache downloads, and add a developer section on memory management and
  synchronization wrappers
  ([3c0d145](https://github.com/fangfufu/httpdirfs/commit/3c0d145),
  [439264f](https://github.com/fangfufu/httpdirfs/commit/439264f)).
- Update `src/README.md` to reflect the split integration test stages present in
  the GitHub Actions `build.yml` configuration
  ([439264f](https://github.com/fangfufu/httpdirfs/commit/439264f)).

### Fixed

- Resolve a critical Use-After-Free (UAF) deadlock vulnerability in the
  `Cache_free` teardown path by safely coordinating waiter exits via the new
  shutdown handshake and reference-counting mechanisms
  ([a01c9b1](https://github.com/fangfufu/httpdirfs/commit/a01c9b1)).
- Intercept size-zero allocations early in `REALLOC_wrapper` by freeing the
  pointer and returning `NULL` to resolve a double-free on glibc and standardize
  behavior on BSD/macOS where `realloc(ptr, 0)` returns a non-NULL sentinel
  pointer ([1e1b11d](https://github.com/fangfufu/httpdirfs/commit/1e1b11d),
  [d6e3040](https://github.com/fangfufu/httpdirfs/commit/d6e3040)).
- Fix potential crashes by adding defensive `NULL` checks on `this_link` in
  `Cache_create`
  ([796fbb9](https://github.com/fangfufu/httpdirfs/commit/796fbb9)).
- Fix potential crashes by zero-initializing stack-allocated `TransferStruct`
  variables (`ts` and `header`) in `Link_download` and `Link_download_full`
  ([1943f8e](https://github.com/fangfufu/httpdirfs/commit/1943f8e)).
- Fix directory eviction concurrency issues by holding `link_lock` when freeing
  duplicate local `LinkTable` directories
  ([29f51ff](https://github.com/fangfufu/httpdirfs/commit/29f51ff)).
- Resolve memory leak in `generate_md5sum` by properly freeing the
  OpenSSL-allocated `md5_digest` via `OPENSSL_free`
  ([0d7a07e](https://github.com/fangfufu/httpdirfs/commit/0d7a07e)).
- Resolve compiler warning and build issue on macOS CI by replacing
  GCC/Clang-specific `__attribute__((noreturn))` with the C11 standard
  `_Noreturn` keyword in `log.h` and `util.h`
  ([5ed8167](https://github.com/fangfufu/httpdirfs/commit/5ed8167)).
- Prevent duplicate background downloads by re-verifying segment existence under
  `w_lock` after `sem_trywait()` succeeds, closing the TOCTOU race where another
  thread could complete the download between the initial `Seg_exist` check and
  the `dl_lock` acquisition
  ([c11aad6](https://github.com/fangfufu/httpdirfs/commit/c11aad6)).
- Prevent null pointer dereference in `Cache_read_segment` by verifying that
  `ad->ts->data` is not `NULL` before performing the early-return `memcpy`
  ([935b1e6](https://github.com/fangfufu/httpdirfs/commit/935b1e6)).
- Add strict defensive bounds checks in `Seg_exist` and `Seg_set` to reject
  negative or out-of-bounds offsets before dividing by block size; clamp
  requested read length in `Cache_read` to remaining file size to prevent
  false-positive `-EIO` errors near EOF; add `NULL` checks for `cf->link` and
  offset bounds checks in `Cache_read_segment`
  ([a527469](https://github.com/fangfufu/httpdirfs/commit/a527469)).
- Eliminate TOCTOU race conditions in `Cache_exist` and `Cache_delete` by
  calling `unlink` directly and checking for `ENOENT`, removing the redundant
  `access` calls; replace `stat` with `fstat` in tests to prevent CodeQL TOCTOU
  warnings ([f911f7c](https://github.com/fangfufu/httpdirfs/commit/f911f7c)).
- Change `expected_segbc` in `Meta_write` from `long` to `off_t` to prevent
  silent truncation on 32-bit platforms before the `INT_MAX` cap; use a `size_t`
  intermediate in `Cache_create` to avoid 32-bit overflow when computing
  `content_length / blksz`; add a `len < 0` guard in `Cache_read` to prevent
  negative values wrapping to a large `size_t`
  ([96baffe](https://github.com/fangfufu/httpdirfs/commit/96baffe)).
- Add a memory-only `Cache` bypass shortcut in `Cache_open` for empty files and
  skip cache operations early in `fs_open` for zero-length files; treat stale or
  corrupt zero-byte cache metadata and data files as invalid in `Cache_exist`
  and trigger automatic cleanup; skip network activity early in `Link_download`
  for zero-byte downloads to avoid invalid HTTP range headers
  ([6c92d03](https://github.com/fangfufu/httpdirfs/commit/6c92d03)).
- Restructure `fs_read` so that cache-enabled zero-length files (where
  `fi->fh == 0`) return `0` immediately without falling through to
  `path_download`, avoiding a redundant path lookup and directory traversal
  ([a491ade](https://github.com/fangfufu/httpdirfs/commit/a491ade)).
- Cap `req_size` in `Link_download` using a subtraction-based bounds check to
  prevent potential integer overflow when the requested range extends beyond the
  remaining file content
  ([a527469](https://github.com/fangfufu/httpdirfs/commit/a527469)).

## [1.2.11] - 2026-05-23

### Added

- Add support for `--capath` and `--proxy-capath` configuration options
  ([da9b0e9](https://github.com/fangfufu/httpdirfs/commit/da9b0e9)).
- Support `--config=path` to specify a configuration file
  ([db65bb5](https://github.com/fangfufu/httpdirfs/commit/db65bb5)).
- Add core unit testing suite using the Unity framework
  ([e50d690](https://github.com/fangfufu/httpdirfs/commit/e50d690)).
- Add system integration test suite
  ([89e5027](https://github.com/fangfufu/httpdirfs/commit/89e5027)).
- Add a debug memory allocation tracker and hardened memory allocations
  ([e86afe8](https://github.com/fangfufu/httpdirfs/commit/e86afe8)).

### Changed

- Optimize `Cache_open` by caching file size locally and avoiding redundant
  system calls to `Data_size`
  ([10e5208](https://github.com/fangfufu/httpdirfs/commit/10e5208)).
- Exclude integration tests from default Meson test runs, executing them only in
  CI or when explicitly requested
  ([f13559b](https://github.com/fangfufu/httpdirfs/commit/f13559b),
  [91a8295](https://github.com/fangfufu/httpdirfs/commit/91a8295)).
- Refactor fatal logging infrastructure
  ([0753fc4](https://github.com/fangfufu/httpdirfs/commit/0753fc4)).
- Refactor and enhance the `FREE` macro and fix format specifiers
  ([ef80e80](https://github.com/fangfufu/httpdirfs/commit/ef80e80)).
- Replace custom limit macros with standard `limits.h` constants
  ([f9d4542](https://github.com/fangfufu/httpdirfs/commit/f9d4542)).
- Run cache tests with multiple block sizes and recreate cache directory between
  iterations ([6f889ac](https://github.com/fangfufu/httpdirfs/commit/6f889ac),
  [9fe774a](https://github.com/fangfufu/httpdirfs/commit/9fe774a)).
- Install clang in build and pre-commit workflow environments, and upload Meson
  test logs as build artifacts
  ([d6dd5d8](https://github.com/fangfufu/httpdirfs/commit/d6dd5d8),
  [4edc45b](https://github.com/fangfufu/httpdirfs/commit/4edc45b)).
- Update documentation in `src/README.md` (unit/integration test guides) and
  `USAGE.md` ([4d67613](https://github.com/fangfufu/httpdirfs/commit/4d67613),
  [bde2dfa](https://github.com/fangfufu/httpdirfs/commit/bde2dfa)).

### Fixed

- Resolve concurrent cache initialization race in `fs_open`
  ([64e8ea3](https://github.com/fangfufu/httpdirfs/commit/64e8ea3)).
- Correct off-by-one error in cache segment count calculation
  ([4cba404](https://github.com/fangfufu/httpdirfs/commit/4cba404)).
- Prevent unbound `MOUNT_DIR` error in integration test cleanup
  ([12b8cdd](https://github.com/fangfufu/httpdirfs/commit/12b8cdd)).
- Check for backtrace in libc before searching for `execinfo` in build
  configuration
  ([ded25f9](https://github.com/fangfufu/httpdirfs/commit/ded25f9)).
- Reset `proxy_cafile` correctly in `Config_init`
  ([6a88d4d](https://github.com/fangfufu/httpdirfs/commit/6a88d4d)).
- Handle `Link_download` errors in cache mode
  ([23ec785](https://github.com/fangfufu/httpdirfs/commit/23ec785)).

## [1.2.10] - 2026-05-16

### Fixed

- Reuse populated LinkTable to prevent memory leaks and redundant I/O
  ([0fd47e4](https://github.com/fangfufu/httpdirfs/commit/0fd47e4)).
- Fix Sonic ID3 recursive root listing with artists by improving parser
  robustness ([ffc3db6](https://github.com/fangfufu/httpdirfs/commit/ffc3db6))
  (https://github.com/fangfufu/httpdirfs/pull/213).

## [1.2.9] - 2026-05-13

### Added

- Fail early if mountpoint or FUSE module is missing
  ([5c53ad3](https://github.com/fangfufu/httpdirfs/commit/5c53ad3)).

### Fixed

- Improve link initialization error reporting
  ([8911119](https://github.com/fangfufu/httpdirfs/commit/8911119))
  (https://github.com/fangfufu/httpdirfs/issues/207).
- Return the correct failure exit code
  ([5dd032a](https://github.com/fangfufu/httpdirfs/commit/5dd032a))
  (https://github.com/fangfufu/httpdirfs/issues/208).
- Resolve mountpoint to absolute path to prevent unmount failure on termination
  for relative mountpoints
  ([3a53c40](https://github.com/fangfufu/httpdirfs/commit/3a53c40))
  (https://github.com/fangfufu/httpdirfs/issues/177).
- Removed useless `NOLINT` tags
  ([c8abdec](https://github.com/fangfufu/httpdirfs/commit/c8abdec)).

### Changed

- Update help's default value based on `config.h`
  ([adf3bb9](https://github.com/fangfufu/httpdirfs/commit/adf3bb9))
  (https://github.com/fangfufu/httpdirfs/issues/150).
- Update documentation in `src/README.md` and `USAGE.md`
  ([1d7e8e5](https://github.com/fangfufu/httpdirfs/commit/1d7e8e5),
  [1b16c9d](https://github.com/fangfufu/httpdirfs/commit/1b16c9d)).

## [1.2.8] - 2026-05-10

### Added

- Added macOS build support and automated CI pipeline
  ([200f70e](https://github.com/fangfufu/httpdirfs/commit/200f70e)).
- Added `--invalid-refresh` flag to refresh invalid links during directory reads
  ([68c305c](https://github.com/fangfufu/httpdirfs/commit/68c305c))
  (https://github.com/fangfufu/httpdirfs/issues/175).
- Added `--zero-len-is-dir` flag to treat zero-length files as directories
  ([9e750b9](https://github.com/fangfufu/httpdirfs/commit/9e750b9)).
- Added support for directory modified times and zero-length files
  ([2fde399](https://github.com/fangfufu/httpdirfs/commit/2fde399),
  [00a6b35](https://github.com/fangfufu/httpdirfs/commit/00a6b35)).
- Added `pre-commit` framework integration with Prettier and Clang-Tidy for code
  quality and formatting
  ([f557a2d](https://github.com/fangfufu/httpdirfs/commit/f557a2d)).
- Added `USAGE.md` for detailed command-line flag documentation
  ([c85c065](https://github.com/fangfufu/httpdirfs/commit/c85c065)).
- Added help text for `-f`, `-s`, and `--debug` flags
  ([553745b](https://github.com/fangfufu/httpdirfs/commit/553745b)).
- Added `codespell` to `pre-commit` and fixed spelling errors
  ([a898adf](https://github.com/fangfufu/httpdirfs/commit/a898adf)).
- Added Repology badge to documentation
  ([996b925](https://github.com/fangfufu/httpdirfs/commit/996b925)).
- Added a `pre-commit` GitHub workflow for automated checks
  ([c5fc5d0](https://github.com/fangfufu/httpdirfs/commit/c5fc5d0)).

### Changed

- Transitioned background thread synchronization from mutexes to semaphores for
  better reliability
  ([4ee7476](https://github.com/fangfufu/httpdirfs/commit/4ee7476))
  (https://github.com/fangfufu/httpdirfs/issues/91).
- Improved error messages and debug output throughout the application
  ([405d097](https://github.com/fangfufu/httpdirfs/commit/405d097)).
- Enhanced static analysis enforcement with comprehensive Clang-Tidy checks
  ([9ae4f89](https://github.com/fangfufu/httpdirfs/commit/9ae4f89)).
- Updated documentation and build requirements for Debian 13 "Trixie"
  ([f44d040](https://github.com/fangfufu/httpdirfs/commit/f44d040)).
- Refined filename character restrictions for improved compatibility
  ([6476571](https://github.com/fangfufu/httpdirfs/commit/6476571))
  (https://github.com/fangfufu/httpdirfs/issues/178).
- Updated `help2man` options to exclude info pages
  ([2ebd190](https://github.com/fangfufu/httpdirfs/commit/2ebd190)).
- Refactored nested `if` statements for improved code conciseness
  ([43906c9](https://github.com/fangfufu/httpdirfs/commit/43906c9)).
- Simplified safety checks in `LinkTable_uninitialised_fill`
  ([f593bba](https://github.com/fangfufu/httpdirfs/commit/f593bba)).
- Allowed `FREE(NULL)` to match standard C `free()` behavior
  ([5dc541e](https://github.com/fangfufu/httpdirfs/commit/5dc541e)).
- Replaced `astyle` with `clang-format` for consistent code styling
  ([a134774](https://github.com/fangfufu/httpdirfs/commit/a134774)).
- Updated documentation with comprehensive `src/README.md` and pre-commit
  instructions
  ([04a8558](https://github.com/fangfufu/httpdirfs/commit/04a8558)).
- Configured Prettier to prevent merging GitHub alert tags in documentation
  ([cea9e65](https://github.com/fangfufu/httpdirfs/commit/cea9e65)).
- Integrated Prettier hook for Markdown formatting
  ([ee1c1fe](https://github.com/fangfufu/httpdirfs/commit/ee1c1fe)).
- Refactored `Cache_read1` to `Cache_read_segment` and made it static
  ([c3c2912](https://github.com/fangfufu/httpdirfs/commit/c3c2912)).
- Optimized network activity by avoiding polling when a response is already
  available ([a77a2f6](https://github.com/fangfufu/httpdirfs/commit/a77a2f6)).

### Fixed

- Resolved macOS FUSE API compatibility issues and compilation errors
  ([200f70e](https://github.com/fangfufu/httpdirfs/commit/200f70e)).
- Fixed various race conditions and potential deadlocks in thread management
  ([42dd71e](https://github.com/fangfufu/httpdirfs/commit/42dd71e))
  (https://github.com/fangfufu/httpdirfs/issues/174).
- Fixed issues with duplicated file entries in certain directory listings
  ([9424389](https://github.com/fangfufu/httpdirfs/commit/9424389))
  (https://github.com/fangfufu/httpdirfs/issues/176).
- Fixed cache corruption occurring on write errors
  ([fe1cce4](https://github.com/fangfufu/httpdirfs/commit/fe1cce4)).
- Fixed Nginx-specific directory listing parsing issues
  ([3527f52](https://github.com/fangfufu/httpdirfs/commit/3527f52)).
- Fixed `const`-correctness for `strchr`/`strrchr` wrappers
  ([92622fc](https://github.com/fangfufu/httpdirfs/commit/92622fc)).
- Fixed link name comparison logic (`linknames_equal`)
  ([4c1a285](https://github.com/fangfufu/httpdirfs/commit/4c1a285)).
- Fixed issue #95: Avoid infinite hang when accessing directories returning 404
  errors ([ed5e9fa](https://github.com/fangfufu/httpdirfs/commit/ed5e9fa))
  (https://github.com/fangfufu/httpdirfs/issues/95).
- Fixed issue #190: Implemented robust retry logic for network downloads
  ([08a7987](https://github.com/fangfufu/httpdirfs/commit/08a7987))
  (https://github.com/fangfufu/httpdirfs/pull/203).
- Fixed issue #193: Support parsing links to intermediate subdirectories
  (https://github.com/fangfufu/httpdirfs/issues/193).
- Fixed issues #100 and #102: Fixed argument parsing to support options passed
  after the mountpoint, enabling compatibility with `fstab` and `mount`.
  (https://github.com/fangfufu/httpdirfs/issues/100,
  https://github.com/fangfufu/httpdirfs/issues/102).
- Fixed security vulnerability V-001
  ([4584847](https://github.com/fangfufu/httpdirfs/commit/4584847)).

### [1.2.7] - 2024-11-11

### Fixed

- Fixed FreeBSD compilation
  ([43bdf7e](https://github.com/fangfufu/httpdirfs/commit/43bdf7e))
  (https://github.com/fangfufu/httpdirfs/issues/165)

## [1.2.6] - 2024-10-07

### Fixed

- The refreshed LinkTable is now saved
  ([9135168](https://github.com/fangfufu/httpdirfs/commit/9135168)).
  (https://github.com/fangfufu/httpdirfs/issues/141)
- Only one LinkTable of the same directory is created when the cache mode is
  enabled ([e253b4a](https://github.com/fangfufu/httpdirfs/commit/e253b4a)).
  (https://github.com/fangfufu/httpdirfs/issues/140)
- Cache mode now works correctly with escaped URL
  ([720db5a](https://github.com/fangfufu/httpdirfs/commit/720db5a)).
  (https://github.com/fangfufu/httpdirfs/issues/138)
- Fixed `--user-agent` option
  ([8f0ef15](https://github.com/fangfufu/httpdirfs/commit/8f0ef15))
  (https://github.com/fangfufu/httpdirfs/issues/159)
- Allow leading `./` segments in links
  ([bd33966](https://github.com/fangfufu/httpdirfs/commit/bd33966))
  (https://github.com/fangfufu/httpdirfs/pull/125)
- Fix segfault due to missing LinkTable allocation
  ([1f91111](https://github.com/fangfufu/httpdirfs/commit/1f91111))
  (https://github.com/fangfufu/httpdirfs/pull/155)
- Fix Segmentation fault if HOME not set
  ([09ebc82](https://github.com/fangfufu/httpdirfs/commit/09ebc82))
  (https://github.com/fangfufu/httpdirfs/pull/162)
- Handle sites that use absolute links and sites that require the final slash
  ([4d323b8](https://github.com/fangfufu/httpdirfs/commit/4d323b8),
  [41cb4b8](https://github.com/fangfufu/httpdirfs/commit/41cb4b8))
  (https://github.com/fangfufu/httpdirfs/pull/121)

### Added

- Add `--http-header` option
  ([e3b2904](https://github.com/fangfufu/httpdirfs/commit/e3b2904))
  (https://github.com/fangfufu/httpdirfs/issues/157)
- Add `--cache-clear` option
  ([194a10f](https://github.com/fangfufu/httpdirfs/commit/194a10f))
  (https://github.com/fangfufu/httpdirfs/issues/111)
- Add `--refresh-timeout` to set refresh timeout for directory contents
  ([a309994](https://github.com/fangfufu/httpdirfs/commit/a309994))
  (https://github.com/fangfufu/httpdirfs/pull/114)

### Changed

- Improved LinkTable caching. LinkTable invalidation is now purely based on
  timeout ([0747566](https://github.com/fangfufu/httpdirfs/commit/0747566)).
  (https://github.com/fangfufu/httpdirfs/issues/147)
- Replaced the GNU Autotools based build system with Meson
  ([63c03a5](https://github.com/fangfufu/httpdirfs/commit/63c03a5)).
  (https://github.com/fangfufu/httpdirfs/issues/149)
- Transitioned from using libfuse 2.x to to 3.x
  ([ad34ae0](https://github.com/fangfufu/httpdirfs/commit/ad34ae0)).
  (https://github.com/fangfufu/httpdirfs/issues/116)
- Updated OpenSSL MD5 checksum generation API usage
  ([86c1185](https://github.com/fangfufu/httpdirfs/commit/86c1185)).
  (https://github.com/fangfufu/httpdirfs/issues/143)

## [1.2.5] - 2023-02-24

### Fixed

- No longer compile with UBSAN enabled by default to avoid introducing security
  vulnerability
  ([fe45afc](https://github.com/fangfufu/httpdirfs/commit/fe45afc)).

## [1.2.4] - 2023-01-11

### Added

- Add `--cacert` and `--proxy-cacert` options
  ([12abb7d](https://github.com/fangfufu/httpdirfs/commit/12abb7d))

### Fixed

- `Link_download_full`: don't `FREE(NULL)`
  ([ff5f566](https://github.com/fangfufu/httpdirfs/commit/ff5f566))
- Correct error message in `FREE()`
  ([833cbf9](https://github.com/fangfufu/httpdirfs/commit/833cbf9))
- Error handling for `fs_open` and `getopt_long`
  ([72d15ab](https://github.com/fangfufu/httpdirfs/commit/72d15ab),
  [ffb2658](https://github.com/fangfufu/httpdirfs/commit/ffb2658))
- Fix IO error with funkwhale subsonic API
  ([abef0c9](https://github.com/fangfufu/httpdirfs/commit/abef0c9))
- Fix `--insecure-tls` in help and README
  ([ebcfb0a](https://github.com/fangfufu/httpdirfs/commit/ebcfb0a))

## [1.2.3] - 2021-08-31

### Added

- Single File Mode, which allows the mounting of a single file in a virtual
  directory ([f42264d](https://github.com/fangfufu/httpdirfs/commit/f42264d))
- Manual page generation in Makefile
  ([ff97740](https://github.com/fangfufu/httpdirfs/commit/ff97740),
  [07603c3](https://github.com/fangfufu/httpdirfs/commit/07603c3)).

### Changed

- Improve log / debug output
  ([07603c3](https://github.com/fangfufu/httpdirfs/commit/07603c3),
  [e02042c](https://github.com/fangfufu/httpdirfs/commit/e02042c),
  [f791ceb](https://github.com/fangfufu/httpdirfs/commit/f791ceb)).
- Removed unnecessary mutex lock/unlocks
  ([7813487](https://github.com/fangfufu/httpdirfs/commit/7813487)).

### Fixed

- Handling empty files from HTTP server
  ([3c7e790](https://github.com/fangfufu/httpdirfs/commit/3c7e790))

## [1.2.2] - 2021-08-08

### Fixed

- macOS uninstallation in Makefile
  ([92a7330](https://github.com/fangfufu/httpdirfs/commit/92a7330)).
- Filenames start with percentage encoding are now parsed properly
  ([861481e](https://github.com/fangfufu/httpdirfs/commit/861481e))
- For Apache server configured with IconsAreLinks, the duplicated link no longer
  shows up ([e76b079](https://github.com/fangfufu/httpdirfs/commit/e76b079)).

## [1.2.1] - 2021-05-27

### Added

- macOS compilation support
  ([e553463](https://github.com/fangfufu/httpdirfs/commit/e553463),
  [1df02b0](https://github.com/fangfufu/httpdirfs/commit/1df02b0)).

## [1.2.0] - 2019-11-01

### Added

- Subsonic server support - this is dedicated to my Debian package maintainer
  Jerome Charaoui
  ([8206b4f](https://github.com/fangfufu/httpdirfs/commit/8206b4f),
  [5062f51](https://github.com/fangfufu/httpdirfs/commit/5062f51))
- You can now specify which configuration file to use by using the `--config`
  flag ([4b02980](https://github.com/fangfufu/httpdirfs/commit/4b02980)).
- Added support for turning off TLS certificate check (`--insecure_tls` flag)
  ([e9c8689](https://github.com/fangfufu/httpdirfs/commit/e9c8689)).
- Now check for server's support for HTTP range request, which can be turned off
  using the `--no-range-check` flag
  ([a8ef8c8](https://github.com/fangfufu/httpdirfs/commit/a8ef8c8),
  [c2be88c](https://github.com/fangfufu/httpdirfs/commit/c2be88c)).

### Changed

- Wrapped all calloc() calls with error handling functions
  ([b7c63f4](https://github.com/fangfufu/httpdirfs/commit/b7c63f4)).
- Various code refactoring.

### Fixed

- Remove the erroneous error messages when the user supplies wrong command line
  options ([dec32b0](https://github.com/fangfufu/httpdirfs/commit/dec32b0)).
- The same cache folder is used, irrespective whether the server root URL ends
  with '/' ([6d14497](https://github.com/fangfufu/httpdirfs/commit/6d14497)).
- FreeBSD support
  ([80c0b69](https://github.com/fangfufu/httpdirfs/commit/80c0b69),
  [b177039](https://github.com/fangfufu/httpdirfs/commit/b177039)).

## [1.1.10] - 2019-09-10

### Added

- Added a progress indicator for LinkTable_fill()
  ([9ff099c](https://github.com/fangfufu/httpdirfs/commit/9ff099c)).
- Backtrace will now be printed when the program crashes
  ([c7dfa24](https://github.com/fangfufu/httpdirfs/commit/c7dfa24))
  - Note that static functions are not included in the printed backtrace!

### Changed

- Updated Makefile, fixed issue #44
  ([765f4e0](https://github.com/fangfufu/httpdirfs/commit/765f4e0))
  - When header files get changed, the relevant object will get recompiled.
- Improved HTTP temporary failure error handling
  ([1493190](https://github.com/fangfufu/httpdirfs/commit/1493190),
  [ff67794](https://github.com/fangfufu/httpdirfs/commit/ff67794))
  - Now retry on the following HTTP error codes:
    - 429 - Too Many Requests
    - 520 - Cloudflare Unknown Error
    - 524 - Cloudflare Timeout

### Fixed

- No longer deadlock after encountering HTTP 429 while filling up a Linktable
  ([b6777c0](https://github.com/fangfufu/httpdirfs/commit/b6777c0)).
- LinkTable caching now works again
  ([bc23ee0](https://github.com/fangfufu/httpdirfs/commit/bc23ee0)).

## [1.1.9] - 2019-09-02

### Changed

- Improved the performance of directory listing generation while there are
  on-going file transfers
  ([afb2a8f](https://github.com/fangfufu/httpdirfs/commit/afb2a8f))
- Wrapped mutex locking and unlocking functions in error checking functions
  ([1a44a4d](https://github.com/fangfufu/httpdirfs/commit/1a44a4d),
  [e06ea6d](https://github.com/fangfufu/httpdirfs/commit/e06ea6d)).

### Fixed

- Fixed issue #40 - Crashes with "API function called from within callback"
  ([d6fbcb4](https://github.com/fangfufu/httpdirfs/commit/d6fbcb4)).
- Cache system: now keep track of the number of times a cache file has been
  opened ([9229658](https://github.com/fangfufu/httpdirfs/commit/9229658),
  [ed5457c](https://github.com/fangfufu/httpdirfs/commit/ed5457c)). - The
  on-disk cache file no longer gets opened multiple times, if a file is opened
  multiple times. This used to cause inconsistencies between two opened cache
  files.
- Cache system: Fixed buffer over-read at the boundary
  ([6c8a15d](https://github.com/fangfufu/httpdirfs/commit/6c8a15d)).
  - Say we are using a lock size of 1024k, we send a request for 128k at 1008k.
    It won't trigger the download, because we have already downloaded the first
    1024k at byte 0. So it would read off from the empty disk space!
  - This problem only occurred during the first time you download a file. During
    subsequent accesses, when you are only reading from the cache, this problem
    did not occur.
- Cache system: Previously it was possible for Cache_bgdl()'s download offset to
  be modified by the parent thread after the child thread had been launched
  ([9e3e474](https://github.com/fangfufu/httpdirfs/commit/9e3e474)). This used
  to cause permanent cache file corruption.
- Cache system: Cache_bgdl() no longer prefetches beyond EOF
  ([4c0b7da](https://github.com/fangfufu/httpdirfs/commit/4c0b7da)).
- Cache system: Data_read() no longer gives warning messages when reaching the
  end of the cache file
  ([ee397d1](https://github.com/fangfufu/httpdirfs/commit/ee397d1)).

## [1.1.8] - 2019-08-30

### Changed

- Suppressed "-Wunused-function" in `network.c` for network related functions
  ([20577e5](https://github.com/fangfufu/httpdirfs/commit/20577e5)).

### Fixed

- Addressed the link ordering problem raised in issue #28
  ([97ecbff](https://github.com/fangfufu/httpdirfs/commit/97ecbff))

## [1.1.7] - 2019-08-23

### Added

- Debugging output associated with the mutexes
  ([c660159](https://github.com/fangfufu/httpdirfs/commit/c660159))

### Fixed

- Fixed issue #34 - file / directory detection problem
  ([78d8167](https://github.com/fangfufu/httpdirfs/commit/78d8167))
- Fixed issue #36 - hanging when HTTP/2 is used
  ([ed37aa5](https://github.com/fangfufu/httpdirfs/commit/ed37aa5))
- Added pthread_detach() for thread cleanup
  ([c72b0d4](https://github.com/fangfufu/httpdirfs/commit/c72b0d4))

## [1.1.6] - 2019-05-07

### Changed

- Now set a default cache directory
  ([2835201](https://github.com/fangfufu/httpdirfs/commit/2835201))
- path_append() now check for both the existing path and appended path for '/'
  ([88efbdf](https://github.com/fangfufu/httpdirfs/commit/88efbdf)).
- Now additionally set CURLMOPT_MAX_HOST_CONNECTIONS to limit the amount of
  connection HTTPDirFS makes
  ([f1c7e6e](https://github.com/fangfufu/httpdirfs/commit/f1c7e6e)).

## [1.1.5] - 2019-04-27

### Added

- Added `--dl-seg-size` command line option
  ([ba8c723](https://github.com/fangfufu/httpdirfs/commit/ba8c723)).
- Added `--max-seg-count` command line option
  ([4acf91a](https://github.com/fangfufu/httpdirfs/commit/4acf91a)).
- Added `--max-conns` command line option
  ([85d66ad](https://github.com/fangfufu/httpdirfs/commit/85d66ad)).
- Added `--user-agent` command line option
  ([85d66ad](https://github.com/fangfufu/httpdirfs/commit/85d66ad)).
- Added `--retry-wait` command line option
  ([7c1c1d2](https://github.com/fangfufu/httpdirfs/commit/7c1c1d2)).

### Changed

- Refactored `curl_multi_perform_once()` for lower CPU usage
  ([2a2ac2d](https://github.com/fangfufu/httpdirfs/commit/2a2ac2d)).

## [1.1.4] - 2019-04-26

### Fixed

- Invalid link rechecking after loading a LinkTable from the disk
  ([1dc54af](https://github.com/fangfufu/httpdirfs/commit/1dc54af)).

## [1.1.3] - 2019-04-26

### Added

- Now handles HTTP 429 Too Many Requests correctly
  ([39820e3](https://github.com/fangfufu/httpdirfs/commit/39820e3),
  [774f14c](https://github.com/fangfufu/httpdirfs/commit/774f14c)).
- When loading a LinkTable from the hard disk, if there are invalid links in the
  LinkTable, their headers are redownloaded for rechecking
  ([9717d01](https://github.com/fangfufu/httpdirfs/commit/9717d01)).

## [1.1.2] - 2019-04-26

### Added

- Now caches directory structure on the hard disk
  ([5f6fc3f](https://github.com/fangfufu/httpdirfs/commit/5f6fc3f),
  [9a5f37d](https://github.com/fangfufu/httpdirfs/commit/9a5f37d)). Httpdirfs no
  longer stutters when visiting the directories that had been visited before,
  after restart. If there is inconsistency between the number of files on the
  server and in the cache, the local directory structure will be recreated,
  hence the cache will be refreshed. Creating local directory structure involves
  downloading the header for each file, this is what causes stuttering when
  visiting a new directory.

## [1.1.1] - 2019-04-25

### Added

- `Cache_bgdl()` to download the next segment in background, after blocks from
  the second half of the current segment has been requested
  ([e442871](https://github.com/fangfufu/httpdirfs/commit/e442871),
  [df025b1](https://github.com/fangfufu/httpdirfs/commit/df025b1)).

### Changed

- Changed the `DATA_BLK_SZ` to 8MB
  ([6d02b05](https://github.com/fangfufu/httpdirfs/commit/6d02b05))

## [1.1.0] - 2019-04-24

### Added

- Permanent cache feature
  ([e2d2b0d](https://github.com/fangfufu/httpdirfs/commit/e2d2b0d)).

### Fixed

- Fixed memory leak during LinkTable creation
  ([77bb715](https://github.com/fangfufu/httpdirfs/commit/77bb715)).

## [1.0.4] - 2019-04-12

### Changed

- Enabled HTTP pipelining for performance improved
  ([3f15be0](https://github.com/fangfufu/httpdirfs/commit/3f15be0))
- Decreased maximum connection number to 10, to reduce the stress to remove
  server ([3f15be0](https://github.com/fangfufu/httpdirfs/commit/3f15be0)).

## [1.0.3] - 2019-04-08

### Fixed

- Fixed issue #24 - httpdirfs now opens directories with long listings properly
  ([329abda](https://github.com/fangfufu/httpdirfs/commit/329abda)).

## [1.0.2] - 2019-03-02

### Changed

- Closed issue #23 - Dotfile madness, httpdirfs now reads configuration file
  from ${XDG_CONFIG_HOME}/httpdirfs, rather than ${HOME}/.httpdirfs
  ([b862c4b](https://github.com/fangfufu/httpdirfs/commit/b862c4b))

## [1.0.1] - 2019-01-25

- Initial Debian package release

### Added

- Add a manpage
  ([740acee](https://github.com/fangfufu/httpdirfs/commit/740acee))

### Changed

- Fix output of `--version`/`-V`
  ([3e1675d](https://github.com/fangfufu/httpdirfs/commit/3e1675d))
- Improved Makefile
  ([92d4b0a](https://github.com/fangfufu/httpdirfs/commit/92d4b0a),
  [d73b16d](https://github.com/fangfufu/httpdirfs/commit/d73b16d))
- Various other minor improvements
  ([77f4989](https://github.com/fangfufu/httpdirfs/commit/77f4989),
  [3b5252f](https://github.com/fangfufu/httpdirfs/commit/3b5252f))

## [1.0] - 2018-08-22

- Initial release, everything works correctly, as far as I know.

[1.0]: https://github.com/fangfufu/httpdirfs/releases/tag/1.0
[1.0.1]: https://github.com/fangfufu/httpdirfs/compare/1.0...v1.0.1
[1.0.2]: https://github.com/fangfufu/httpdirfs/compare/v1.0.1...1.0.2
[1.0.3]: https://github.com/fangfufu/httpdirfs/compare/1.0.2...1.0.3
[1.0.4]: https://github.com/fangfufu/httpdirfs/compare/1.0.3...1.0.4
[1.1.0]: https://github.com/fangfufu/httpdirfs/compare/1.0.4...1.1.0
[1.1.1]: https://github.com/fangfufu/httpdirfs/compare/1.1.0...1.1.1
[1.1.10]: https://github.com/fangfufu/httpdirfs/compare/1.1.9...1.1.10
[1.1.2]: https://github.com/fangfufu/httpdirfs/compare/1.1.1...1.1.2
[1.1.3]: https://github.com/fangfufu/httpdirfs/compare/1.1.2...1.1.3
[1.1.4]: https://github.com/fangfufu/httpdirfs/compare/1.1.3...1.1.4
[1.1.5]: https://github.com/fangfufu/httpdirfs/compare/1.1.4...1.1.5
[1.1.6]: https://github.com/fangfufu/httpdirfs/compare/1.1.5...1.1.6
[1.1.7]: https://github.com/fangfufu/httpdirfs/compare/1.1.6...1.1.7
[1.1.8]: https://github.com/fangfufu/httpdirfs/compare/1.1.7...1.1.8
[1.1.9]: https://github.com/fangfufu/httpdirfs/compare/1.1.8...1.1.9
[1.2.0]: https://github.com/fangfufu/httpdirfs/compare/1.1.10...1.2.0
[1.2.1]: https://github.com/fangfufu/httpdirfs/compare/1.2.0...1.2.1
[1.2.10]: https://github.com/fangfufu/httpdirfs/compare/1.2.9...1.2.10
[1.2.11]: https://github.com/fangfufu/httpdirfs/compare/1.2.10...1.2.11
[1.2.2]: https://github.com/fangfufu/httpdirfs/compare/1.2.1...1.2.2
[1.2.3]: https://github.com/fangfufu/httpdirfs/compare/1.2.2...1.2.3
[1.2.4]: https://github.com/fangfufu/httpdirfs/compare/1.2.3...1.2.4
[1.2.5]: https://github.com/fangfufu/httpdirfs/compare/1.2.4...1.2.5
[1.2.6]: https://github.com/fangfufu/httpdirfs/compare/1.2.5...1.2.6
[1.2.7]: https://github.com/fangfufu/httpdirfs/compare/1.2.6...1.2.7
[1.2.8]: https://github.com/fangfufu/httpdirfs/compare/1.2.7...1.2.8
[1.2.9]: https://github.com/fangfufu/httpdirfs/compare/1.2.8...1.2.9
[1.3.0]: https://github.com/fangfufu/httpdirfs/compare/1.2.11...1.3.0
[1.3.1]: https://github.com/fangfufu/httpdirfs/compare/1.3.0...1.3.1
[1.3.2]: https://github.com/fangfufu/httpdirfs/compare/1.3.1...1.3.2
[1.3.3]: https://github.com/fangfufu/httpdirfs/compare/1.3.2...1.3.3
[unreleased]: https://github.com/fangfufu/httpdirfs/compare/1.3.3...master
