Skip to content

Conversation

Copy link
Contributor

Copilot AI commented Nov 28, 2025

When TEXTINCLUDE 1 specifies a custom header path like include\resource.h or include/resource.h, the parent directory may not exist at the destination when saving an RC file. This caused CopyFileW to fail silently.

Changes

  • Auto-create parent directory before copying header file: In DoWriteRC, when copying a custom header file from TEXTINCLUDE 1, create the destination directory structure if it doesn't exist using SHCreateDirectoryExW
// Create parent directory if it doesn't exist
// This handles paths like "include\resource.h" or "include/resource.h"
WCHAR szDestHeaderDir[MAX_PATH];
StringCchCopyW(szDestHeaderDir, _countof(szDestHeaderDir), szDestHeaderPath);
PathRemoveFileSpecW(szDestHeaderDir);
if (szDestHeaderDir[0] && !PathIsDirectoryW(szDestHeaderDir))
{
    SHCreateDirectoryExW(NULL, szDestHeaderDir, NULL);
}

Note: Backslash escaping in TEXTINCLUDE 1 output is already correctly handled by mstr_quote/mstr_escape.

This pull request was created as a result of the following prompt from Copilot chat.

Win32リソースファイルの TEXTINCLUDE 1 で include パスを文字列リテラルとして出力する際、バックスラッシュ '' を正しくエスケープ('\')する処理が必要です。現在はバックスラッシュ1つで出力されているため、C/C++コードでは正しいパス指定とならず、意図しない動作やエラーの原因となります。以下方針でコード修正を行います。

【修正方針】

  • TEXTINCLUDE 1 の includeパス出力において、バックスラッシュ '' を必ず '\' へ変換してエスケープした文字列リテラルとして出力する処理を追加します。
  • 必要であれば他の TEXTINCLUDE セクションや関連箇所にも同様の処理を拡張します。

【例】

  • 修正前: "include\resource.h"
  • 修正後: "include\resource.h"

この対応によりリソースファイルのパスがC/C++コードで正しく認識されるようになります。

Original prompt

Win32リソースファイルの TEXTINCLUDE 1 で include パスを文字列リテラルとして出力する際、バックスラッシュ '' を正しくエスケープ('\')する処理が必要です。現在はバックスラッシュ1つで出力されているため、C/C++コードでは正しいパス指定とならず、意図しない動作やエラーの原因となります。以下方針でコード修正を行います。

【修正方針】

  • TEXTINCLUDE 1 の includeパス出力において、バックスラッシュ '' を必ず '\' へ変換してエスケープした文字列リテラルとして出力する処理を追加します。
  • 必要であれば他の TEXTINCLUDE セクションや関連箇所にも同様の処理を拡張します。

【例】

  • 修正前: "include\resource.h"
  • 修正後: "include\resource.h"

この対応によりリソースファイルのパスがC/C++コードで正しく認識されるようになります。

This pull request was created as a result of the following prompt from Copilot chat.

Win32リソースファイルの TEXTINCLUDE 1 で include パスを文字列リテラルとして出力する際、バックスラッシュ '' を正しくエスケープ('\')する処理が必要です。現在はバックスラッシュ1つで出力されているため、C/C++コードでは正しいパス指定とならず、意図しない動作やエラーの原因となります。以下方針でコード修正を行います。

【修正方針】

  • TEXTINCLUDE 1 の includeパス出力において、バックスラッシュ '' を必ず '\' へ変換してエスケープした文字列リテラルとして出力する処理を追加します。
  • 必要であれば他の TEXTINCLUDE セクションや関連箇所にも同様の処理を拡張します。

【例】

  • 修正前: "include\resource.h"
  • 修正後: "include\resource.h"

この対応によりリソースファイルのパスがC/C++コードで正しく認識されるようになります。


💬 We'd love your input! Share your thoughts on Copilot coding agent in our 2 minute survey.

Copilot AI and others added 4 commits November 28, 2025 17:20
…/resource.h

Co-authored-by: katahiromz <2107452+katahiromz@users.noreply.github.com>
… TEXTINCLUDE 1

Co-authored-by: katahiromz <2107452+katahiromz@users.noreply.github.com>
…h handling

Co-authored-by: katahiromz <2107452+katahiromz@users.noreply.github.com>
Co-authored-by: katahiromz <2107452+katahiromz@users.noreply.github.com>
Copilot AI changed the title [WIP] Fix escaping of backslashes in TEXTINCLUDE paths Auto-create directories for custom TEXTINCLUDE 1 header paths Nov 28, 2025
Copilot AI requested a review from katahiromz November 28, 2025 17:30
@katahiromz katahiromz marked this pull request as ready for review November 28, 2025 17:30
Co-authored-by: katahiromz <2107452+katahiromz@users.noreply.github.com>
Copilot AI requested a review from katahiromz November 28, 2025 17:33
@katahiromz katahiromz merged commit 6eab671 into master Nov 28, 2025
2 checks passed
@katahiromz katahiromz deleted the copilot/fix-textinclude-escape-backslash branch November 28, 2025 17:36
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants