Skip to content

fix load unicode main script path on windows#6926

Merged
waruqi merged 2 commits intodevfrom
engine
Oct 15, 2025
Merged

fix load unicode main script path on windows#6926
waruqi merged 2 commits intodevfrom
engine

Conversation

@waruqi
Copy link
Member

@waruqi waruqi commented Oct 15, 2025

  • Before adding new features and new modules, please go to issues to submit the relevant feature description first.
  • Write good commit messages and use the same coding conventions as the rest of the project.
  • Please commit code to dev branch and we will merge into master branch in feature
  • Ensure your edited codes with four spaces instead of TAB.

  • 增加新特性和新模块之前,请先到issues提交相关特性说明,经过讨论评估确认后,再进行相应的代码提交,避免做无用工作。
  • 编写友好可读的提交信息,并使用与工程代码相同的代码规范,代码请用4个空格字符代替tab缩进。
  • 请提交代码到dev分支,如果通过,我们会在特定时间合并到master分支上。
  • 为了规范化提交日志的格式,commit消息,不要用中文,请用英文描述。

@waruqi waruqi added this to the v3.0.5 milestone Oct 15, 2025
@gemini-code-assist
Copy link
Contributor

Summary of Changes

Hello @waruqi, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request addresses a critical issue where the Xmake engine failed to load the main script if its path contained Unicode characters, specifically on Windows. By introducing a new, platform-aware script loading function, xm_engine_load_main_script, the changes ensure that the engine can reliably locate and execute scripts regardless of the character set used in their file paths, significantly enhancing compatibility and robustness for Windows users.

Highlights

  • Unicode Path Support: Implemented a dedicated function, xm_engine_load_main_script, to correctly handle Unicode file paths for the main script on Windows operating systems, resolving issues with non-ASCII characters in paths.
  • Windows-Specific File Handling: Introduced a Windows-specific implementation within xm_engine_load_main_script that utilizes tb_file_init and tb_file_read to open and read script content, ensuring proper support for Unicode paths before loading the script into the Lua engine.
  • Refactored Script Loading: Centralized the main script loading logic into the new xm_engine_load_main_script function, replacing the direct luaL_dofile call in xm_engine_main for a more robust and platform-aware approach.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

Copy link
Contributor

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request aims to fix loading of main scripts with Unicode paths on Windows by introducing a new function, xm_engine_load_main_script. The approach of manually reading the file into a buffer is sound. However, I've identified a regression where empty script files, which are valid, would fail to load. My review includes a suggestion to correct this behavior.

Comment on lines +1447 to +1458
tb_assert_and_check_break(size > 0);

// allocate buffer
data = (tb_byte_t*)tb_malloc((tb_size_t)size);
tb_assert_and_check_break(data);

// read file content
if (!tb_file_read(file, data, (tb_size_t)size))
{
tb_printf("error: cannot read file: %s\n", mainfile);
break;
}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

high

The check size > 0 prevents loading empty script files. An empty file is a valid Lua script, and luaL_dofile (used for non-Windows platforms) handles it correctly. This change introduces a regression.

To fix this, you should allow size >= 0 and handle the case where the file is empty (size == 0). In that case, memory allocation and file reading should be skipped.

        tb_assert_and_check_break(size >= 0);

        if (size > 0)
        {
            // allocate buffer
            data = (tb_byte_t*)tb_malloc((tb_size_t)size);
            tb_assert_and_check_break(data);

            // read file content
            if (!tb_file_read(file, data, (tb_size_t)size))
            {
                tb_printf("error: cannot read file: %s\n", mainfile);
                break;
            }
        }

@waruqi waruqi merged commit 2413b8e into dev Oct 15, 2025
44 checks passed
@waruqi waruqi deleted the engine branch October 15, 2025 09:18
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.

1 participant