7zip/C
Fernando Nillsson Cidade 1eca44e7a7 v2026.3.22.0
English

This patch addresses the review feedback around Windows installer metadata and update-path handling, and removes a partially implemented UI surface that duplicated the existing multi-output path controls.

Installer / ARP metadata
- The installer previously wrote fork-specific hardcoded values into the Windows Uninstall registry entry (`DisplayName`, `DisplayVersion`, `Publisher`).
- That created drift between the installed product metadata and the actual upstream 7-Zip version/author macros used elsewhere in the tree.
- The patch removes the hardcoded fork values and derives the registry values from the existing 7-Zip definitions:
  - `DisplayName` now uses the existing versioned product string (`7-Zip 26.00 (x64)` on 64-bit builds).
  - `DisplayVersion` now comes from `MY_VERSION`.
  - `Publisher` now comes from `MY_AUTHOR_NAME`.
- This makes the Add/Remove Programs entry consistent with the rest of the build metadata and removes the need for manual source edits on each branch-specific release.

Compression dialog cleanup
- The `Paths...` button and its dedicated dialog were not part of the stable workflow.
- At this point the main compression dialog already exposes the supported multi-output behavior through the output-count selector plus the existing archive path rows and browse buttons.
- Keeping a second path-editing dialog in parallel would add maintenance overhead and duplicate UI/state management without providing new functionality.
- For that reason, this patch removes the incomplete/duplicate surface entirely:
  - the `Paths...` button was removed from the dialog resource,
  - the handler declaration/definition was removed,
  - the auxiliary `COutputArcPathsDialog` class was removed,
  - the associated resource IDs and helper parsing/serialization code were removed.
- Functional capability is unchanged: users still configure multiple output targets through the existing archive path controls already present in the compression dialog.

Update path deduplication
- In `UpdateGUI.cpp`, `AddUniquePath()` previously compared paths with a case-sensitive equality check.
- On Windows, this could fail to deduplicate logically identical paths that differ only by casing.
- The comparison is now case-insensitive (`IsEqualTo_NoCase()`), which matches expected Windows path behavior more closely and prevents duplicate item entries in the update/compression path collection stage.
- This is intentionally a minimal fix: it addresses case-only duplication without changing the broader path normalization rules.

Working directory safety
- `PrepareWorkingDirForArchivePath()` previously ignored the return value of `MyGetFullPathName()`.
- If full-path resolution failed, the code could continue with an invalid or empty path and derive an incorrect working directory.
- The function now exits early when `MyGetFullPathName()` fails, leaving `options.WorkingDir` empty.
- This is a conservative change: the downstream update flow already has fallback behavior for an empty working directory, so the patch avoids propagating bad path state without altering the existing fallback model.

Header consistency / non-functional cleanup
- `LangUtils.h` now provides a non-`Z7_LANG` fallback declaration for `LangString_OnlyFromLangFile()`.
- This is not a functional runtime change for normal localized builds, but it keeps the header interface consistent across configurations and avoids IDE/static-analysis mismatches where `Z7_LANG` is not visible to the parser.

Behavioral impact
- No archive format logic was changed.
- No codec behavior was changed.
- No new persistence format was introduced.
- The only runtime behavior changes are:
  - correct Windows ARP metadata,
  - removal of dead/duplicate UI,
  - case-insensitive deduplication of update input paths,
  - safer handling of full-path resolution failure before working directory derivation.

Validation
- The change set was validated with targeted code search and diff review to ensure the removed dialog/button plumbing no longer has remaining references.
- `git diff --check` was also run on the touched files.
- A full build/test pass has not yet been run in this environment.

Portuguese

Este patch responde ao feedback de revisão relacionado aos metadados do instalador no Windows e ao tratamento de caminhos no fluxo de atualização, além de remover uma superfície de UI parcialmente implementada que duplicava os controles já existentes para múltiplos caminhos de saída.

Instalador / metadados do item no Windows
- O instalador estava gravando valores hardcoded e específicos do fork na chave de desinstalação do Windows (`DisplayName`, `DisplayVersion`, `Publisher`).
- Isso criava divergência entre os metadados exibidos em “Aplicativos instalados / Programas e Recursos” e as macros oficiais de versão/autoria já utilizadas no restante do código-fonte.
- O patch remove esses valores fixos do fork e passa a derivar os valores diretamente das definições já existentes do 7-Zip:
  - `DisplayName` agora usa a string versionada já existente do produto (`7-Zip 26.00 (x64)` em builds 64-bit).
  - `DisplayVersion` agora vem de `MY_VERSION`.
  - `Publisher` agora vem de `MY_AUTHOR_NAME`.
