ReactOS рдХреЗ рддрд╣рдд рд╡рд┐рдВрдбреЛрдЬ рдХреЗ рд▓рд┐рдП Git рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛

рд╕рднреА рдХреЛ рд╢реБрдн рджрд┐рди! рдЫрд╡рд┐


рдореЗрд░рд╛ рдирд╛рдо рд╕реНрдЯреЗрдирд┐рд╕реНрд▓рд╛рд╡ рд╣реИ рдФрд░ рдореБрдЭреЗ рдХреЛрдб рд▓рд┐рдЦрдирд╛ рдкрд╕рдВрдж рд╣реИред рдпрд╣ рд╣реИрдмреЗ рдкрд░ рдореЗрд░рд╛ рдкрд╣рд▓рд╛ рд▓реЗрдЦ рд╣реИ, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдХрдИ рдХрд╛рд░рдХреЛрдВ рдиреЗ рдореБрдЭреЗ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЗрд░рд┐рдд рдХрд┐рдпрд╛:


  • ReactOS рд╣рдм рдореЗрдВ рддрдХрдиреАрдХреА рд▓реЗрдЦреЛрдВ рдХреА рдХрдореА
  • рд╣рд╛рд▓ рд╣реА рдореЗрдВ geektimes рдкрд░ рд▓реМрдЯреЗрдВ
  • ReactOS рдореЗрдВ ReactOS рдмрдирд╛рдиреЗ рдХреА рдХреНрд╖рдорддрд╛
  • рд░рд┐рдПрдХреНрдЯреЛрд╕ рдореЗрдВ рдПрдХ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рдорд╛рдорд▓рд╛, рдЬрд┐рд╕рдореЗрдВ рдореИрдВ рд╕реАрдзреЗ рд╢рд╛рдорд┐рд▓ рдерд╛

рдореБрдЭреЗ рдЗрд╕ рдЙрддреНрд╕рд╡ рдХреЗ рдирд╛рдпрдХреЛрдВ (рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдмрдЧ рдЬреЛ рд░рд┐рдПрдХреНрдЯреЛрд╕ рдореЗрдВ рдЧрд┐рдЯ рдХреЗ рдкреНрд░рдХреНрд╖реЗрдкрдг рдХреЛ рд░реЛрдХрддрд╛ рд╣реИ) рд╕реЗ рдорд┐рд▓рд╡рд╛рддрд╛ рд╣реВрдВ - рдлреНрд░рд╛рдВрд╕реАрд╕реА рдбреЗрд╡рд▓рдкрд░ рд╣реЗрд░реНрдорд╕ рдмреЗрд▓реБрд╕реНрдХрд╛-рдорд╛рдЯреЛ (рдЗрд╕рдХреЗ рдмрд╛рдж рдмрд╕ рд╣рд░реНрдореАрд╕, рдЙрдкрдирд╛рдо hbelusca рд╕рд╛рде, рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореБрдЭреЗ (рдЙрдкрдирд╛рдо x86corez )ред


рдХрд╣рд╛рдиреА ReactOS рдбреЗрд╡рд▓рдкрд░реНрд╕ IRC рдЪреИрдирд▓ рдХреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рдВрджреЗрд╢реЛрдВ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рд╣реЛрддреА рд╣реИ:


 Jun 03 18:52:56 <hbelusca> Anybody want to work on some small problem? If so, can someone figure out why this problem https://jira.reactos.org/browse/CORE-12931 happens on ReactOS? :D Jun 03 18:53:13 <hbelusca> That would help having a good ROS self-hosting system with git support. Jun 03 18:53:34 <hbelusca> (the git assertion part only). 

рдбреАрдмреНрд░реАрдлрд┐рдВрдЧ


рдЪреВрдВрдХрд┐ ReactOS рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╡рд┐рдВрдбреЛрдЬ рд╕рд░реНрд╡рд░ 2003 рдХреЗ рд╕рд╛рде рд╕рдВрдЧрддрддрд╛ рдХреЗ рдЙрджреНрджреЗрд╢реНрдп рд╕реЗ рд╣реИ, рдЗрд╕рд▓рд┐рдП Git рд╕рдВрд╕реНрдХрд░рдг 2.10.0 рдХреЛ рдкреНрд░рдпреЛрдЧрд╛рддреНрдордХ рдЦрд░рдЧреЛрд╢ рдХреЗ рд░реВрдк рдореЗрдВ рдЪреБрдирд╛ рдЧрдпрд╛ рдерд╛, рдЖрдЦрд┐рд░реА рд╡рд╣ рдЬреЛ Windows XP рдФрд░ 2003 рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдХрд╛ рджрд╛рд╡рд╛ рдХрд░рддрд╛ рд╣реИред


рд░рд┐рдПрдХреНрдЯреЛрд╕ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдкрд░ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд╕рдорд╕реНрдпрд╛ рдХреЗ рдмрд╛рд╣рд░реА рд▓рдХреНрд╖рдг рдмрд▓реНрдХрд┐ рдорд┐рд╢реНрд░рд┐рдд рдереЗред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЕрддрд┐рд░рд┐рдХреНрдд рддрд░реНрдХреЛрдВ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдП рдмрд┐рдирд╛ git рд╢реБрд░реВ рдХрд░рддреЗ рд╕рдордп, рдпрд╣ рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╕рдорд╕реНрдпрд╛ рдХреЗ рдХрдВрд╕реЛрд▓ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ git clone рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд╛рдпрдХ рдерд╛ git clone рдпрд╛ рдХрдо рд╕реЗ рдХрдо git --version , рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдХрдВрд╕реЛрд▓ рдиреЗ рдХреБрдЫ рднреА рдкреНрд░рджрд░реНрд╢рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛, рдпрд╛ рдХрднреА-рдХрднреА рдЬреЛрд░ рд╕реЗ рдПрдХ рдЯреВрдЯрд╛ рд╣реБрдЖ рд╕рдВрджреЗрд╢ рджрд┐рдЦрд╛рдпрд╛:


 git.exe clone -v "https://github.com/minoca/os.git" "C:\Documents and Settings\Administrator\Bureau\minocaos" A ssertionfailed ! P rogram : C : \ P rogram F iles \ G it \ mingw 3 2 \ bin \ git . exe F ile : exec _ cmd . c , L ine 2 3 E xpression : argv 0 _ path This application has requested the Runtime to terminate in an unusual way. Please contact the application's support team for more information. 

рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдореЗрдВ рдмрд╣реБрдд рдорджрдж рдорд┐рд▓реА рдХрд┐ рдЧрд┐рдЯ рдХреНрд▓рд╛рдЗрдВрдЯ рдЦреБрд▓рд╛ рд╕реНрд░реЛрдд рдерд╛, рдФрд░ рдЙрд╕ рд▓рд╛рдЗрди рдХреЛ рдЦреЛрдЬрдирд╛, рдЬрд┐рд╕ рдкрд░ рдЕрдкрд╡рд╛рдж рдирд╣реАрдВ рд╣реБрдЖ рдерд╛, рдЬреЛ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рдереА: https://github.com/git-for-windows/git/blob/4cde6287b84n8f4c5ccb4062617851a2f7d7fc78/exec_cmред рд╕реА # рдПрд▓ 23


 char *system_path(const char *path) { /*  */ #ifdef RUNTIME_PREFIX assert(argv0_path); //    assert(is_absolute_path(argv0_path)); /*  */ #endif strbuf_addf(&d, "%s/%s", prefix, path); return strbuf_detach(&d, NULL); } 

рдФрд░ рдЪрд░ argv0_path рдорд╛рди рдХреЛрдб рдХреЗ рдЗрд╕ рднрд╛рдЧ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ argv0_path :


 const char *git_extract_argv0_path(const char *argv0) { const char *slash; if (!argv0 || !*argv0) return NULL; slash = find_last_dir_sep(argv0); if (slash) { argv0_path = xstrndup(argv0, slash - argv0); return slash + 1; } return argv0; } 

рдЗрди рд╡рд┐рд╡рд░рдгреЛрдВ рдХреЛ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ рдЖрдИрдЖрд░рд╕реА рдЪреИрдирд▓ рдкрд░ рд╕рджрд╕реНрдпрддрд╛ рд╕рдорд╛рдкреНрдд рдХрд░ рд▓реА:


 Jun 03 19:04:36 <x86corez> hbelusca: https://github.com/git-for-windows/git/blob/4cde6287b84b8f4c5ccb4062617851a2f3d7fc78/exec_cmd.c#L23 Jun 03 19:04:41 <x86corez> assertion is here Jun 03 19:04:57 <hbelusca> yes I know, I've seen the code yesterday. The question is why it's FALSE on ROS but TRUE on Windows. Jun 03 19:06:02 <x86corez> argv0_path = xstrndup(argv0, slash - argv0); Jun 03 19:06:22 <x86corez> xstrndup returns NULL %-) Jun 03 19:06:44 <hbelusca> ok, so what's the values of argv0 and slash on windows vs. on ROS? :P Jun 03 19:08:48 <x86corez> good question! 

рдЪрд░ рдирд╛рдо, рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рдерд╛, рд╕рдВрдХреЗрдд рджреЗрддрд╛ рд╣реИ рдХрд┐ рдорд╛рди argv[0] рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ - рдЖрдорддреМрд░ рдкрд░ рдЗрд╕ рд╕рд░рдгреА рдХреЗ рд╢реВрдиреНрдп рд╕реВрдЪрдХрд╛рдВрдХ рдореЗрдВ рдХрдорд╛рдВрдб рдХреЗ рдирд╛рдо рдХреЗ рд╕рд╛рде рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╡рд░реНрддрдорд╛рди рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рд╕рд╛рде рдмреБрд▓рд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред рд▓реЗрдХрд┐рди рднрд╡рд┐рд╖реНрдп рдореЗрдВ, рд╕рдм рдХреБрдЫ рдЗрддрдирд╛ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рдерд╛ ...


 Jun 03 20:15:21 <x86corez> hbelusca: surprise... git uses its own xstrndup implementation Jun 03 20:15:35 <x86corez> so I can't simply hook it xD Jun 03 20:15:56 <hbelusca> well, with such a name "xstrndup" it's not surprising it's its own implementation Jun 03 20:16:04 <x86corez> probably I would need an user-mode debugger... like OllyDbg Jun 03 20:16:09 <hbelusca> that's everything but standardized function. Jun 03 20:16:24 <hbelusca> x86corez: ollydbg should work on ROS. Jun 03 20:16:30 <mjansen> what are you breaking today? Jun 03 20:16:44 <x86corez> mjansen: https://jira.reactos.org/browse/CORE-12931 Jun 03 20:16:51 <hbelusca> (of course if you also are able to compile that git with symbols and all the stuff, it would be very nice) 

рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЗ рд▓рд┐рдП рдЬрд╛рдУ


рдЙрд╕рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ рд╕реНрд░реЛрдд рд╕реЗ рдЧрд┐рдЯ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рддрд╛рдХрд┐ рдХрдВрд╕реЛрд▓ рдкрд░ рд╕реАрдзреЗ "рдмреНрдпрд╛рдЬ рдХреА рдЪрд░" рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП "рдЙрдбрд╝рд╛рди рдкрд░" рдЖрд╕рд╛рди рд╣реЛред рдореИрдВрдиреЗ рдЗрд╕ рдЪрд░рдг-рджрд░-рдЪрд░рдг рдореИрдиреБрдЕрд▓ рдХрд╛ рдЪрдпрди рдХрд┐рдпрд╛ , рдФрд░ рдПрдХ рд╕рдВрдЧрдд рд╕рдВрд╕реНрдХрд░рдг рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдВрдиреЗ рдЗрд╕ рд╢рд╛рдЦрд╛ рдХреЛ рдЪреБрдирд╛: https://github.com/git-for-windows/git/tree/v2.10.0-rc2


Mingw32 рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рдЯреВрд▓рдХрд┐рди рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рдмрд┐рдирд╛ рдЪрд▓рд╛ рдЧрдпрд╛, рдФрд░ рдореИрдВрдиреЗ рдирд┐рд░реНрдорд╛рдг рд╢реБрд░реВ рдХрд┐рдпрд╛ред рд▓реЗрдХрд┐рди рдЗрд╕ рддрд░рд╣ рдХреЗ рдХрджрдо-рджрд░-рдЪрд░рдг рдореИрдиреБрдЕрд▓ рдореЗрдВ рдЕрдХреНрд╕рд░ рдЕрдирд┐рд░реНрджрд┐рд╖реНрдЯ рдиреБрдХрд╕рд╛рди рд╣реЛрддреЗ рд╣реИрдВ, рдФрд░ рдореИрдВ рддреБрд░рдВрдд рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рдореЗрдВ рдЖрдпрд╛:


рдЫрд╡рд┐


рдкрд░реАрдХреНрд╖рдг рдФрд░ рддреНрд░реБрдЯрд┐ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ, рд╕рд╛рде рд╣реА рджрд░реНрд╢рдХреЛрдВ (рдЖрдИрдЖрд░рд╕реА рдЪреИрдирд▓) рд╕реЗ рд╕рдВрдХреЗрддреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рд╕рднреА рд╕рдВрдХрд▓рди рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЕрдЧрд░ рдХреЛрдИ рдореЗрд░рд╛ рд░рд╛рд╕реНрддрд╛ рджреЛрд╣рд░рд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ, рддреЛ рдореИрдВ рдПрдХ рд╕рдлрд▓ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдЕрдВрддрд░ рдХреЛ рд╕рд╛рдЭрд╛ рдХрд░рддрд╛ рд╣реВрдВ: https://pastebin.com/ZiA9MaKt


рдЖрд░рдВрднреАрдХрд░рдг рдХреЗ рджреМрд░рд╛рди рдХрдИ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдкреНрд░рднрд╛рд╡ рдХреЛ рдЦрддреНрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ main() рдлрд╝рдВрдХреНрд╢рди рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдХрдИ рдбрд┐рдмрдЧрд┐рдВрдЧ рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛, рдЬреЛ рдХрд┐ git рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ common-main.c рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИ:


 int main(int argc, const char **argv) { /* * Always open file descriptors 0/1/2 to avoid clobbering files * in die(). It also avoids messing up when the pipes are dup'ed * onto stdin/stdout/stderr in the child processes we spawn. */ //DebugBreak(); printf("sanitize_stdfds(); 1\n"); sanitize_stdfds(); printf("git_setup_gettext(); 1\n"); git_setup_gettext(); /* * Always open file descriptors 0/1/2 to avoid clobbering files * in die(). It also avoids messing up when the pipes are dup'ed * onto stdin/stdout/stderr in the child processes we spawn. */ printf("sanitize_stdfds(); 2\n"); sanitize_stdfds(); printf("git_setup_gettext(); 2\n"); git_setup_gettext(); printf("before argv[0] = %s\n", argv[0]); argv[0] = git_extract_argv0_path(argv[0]); printf("after argv[0] = %s\n", argv[0]); restore_sigpipe_to_default(); printf("restore_sigpipe_to_default(); done\n"); return cmd_main(argc, argv); } 

рдирд┐рд╖реНрдХрд░реНрд╖ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдерд╛:


 C:\>git --version sanitize_stdfds(); 1 git_setup_gettext(); 1 sanitize_stdfds(); 2 git_setup_gettext(); 2 before argv[0] = git after argv[0] = git restore_sigpipe_to_default(); done A ssertionfailed ! ( ,    ) 

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реИ, argv[0] рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рд╡рд┐рдЪрд╛рд░ рдбреАрдмрдЧрд░ рдХреЗ рдЕрдВрджрд░ рдЧреЗрдЯ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдпрд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдУрд▓реАрдбрдмрдЧ рдореЗрдВ, рд▓реЗрдХрд┐рди рдХреБрдЫ рдЧрд▓рдд рд╣реЛ рдЧрдпрд╛ ...


 Jun 04 01:54:46 <sanchaez> now please try gdb/ollydbg in ROS Jun 04 01:58:11 <sanchaez> you have gdb in RosBE Jun 04 01:58:20 <sanchaez> just in case :p Jun 04 01:59:45 <x86corez> ollydbg says "nope" with MEMORY_MANAGEMENT bsod Jun 04 02:00:07 <x86corez> !bc 0x0000001A Jun 04 02:00:08 <hTechBot> KeBugCheck( MEMORY_MANAGEMENT ); Jun 04 02:00:13 <hbelusca> :/ Jun 04 02:00:49 <sanchaez> welp Jun 04 02:00:56 <sanchaez> you only have one option now :D 

рдФрд░ рдпрд╣рд╛рдБ рд╕рд╛рдВрдЪреЗрдЬрд╝ рдиреЗ рдПрдХ рдорд╣рд╛рди рд╡рд┐рдЪрд╛рд░ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛, рдЬреЛ рдмрд╣реБрдд рдкреНрд░рдХрд╛рд╢ рдбрд╛рд▓рддрд╛ рд╣реИ !


рдЫрд╡рд┐


рдЕрдзрд┐рдХ рдЕрдкрд╡рд╛рдж рдирд╣реАрдВ рдереЗ, рдФрд░ git рдиреЗ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдЗрд╕рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдореБрджреНрд░рд┐рдд рдХрд┐рдпрд╛ред


 Jun 04 02:23:40 <x86corez> it prints! Jun 04 02:23:44 <x86corez> but only in gdb Jun 04 02:23:53 <hbelusca> oh Jun 04 02:24:00 <hbelusca> C:\git/git.exe Jun 04 02:24:13 <hbelusca> I wonder whether it's the same in windows, or not. 

рдЪреАрдЬреЗрдВ рдЬрдореАрди рдкрд░ рдЙрддрд░ рдЧрдИрдВ, рдФрд░ рдореИрдВрдиреЗ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдкрд░ рдЧрд┐рдЯ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ рддрд░рд╣ рд╕реЗ рдкреНрд░рдпрд╛рд╕ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рдФрд░ рдореИрдВ рдирд╣реАрдВ рд╣рд╛рд░реА!


рдЫрд╡рд┐


рд╕рдорд╕реНрдпрд╛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдереА рдХрд┐ рдЧрд┐рдЯ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдкрд░ рдкреВрд░реНрдг рдкрде рдХреА рдЙрдореНрдореАрдж рдХрд░ рд░рд╣реЗ рдереЗред рдлрд┐рд░ рдореИрдВрдиреЗ рдпрд╣ рдЬрд╛рдВрдЪрдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдХрд┐ рд╡рд┐рдВрдбреЛрдЬ рдореЗрдВ рдХреМрди рд╕рд╛ рдбреЗрдЯрд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдкрд░рд┐рдгрд╛рдореЛрдВ рдиреЗ рдореБрдЭреЗ рдереЛрдбрд╝рд╛ рдЖрд╢реНрдЪрд░реНрдпрдЪрдХрд┐рдд рдХрд┐рдпрд╛ред


рдЫрд╡рд┐


рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ, рдЪрд░ argv[0] рдХреЛ рдЖрд╡реЗрджрди рдХрд░рдиреЗ рдХрд╛ рдкреВрд░рд╛ рд░рд╛рд╕реНрддрд╛ рдорд┐рд▓рд╛ред


 Jun 05 23:01:44 <hbelusca> x86corez: can you try to run git also by not using cmd.exe? Jun 05 23:02:05 <hbelusca> (to exclude the possibility it's cmd that doesn't call Createprocess with a complete path) Jun 05 23:02:09 <hbelusca> while I think it should... Jun 05 23:02:30 <x86corez> not using cmd... moment Jun 05 23:02:55 <hbelusca> x86corez: alternatively, on windows, try starting git using our own cmd.exe :) 

рд╣реЗрдореАрдЬрд╝ рдиреЗ рдЬрд╛рдБрдЪрдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рдХрд┐ рдХреНрдпрд╛ рд░рд┐рдПрдХреНрдЯреЛрд╕ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдкрд░ рдХрд╣реАрдВ рд╕рдорд╕реНрдпрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ ...


рдЫрд╡рд┐


рд▓реЗрдХрд┐рди рдРрд╕рд╛ рдирд╣реАрдВ рдерд╛ред Cmd рд╢реЗрд▓ рд╡рд┐рдХрд▓реНрдк рдЧрд╛рдпрдм рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред


 Jun 05 23:04:38 <x86corez> ROS cmd is not guilty Jun 05 23:07:57 <hbelusca> If there was a possibility to consult the received path, before looking at the contents of argvs... ? Jun 05 23:08:30 <x86corez> dump contents of actual command line? Jun 05 23:08:39 <hbelusca> yeah Jun 05 23:09:39 <hbelusca> The thing you retrieve using GetCommandLineW Jun 05 23:10:03 <hbelusca> (which is, after simplifications, basically : NtCurrentPeb()->ProcessParameters->CommandLine ) Jun 05 23:10:59 <hbelusca> Also I was thinking it could be a side-effect of having (or not having) git path into the env-vars.... Jun 05 23:12:17 <x86corez> hbelusca, command line is "git --version" Jun 05 23:12:34 <hbelusca> Always? Jun 05 23:12:39 <x86corez> Yes, even on Windows Jun 05 23:15:13 <hbelusca> ok but then it would be nice if these different results are at least the same on Windows and on ROS, so that we can 100% exclude problems outside of msvcrt. 

рдЕрдм рдЬреЛ рдХреБрдЫ рдмрдЪрд╛ рдерд╛ рд╡рд╣ рд╡рд┐рдВрдбреЛрдЬ рдХреЗ рд▓рд┐рдП рд░рд┐рдПрдХреНрдЯреЛрд╕ рд╕реЗ msvcrt.dll рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдирд╛ рдерд╛ред рдореИрдВрдиреЗ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЙрд╕реА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рд░рдЦрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╣рд╛рдВ git.exe рдЭреВрда рдмреЛрд▓ рд░рд╣реА рдереА, рд▓реЗрдХрд┐рди рдЗрд╕рд╕реЗ рдХреЛрдИ рдлрд╛рдпрджрд╛ рдирд╣реАрдВ рд╣реБрдЖред рдорд╛рд░реНрдХ рдиреЗ .local рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╕рд╛рде рдПрдХ рддрд░реАрдХрд╛ рд╕реБрдЭрд╛рдпрд╛:


 Jun 05 22:59:01 <mjansen> x86corez: add .local file next to msvcrt.dll ;) Jun 05 22:59:47 <mjansen> exename.exe.local Jun 05 23:00:17 <x86corez> just an empty file? Jun 05 23:00:21 <mjansen> yea Jun 05 23:00:49 <hbelusca> mjansen: do we support these .local files? Jun 05 23:00:52 <mjansen> we dont Jun 05 23:00:54 <mjansen> windows does Jun 05 23:15:48 <x86corez> moment... I'll try with .local Jun 05 23:18:43 <x86corez> mjansen: I've created git.exe.local but it still doesn't load msvcrt.dll in this directory 

рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рдпрд╣ рд╡рд┐рдХрд▓реНрдк рднреА рдХрд╛рдо рдирд╣реАрдВ рдЖрдпрд╛ред рд╢рд╛рдпрдж рдпрд╣ рддрдереНрдп рдХрд┐ рдореИрдВрдиреЗ Windows Server 2008 R2 рдХреЗ рд╕рд░реНрд╡рд░ рд╕рдВрд╕реНрдХрд░рдг рдкрд░ рд╕рднреА рдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд┐рдпрд╛ред


рд╣реЗрдореАрдЬрд╝ рдиреЗ рдЕрдВрддрд┐рдо рд╡рд┐рдЪрд╛рд░ рд╕реБрдЭрд╛рдпрд╛:


 Jun 05 23:19:28 <hbelusca> last solution: patch "msvcrt" name within git and perhaps other mingwe dlls ^^ Jun 05 23:20:12 <x86corez> good idea about patching! 

WinHex рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдореИрдВрдиреЗ msvcrt рд╕рд╛рде msvcrd рдлрд╝рд╛рдЗрд▓ рдореЗрдВ msvcrt рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХреА рд╕рднреА рдШрдЯрдирд╛рдУрдВ рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛, рдФрд░ рдЙрд╕рдХреЗ рдЕрдиреБрд╕рд╛рд░ ReactOS рд╕реЗ msvcrt.dll рдХрд╛ рдирд╛рдо рдмрджрд▓рд╛, рдФрд░ рдпрд╣ рд╡рд╣реА рд╣реБрдЖ:


рдЫрд╡рд┐


 Jun 05 23:23:29 <x86corez> Yes! guilty is msvcrt :) Jun 05 23:25:37 <hbelusca> ah, so as soon as git uses our msvcrt we get the problem on windows. Jun 05 23:25:38 <x86corez> hbelusca, mjansen, https://image.prntscr.com/image/FoOWnrQ4SOGMD-66DLW16Q.png Jun 05 23:25:58 <hbelusca> aha and it asserts <3 Jun 05 23:26:03 <hbelusca> (it shows the assertion now) 

рдЕрдм рд╡рд┐рдВрдбреЛрдЬ рдкрд░, рд╣рдореЗрдВ рд╡рд╣реА рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдорд┐рд▓рд╛! рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕реНрд░реЛрдд рд░рд┐рдПрдХреНрдЯреЛрд╕ рд╕реЗ рдПрдХ рдПрдордПрд╕рд╕реАрдХреНрдпреВрдЖрд░рдЯреА рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИред


рдпрд╣ рднреА рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╡рд┐рдВрдбреЛрдЬ рдХреЗ рддрд╣рдд рдЕрдкрд╡рд╛рдж рдкрд╛рда рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред


 Jun 05 23:26:13 <x86corez> but it prints text and correctly. Jun 05 23:26:20 <hbelusca> oh Jun 05 23:26:33 <x86corez> and on ROS it doesn't print in most cases xD Jun 05 23:26:38 <hbelusca> so also it excludes another hypothesis, namely that it could have been a bug in our msvcrt/crt Jun 05 23:26:56 <hbelusca> So possibly a strange bug in our console 

рдпрд╣ рдХреЗрд╡рд▓ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛ рд░рд╣рд╛ рдХрд┐ msvcrt рдореЗрдВ рдХреМрди рд╕рд╛ рдлрд╝рдВрдХреНрд╢рди рд░рдирд┐рдВрдЧ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдлрд╝рд╛рдЗрд▓ рдХреЛ рдкреВрд░реНрдг рдкрде рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдереЛрдбрд╝реА рд╕реА _pgmptr рдХрд░рддреЗ рд╣реБрдП, рдореИрдВрдиреЗ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рдХрд┐ рдмрд┐рдВрджреБ _pgmptr рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рд╣реИред


 Jun 06 00:07:43 <x86corez> https://msdn.microsoft.com/en-us/library/tza1y5f7.aspx Jun 06 00:07:57 <x86corez> When a program is run from the command interpreter (Cmd.exe), _pgmptr is automatically initialized to the full path of the executable file. Jun 06 00:08:01 <x86corez> this ^^) Jun 06 00:08:50 <hbelusca> That's what GetModuleFileName does. Jun 06 00:09:04 <x86corez> yeah Jun 06 00:10:30 <hbelusca> Of course in ROS msvcrt we don't do this, but instead we initialize pgmptr to what argv[0] could be. Jun 06 00:11:08 <hbelusca> That's one thing. Jun 06 00:11:34 <hbelusca> The other thing is that nowhere it appears (in MS CRT from VS, or in wine) that argv is initialized using pgmptr. Jun 06 00:13:33 <x86corez> hbelusca, I've checked argv[0] in some ROS command line tools, running them in Windows Jun 06 00:13:56 <x86corez> they all interpret argv[0] as command line, not full path Jun 06 00:14:04 <x86corez> so... I think it's git specific behaviour Jun 06 00:14:16 <x86corez> or specific mingw compiler settings Jun 06 00:28:12 <hbelusca> x86corez: I'm making a patch for our msvcrt, would be nice if you could test it :) Jun 06 00:28:21 <x86corez> I'll test it 

рд╣реЗрдореАрдЬрд╝ рдиреЗ рдкреИрдЪ рдХрд╛ рдПрдХ рд▓рд┐рдВрдХ рднреЗрдЬрд╛, рдореИрдВрдиреЗ рдЗрд╕реЗ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдФрд░ рд╕рд┐рд╕реНрдЯрдо рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдпрд╛, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рд╕рдм рдХреБрдЫ рдЬрд╛рджреБрдИ рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП!


рдЫрд╡рд┐


 Jun 06 00:34:26 <x86corez> hbelusca, IT WORKS! Jun 06 00:35:10 <hbelusca> LOL Jun 06 00:35:18 <hbelusca> So it seems that something uses pgmptr to rebuild an argv. Jun 06 00:35:52 <x86corez> I've even able to clone :) Jun 06 00:36:19 <hbelusca> \o/ Jun 06 00:36:21 <gigaherz> 2.10.0-rc2? not the release? Jun 06 00:36:24 <hbelusca> ok I'm gonna commit that stuff. Jun 06 00:36:43 <hbelusca> x86corez: gonna have ROS self-hosting <33 Jun 06 00:36:48 <x86corez> yeah! Jun 06 00:37:01 <x86corez> gigaherz: I've built that from sources Jun 06 00:37:37 <gigaherz> oh, for testing this bug? o_O Jun 06 00:37:50 <sanchaez> yes, you missed the fun :p Jun 06 00:39:46 <x86corez> git 2.10.0-windows.1 (release) works too! Jun 06 00:39:54 <encoded> commit!!! 

рдЕрдВрддрднрд╛рд╖рдг


рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдПрдХ рдФрд░ рдмрдЧ рдЬреЛ рд░рд┐рдПрдХреНрдЯреЛрд╕ рдХреЗ рдЕрдВрджрд░ рд░рд┐рдПрдХреНрдЯреЛрд╕ рдХреЗ рд╕реНрд╡-рд╕рдВрдпреЛрдЬрди рдореЗрдВ рдЕрдкреНрд░рддреНрдпрдХреНрд╖ рд░реВрдк рд╕реЗ рдмрд╛рдзрд╛ рдбрд╛рд▓рддрд╛ рд╣реИ, рд╕рд╛рдореВрд╣рд┐рдХ рдкреНрд░рдпрд╛рд╕реЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рддрдп рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдПрдХ рдордЬреЗрджрд╛рд░ рд╕рдВрдпреЛрдЧ рдпрд╣ рд╣реИ рдХрд┐ рдХреБрдЫ рд╣реА рд╕рдордп рдкрд╣рд▓реЗ рдПрдХ рдФрд░ рдмрдЧ рдЙрд╕реА msvcrt (рдпрд╛рдиреА qsort рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ) рдореЗрдВ рддрдп рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЬреЛ qsort рдореЗрдВ USB рдбреНрд░рд╛рдЗрд╡рд░реЛрдВ рдХреЛ qsort рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рдерд╛ред


рдореИрдВ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рд▓рд┐рдЦрд┐рдд рдХрдИ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рднрд╛рдЧ рд▓реЗрддрд╛ рд╣реВрдВ, рджреЛрдиреЛрдВ рдмрдВрдж рдФрд░ рдЦреБрд▓рд╛ рд╕реНрд░реЛрддред рдореИрдВ 2014 рд╕реЗ рд░рд┐рдПрдХреНрдЯреЛрд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдХреЗрд╡рд▓ 2017 рдореЗрдВ рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ рдорджрдж рдФрд░ рдХреЛрдб рд▓рд┐рдЦрдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ред рдЗрд╕ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдХрд╛рдо рдХрд░рдирд╛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрдХ рд╕рдВрдкреВрд░реНрдг рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рд╣реИ! рдПрдХ рдкрд░рд┐рдгрд╛рдо рдХреЗ рд╡рд┐рд╢рд╛рд▓ рдкреИрдорд╛рдиреЗ рдХреЛ рдорд╣рд╕реВрд╕ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдкреНрд░рдпрд╛рд╕реЛрдВ рдХрд╛ рдирд┐рд╡реЗрд╢ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд╕рд╛рде рд╣реА рд╕реБрдЦрдж рдЕрд╣рд╕рд╛рд╕ рдХрд┐ рдПрдХ рдмрдЧ рдХрдо рд╣реЛ рдЧрдпрд╛! :)


