@@ -84,12 +84,14 @@ mrb_execarg_fill(mrb_state *mrb, mrb_value env, mrb_value *argv, mrb_int argc, m
8484 int ai , use_cmd ;
8585 char * * result ;
8686 char * shell ;
87+ char * dln_cmd ;
8788 const char * tCmd ;
88- char fbuf [/*MAXPATHLEN*/ 80 ]; // TODO
89+ char fbuf [/*MAXPATHLEN*/ 80 ]; // TODO
8990 mrb_value argv0 = mrb_nil_value ();
9091
9192 ai = mrb_gc_arena_save (mrb );
9293 tCmd = mrb_string_value_ptr (mrb , argv [0 ]);
94+ dln_cmd = dln_find_exe_r (tCmd , 0 , fbuf , sizeof (fbuf ));
9395
9496 if (mrb_hash_p (opts )) {
9597 eargp -> fd .in = mrb_hash_get (mrb , opts , mrb_check_intern (mrb , "in" , 2 ));
@@ -100,9 +102,9 @@ mrb_execarg_fill(mrb_state *mrb, mrb_value env, mrb_value *argv, mrb_int argc, m
100102 }
101103
102104#if defined(__APPLE__ ) || defined(__linux__ )
103- use_cmd = (argc > 1 || !strrchr (tCmd , ' ' )) ? 1 : 0 ;
105+ use_cmd = (( argc > 1 || !strrchr (tCmd , ' ' )) && dln_cmd ) ? 1 : 0 ;
104106#else
105- use_cmd = (argc > 1 || strstr (tCmd , ".exe" )) ? 1 : 0 ;
107+ use_cmd = (( argc > 1 || strstr (tCmd , ".exe" ) || ! strrchr ( tCmd , ' ' )) && dln_cmd ) ? 1 : 0 ; //TODO bei z.B. readelf.exe -v wäre ohne dln_cmd use_cmd=1, aber dln_find_exe_r kann "readelf -v" nicht auflösen!
106108#endif
107109
108110 if (use_cmd ) {
@@ -133,16 +135,20 @@ mrb_execarg_fill(mrb_state *mrb, mrb_value env, mrb_value *argv, mrb_int argc, m
133135
134136#if defined(__APPLE__ ) || defined(__linux__ )
135137 if (result [0 ][0 ] != '/' ) {
136- argv0 = mrb_str_new (mrb , "/bin/" , 5 ); //TODO redundand?
138+ argv0 = mrb_str_new (mrb , dln_find_exe_r ( tCmd , 0 , fbuf , sizeof ( fbuf )) , 5 ); //TODO redundand?
137139 }
138140#else
139141 if (result [0 ][1 ] != ':' ) {
140- argv0 = mrb_str_new (mrb , "C:\\GnuWin\\bin\\" , 14 ); // TODO: !!!
142+ char * dln_result = dln_find_exe_r (tCmd , 0 , fbuf , sizeof (fbuf ));
143+ argv0 = mrb_str_new (mrb , dln_result , strlen (dln_result ) ); // TODO: !!!
141144 }
142145#endif
143146
147+
148+
149+
144150 if (mrb_bool (argv0 )) {
145- mrb_str_cat_cstr (mrb , argv0 , result [0 ]);
151+ // mrb_str_cat_cstr(mrb, argv0, result[0]);
146152 result [0 ] = mrb_str_to_cstr (mrb , argv0 );
147153 }
148154
0 commit comments