- Com isso, a entrada instalada no Windows fica consistente com os demais metadados do build e deixa de exigir edição manual do código a cada release da branch.

Limpeza do diálogo de compressão
- O botão `Paths...` e a dialog auxiliar associada não faziam parte de um fluxo estável/finalizado.
- Neste momento, a janela principal de compressão já expõe o comportamento suportado de múltiplas saídas por meio do seletor de quantidade de saídas, dos campos de caminho de arquivo e dos botões de browse já existentes.
- Manter uma segunda dialog para edição textual desses caminhos aumentaria o custo de manutenção e duplicaria a lógica de estado/UI sem adicionar capacidade funcional nova.
- Por esse motivo, este patch remove completamente essa superfície incompleta/duplicada:
  - o botão `Paths...` foi removido do recurso da dialog,
  - a declaração e a implementação do handler foram removidas,
  - a classe auxiliar `COutputArcPathsDialog` foi removida,
  - os IDs de recurso associados e os helpers internos de parsing/serialização dessa dialog também foram removidos.
- A capacidade funcional permanece a mesma: o usuário continua podendo configurar múltiplos destinos pelos controles de caminhos de saída já existentes na própria janela de compressão.

Deduplicação de caminhos no fluxo de atualização
- Em `UpdateGUI.cpp`, a função `AddUniquePath()` comparava caminhos usando igualdade case-sensitive.
- Em Windows, isso podia falhar em deduplicar caminhos logicamente idênticos que diferiam apenas por maiúsculas/minúsculas.
- A comparação agora é case-insensitive (`IsEqualTo_NoCase()`), o que se alinha melhor ao comportamento esperado para caminhos no Windows e evita entradas duplicadas durante a coleta dos caminhos de itens no fluxo de atualização/compressão.
- A alteração foi mantida propositalmente mínima: ela corrige a duplicação por diferença de casing sem alterar as regras mais amplas de normalização de caminhos.

Segurança na preparação do diretório de trabalho
- `PrepareWorkingDirForArchivePath()` ignorava o valor de retorno de `MyGetFullPathName()`.
- Se a resolução para caminho absoluto falhasse, o código poderia continuar com um caminho inválido ou vazio e, a partir disso, derivar um diretório de trabalho incorreto.
- Agora a função retorna imediatamente quando `MyGetFullPathName()` falha, deixando `options.WorkingDir` vazio.
- Essa mudança é conservadora: o fluxo subsequente de atualização já possui fallback quando o diretório de trabalho está vazio, então o patch evita propagar um estado inconsistente sem alterar o modelo de fallback já existente.

Consistência de headers / limpeza não funcional
- `LangUtils.h` agora fornece um fallback para `LangString_OnlyFromLangFile()` também quando `Z7_LANG` não está definido.
- Isso não altera o comportamento funcional em builds localizados normais, mas mantém a interface do header consistente entre configurações e evita divergências em IDEs/analisadores estáticos quando `Z7_LANG` não está visível para o parser.

Impacto comportamental
- Nenhuma lógica de formato de arquivo foi alterada.
- Nenhum comportamento de codec foi alterado.
- Nenhum novo formato de persistência foi introduzido.
- As únicas mudanças observáveis em runtime são:
  - correção dos metadados exibidos pelo Windows para a instalação,
  - remoção de uma UI morta/duplicada,
  - deduplicação case-insensitive de caminhos no fluxo de atualização,
  - tratamento mais seguro de falha ao resolver caminho absoluto antes de derivar o diretório de trabalho.