рдХрд┐рд╕реА рдХреЛ рд╢рд╛рдпрдж рдЖрд╢реНрдЪрд░реНрдп рд╣реЛрдЧрд╛ рдХрд┐ рдореИрдВ рд░рд┐рдПрдХреНрдЯреЛрд╕ рдХреА рдорджрдж рдХреНрдпреЛрдВ рдХрд░рддрд╛ рд╣реВрдВ, рдФрд░ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рд▓рд┐рдирдХреНрд╕ рдирд╣реАрдВред рдпрд╣ рдРрддрд┐рд╣рд╛рд╕рд┐рдХ рд░реВрдк рд╕реЗ рд╣реБрдЖ рд╣реИ рдХрд┐ рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдореИрдВ рд╡рд┐рдВрдбреЛрдЬ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпрдХреНрд░рдо рд▓рд┐рдЦрддрд╛ рд╣реВрдВ, рдФрд░ рдореЗрд░реА рдкрд╕рдВрджреАрджрд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдбреЗрд▓реНрдлреА рд╣реИред рд╢рд╛рдпрдж рдЗрд╕реАрд▓рд┐рдП, Win32 API рдХреЗ рд╕рд╛рде Windows NT рдХрд╛ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдореЗрд░реЗ рд▓рд┐рдП рдмрд╣реБрдд рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ, рдФрд░ рдореБрдлреНрдд рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рд░рд┐рдПрдХреНрдЯреЛрд╕ рдХреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдПрдХ рдкреБрд░рд╛рдиреЗ рд╕рдкрдиреЗ рдХреЛ рдЬреАрд╡рдВрдд рдХрд░рддреА рд╣реИ - рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ, рдпрд╣ рдЖрдкрдХреЛ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЕрдВрджрд░ рд╕реЗ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред


рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдореЗрд░рд╛ рдкрд╣рд▓рд╛ рд▓реЗрдЦ рдпрд╣рд╛рдБ рдкрдврд╝рдирд╛ рджрд┐рд▓рдЪрд╕реНрдк рд▓рдЧрд╛ред рдореБрдЭреЗ рдЖрдкрдХреА рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рд╣реИ!


рд╕рдВрджрд░реНрдн


Source: https://habr.com/ru/post/hi414947/


All Articles