@@ -59,6 +59,7 @@ char** _argv;
5959char * * _envp ;
6060
6161char * _cwd ;
62+ char * _root ;
6263
6364struct efi_simple_text_output_protocol
6465{
@@ -491,8 +492,12 @@ char* _relative_path_to_absolute(char* narrow_string)
491492 char * absolute_path = calloc (__PATH_MAX , 1 );
492493 if (narrow_string [0 ] != '/' && narrow_string [0 ] != '\\' )
493494 {
494- strcpy (absolute_path , _cwd );
495+ strcat (absolute_path , _cwd );
495496 }
497+ else
498+ {
499+ strcat (absolute_path , _root );
500+ }
496501 strcat (absolute_path , narrow_string );
497502
498503 return absolute_path ;
@@ -704,6 +709,7 @@ char* strchr(char const* str, int ch);
704709void _setup_current_working_directory (char * * envp )
705710{
706711 _cwd = calloc (__PATH_MAX , 1 );
712+ _root = calloc (__PATH_MAX , 1 );
707713
708714 unsigned i = 0 ;
709715 unsigned j ;
@@ -719,7 +725,26 @@ void _setup_current_working_directory(char** envp)
719725 j += 1 ;
720726 }
721727 envp [i ][j ] = 0 ;
722- if (strcmp (envp [i ], "cwd" ) == 0 )
728+ if (strcmp (envp [i ], "root" ) == 0 )
729+ {
730+ value = envp [i ] + j + 1 ;
731+ match = strchr (value , ':' ); /* strip uefi device, e.g. fs0: */
732+ if (match != NULL )
733+ {
734+ value = match + 1 ;
735+ }
736+ strcpy (_root , value );
737+ k = 0 ;
738+ while (_root [k ] != '\0' )
739+ {
740+ if (_root [k ] == '\\' )
741+ {
742+ _root [k ] = '/' ;
743+ }
744+ k += 1 ;
745+ }
746+ }
747+ else if (strcmp (envp [i ], "cwd" ) == 0 )
723748 {
724749 value = envp [i ] + j + 1 ;
725750 match = strchr (value , ':' ); /* strip uefi device, e.g. fs0: */
0 commit comments