Validação
- O conjunto de alterações foi validado com buscas direcionadas no código e revisão de diff para garantir que a plumbing removida da dialog/botão não deixou referências residuais.
- Também foi executado `git diff --check` nos arquivos alterados.
- Ainda não foi executado um ciclo completo de build/testes neste ambiente.
2026-03-22 01:36:40 -03:00
..
Util v2026.3.22.0 2026-03-22 01:36:40 -03:00
7z.h 23.01 2023-12-17 14:59:19 +05:00
7zAlloc.c 23.01 2023-12-17 14:59:19 +05:00
7zAlloc.h 23.01 2023-12-17 14:59:19 +05:00
7zArcIn.c 24.05 2024-05-15 23:55:04 +05:00
7zBuf.c '21.07' 2022-03-18 15:35:13 +05:00
7zBuf.h 23.01 2023-12-17 14:59:19 +05:00
7zBuf2.c '21.07' 2022-03-18 15:35:13 +05:00
7zCrc.c 24.05 2024-05-15 23:55:04 +05:00
7zCrc.h 24.05 2024-05-15 23:55:04 +05:00
7zCrcOpt.c 24.05 2024-05-15 23:55:04 +05:00
7zDec.c 24.09 2024-11-30 15:27:15 +05:00
7zFile.c 23.01 2023-12-17 14:59:19 +05:00
7zFile.h 23.01 2023-12-17 14:59:19 +05:00
7zip_gcc_c.mak 26.00 2026-02-12 17:38:49 +05:00
7zStream.c 23.01 2023-12-17 14:59:19 +05:00
7zTypes.h 24.05 2024-05-15 23:55:04 +05:00
7zVersion.h 26.00 2026-02-12 17:38:49 +05:00
7zVersion.rc '21.07' 2022-03-18 15:35:13 +05:00
7zWindows.h 26.00 2026-02-12 17:38:49 +05:00
Aes.c 24.05 2024-05-15 23:55:04 +05:00
Aes.h 23.01 2023-12-17 14:59:19 +05:00
AesOpt.c 24.09 2024-11-30 15:27:15 +05:00
Alloc.c 24.05 2024-05-15 23:55:04 +05:00
Alloc.h 24.05 2024-05-15 23:55:04 +05:00
Asm_c.mak 24.05 2024-05-15 23:55:04 +05:00
Bcj2.c 23.01 2023-12-17 14:59:19 +05:00
Bcj2.h 23.01 2023-12-17 14:59:19 +05:00
Bcj2Enc.c 23.01 2023-12-17 14:59:19 +05:00
Blake2.h 24.05 2024-05-15 23:55:04 +05:00
Blake2s.c 24.06 2024-05-27 12:41:10 +05:00
Bra.c 24.05 2024-05-15 23:55:04 +05:00
Bra.h 24.05 2024-05-15 23:55:04 +05:00
Bra86.c 23.01 2023-12-17 14:59:19 +05:00
BraIA64.c 23.01 2023-12-17 14:59:19 +05:00
BwtSort.c 25.00 2025-07-05 19:27:33 +05:00
BwtSort.h 25.00 2025-07-05 19:27:33 +05:00
Compiler.h 25.00 2025-07-05 19:27:33 +05:00
CpuArch.c 26.00 2026-02-12 17:38:49 +05:00
CpuArch.h 26.00 2026-02-12 17:38:49 +05:00
Delta.c '21.07' 2022-03-18 15:35:13 +05:00
Delta.h 23.01 2023-12-17 14:59:19 +05:00
DllSecur.c 24.05 2024-05-15 23:55:04 +05:00
DllSecur.h 23.01 2023-12-17 14:59:19 +05:00
HuffEnc.c 26.00 2026-02-12 17:38:49 +05:00
HuffEnc.h 26.00 2026-02-12 17:38:49 +05:00
LzFind.c 25.01 2025-08-03 16:14:59 +05:00
LzFind.h 24.05 2024-05-15 23:55:04 +05:00
LzFindMt.c 25.00 2025-07-05 19:27:33 +05:00
LzFindMt.h 25.00 2025-07-05 19:27:33 +05:00
LzFindOpt.c 23.01 2023-12-17 14:59:19 +05:00
LzHash.h 23.01 2023-12-17 14:59:19 +05:00
Lzma2Dec.c 24.05 2024-05-15 23:55:04 +05:00
Lzma2Dec.h 23.01 2023-12-17 14:59:19 +05:00
Lzma2DecMt.c 23.01 2023-12-17 14:59:19 +05:00
Lzma2DecMt.h 23.01 2023-12-17 14:59:19 +05:00
Lzma2Enc.c 25.00 2025-07-05 19:27:33 +05:00
Lzma2Enc.h 25.00 2025-07-05 19:27:33 +05:00
Lzma86.h 23.01 2023-12-17 14:59:19 +05:00
Lzma86Dec.c 23.01 2023-12-17 14:59:19 +05:00
Lzma86Enc.c 23.01 2023-12-17 14:59:19 +05:00
LzmaDec.c 23.01 2023-12-17 14:59:19 +05:00
LzmaDec.h 23.01 2023-12-17 14:59:19 +05:00
LzmaEnc.c 25.00 2025-07-05 19:27:33 +05:00
LzmaEnc.h 25.00 2025-07-05 19:27:33 +05:00
LzmaLib.c 23.01 2023-12-17 14:59:19 +05:00
LzmaLib.h 23.01 2023-12-17 14:59:19 +05:00
Md5.c 24.09 2024-11-30 15:27:15 +05:00
Md5.h 24.09 2024-11-30 15:27:15 +05:00
MtCoder.c 25.00 2025-07-05 19:27:33 +05:00
MtCoder.h 25.00 2025-07-05 19:27:33 +05:00
MtDec.c 24.05 2024-05-15 23:55:04 +05:00
MtDec.h 23.01 2023-12-17 14:59:19 +05:00
Ppmd.h 23.01 2023-12-17 14:59:19 +05:00
Ppmd7.c 24.05 2024-05-15 23:55:04 +05:00
Ppmd7.h 23.01 2023-12-17 14:59:19 +05:00
Ppmd7aDec.c 24.05 2024-05-15 23:55:04 +05:00
Ppmd7Dec.c 24.05 2024-05-15 23:55:04 +05:00
Ppmd7Enc.c 24.05 2024-05-15 23:55:04 +05:00
Ppmd8.c 24.05 2024-05-15 23:55:04 +05:00
Ppmd8.h 23.01 2023-12-17 14:59:19 +05:00
Ppmd8Dec.c 24.05 2024-05-15 23:55:04 +05:00
Ppmd8Enc.c 24.05 2024-05-15 23:55:04 +05:00
Precomp.h 24.05 2024-05-15 23:55:04 +05:00
RotateDefs.h 23.01 2023-12-17 14:59:19 +05:00
Sha1.c 24.09 2024-11-30 15:27:15 +05:00
Sha1.h 24.09 2024-11-30 15:27:15 +05:00
Sha1Opt.c 24.09 2024-11-30 15:27:15 +05:00
Sha3.c 24.09 2024-11-30 15:27:15 +05:00
Sha3.h 24.09 2024-11-30 15:27:15 +05:00
Sha256.c 24.09 2024-11-30 15:27:15 +05:00
Sha256.h 24.09 2024-11-30 15:27:15 +05:00
Sha256Opt.c 24.09 2024-11-30 15:27:15 +05:00
Sha512.c 25.00 2025-07-05 19:27:33 +05:00
Sha512.h 24.09 2024-11-30 15:27:15 +05:00
Sha512Opt.c 24.09 2024-11-30 15:27:15 +05:00
Sort.c 25.00 2025-07-05 19:27:33 +05:00
Sort.h 25.00 2025-07-05 19:27:33 +05:00
SwapBytes.c 24.05 2024-05-15 23:55:04 +05:00
SwapBytes.h 23.01 2023-12-17 14:59:19 +05:00
Threads.c 25.00 2025-07-05 19:27:33 +05:00
Threads.h 25.00 2025-07-05 19:27:33 +05:00
var_clang.mak '21.07' 2022-03-18 15:35:13 +05:00
var_clang_arm64.mak 24.05 2024-05-15 23:55:04 +05:00
var_clang_x64.mak '21.07' 2022-03-18 15:35:13 +05:00
var_clang_x86.mak '21.07' 2022-03-18 15:35:13 +05:00
var_gcc.mak '21.07' 2022-03-18 15:35:13 +05:00
var_gcc_arm64.mak '21.07' 2022-03-18 15:35:13 +05:00
var_gcc_x64.mak '21.07' 2022-03-18 15:35:13 +05:00
var_gcc_x86.mak '21.07' 2022-03-18 15:35:13 +05:00
var_mac_arm64.mak '21.07' 2022-03-18 15:35:13 +05:00
var_mac_x64.mak '21.07' 2022-03-18 15:35:13 +05:00
warn_clang.mak 23.01 2023-12-17 14:59:19 +05:00
warn_clang_mac.mak 23.01 2023-12-17 14:59:19 +05:00
warn_gcc.mak '21.07' 2022-03-18 15:35:13 +05:00
Xxh64.c 26.00 2026-02-12 17:38:49 +05:00
Xxh64.h 24.05 2024-05-15 23:55:04 +05:00
Xz.c 24.05 2024-05-15 23:55:04 +05:00
Xz.h 25.00 2025-07-05 19:27:33 +05:00
XzCrc64.c 24.05 2024-05-15 23:55:04 +05:00
XzCrc64.h 24.05 2024-05-15 23:55:04 +05:00
XzCrc64Opt.c 25.00 2025-07-05 19:27:33 +05:00
XzDec.c 25.00 2025-07-05 19:27:33 +05:00
XzEnc.c 25.00 2025-07-05 19:27:33 +05:00
XzEnc.h 25.00 2025-07-05 19:27:33 +05:00
XzIn.c 25.00 2025-07-05 19:27:33 +05:00
ZstdDec.c 24.07 2024-06-19 15:32:41 +05:00
ZstdDec.h 24.05 2024-05-15 23:55:04 +05:00