@@ -76,12 +76,24 @@ static int fatGetAlias (const char* drive, const char* name, const char* nameEnd
7676 break ;
7777 }
7878 }
79+ int extLen = 1 ;
7980 alias [i ] = '.' ;
80- alias [i + 1 ] = entry .entryData [8 ];
81- alias [i + 2 ] = entry .entryData [9 ];
82- alias [i + 3 ] = entry .entryData [10 ];
83- alias [i + 4 ] = '\0' ;
84- resultLen = i + 4 ;
81+ for (extLen = 1 ; extLen <= 3 ; extLen ++ ) {
82+ const int pos = 7 + extLen ;
83+ if (entry .entryData [pos ] == ' ' ) {
84+ break ;
85+ } else {
86+ alias [i + extLen ] = entry .entryData [pos ];
87+ }
88+ }
89+ const int pos = i + extLen ;
90+ if (_FAT_directory_isDirectory (& entry )) {
91+ alias [pos ] = '\x2F' ;
92+ resultLen = pos + 1 ;
93+ } else {
94+ alias [pos ] = '\0' ;
95+ resultLen = pos ;
96+ }
8597 } else {
8698 for (i = 0 ; i <= 8 ; i ++ ) {
8799 if (entry .entryData [i ] == ' ' ) {
@@ -99,17 +111,33 @@ static int fatGetAlias (const char* drive, const char* name, const char* nameEnd
99111 return resultLen ;
100112}
101113
102- void fatGetAliasName (const char * drive , const char * name , char * alias ) {
114+ /* void fatGetAliasName (const char* drive, const char* name, char *alias) {
103115 fatGetAlias (drive, name, NULL, alias);
104- }
116+ } */
117+
118+ void fatGetAliasPath (const char * path , char * alias ) {
119+ if (access (path , F_OK ) != 0 ) {
120+ alias [0 ] = '\0' ;
121+ return ;
122+ }
123+
124+ int drivelen = 0 ;
125+ for (int i = 0 ; i < strlen (path ); i ++ ) {
126+ if (path [i ] == '\x2F' ) {
127+ drivelen = i + 1 ;
128+ break ;
129+ }
130+ }
131+
132+ char drive [8 ] = {0 };
133+ tonccpy (drive , path , drivelen );
105134
106- void fatGetAliasPath (const char * drive , const char * path , char * alias ) {
107135 char dirBak [PATH_MAX ];
108136 getcwd (dirBak , PATH_MAX );
109137 chdir (drive );
110138
111139 char name [128 ];
112- int len = ( int ) strlen ( drive ) ;
140+ int len = drivelen ;
113141 int lfnLen = len ;
114142 if (path [0 ] == '\x2F' ) {
115143 len = 1 ;
0 commit comments