@@ -198,13 +198,13 @@ int git_win32_path_from_utf8(git_win32_path out, const char *src)
198
198
/* See if this is an absolute path (beginning with a drive letter) */
199
199
if (path__is_absolute (src )) {
200
200
if (git__utf8_to_16 (dest , MAX_PATH , src ) < 0 )
201
- return -1 ;
201
+ goto on_error ;
202
202
}
203
203
/* File-prefixed NT-style paths beginning with \\?\ */
204
204
else if (path__is_nt_namespace (src )) {
205
205
/* Skip the NT prefix, the destination already contains it */
206
206
if (git__utf8_to_16 (dest , MAX_PATH , src + PATH__NT_NAMESPACE_LEN ) < 0 )
207
- return -1 ;
207
+ goto on_error ;
208
208
}
209
209
/* UNC paths */
210
210
else if (path__is_unc (src )) {
@@ -213,36 +213,43 @@ int git_win32_path_from_utf8(git_win32_path out, const char *src)
213
213
214
214
/* Skip the leading "\\" */
215
215
if (git__utf8_to_16 (dest , MAX_PATH - 2 , src + 2 ) < 0 )
216
- return -1 ;
216
+ goto on_error ;
217
217
}
218
218
/* Absolute paths omitting the drive letter */
219
219
else if (src [0 ] == '\\' || src [0 ] == '/' ) {
220
220
if (path__cwd (dest , MAX_PATH ) < 0 )
221
- return -1 ;
221
+ goto on_error ;
222
222
223
223
if (!path__is_absolute (dest )) {
224
224
errno = ENOENT ;
225
- return -1 ;
225
+ goto on_error ;
226
226
}
227
227
228
228
/* Skip the drive letter specification ("C:") */
229
229
if (git__utf8_to_16 (dest + 2 , MAX_PATH - 2 , src ) < 0 )
230
- return -1 ;
230
+ goto on_error ;
231
231
}
232
232
/* Relative paths */
233
233
else {
234
234
int cwd_len ;
235
235
236
236
if ((cwd_len = git_win32_path__cwd (dest , MAX_PATH )) < 0 )
237
- return -1 ;
237
+ goto on_error ;
238
238
239
239
dest [cwd_len ++ ] = L'\\' ;
240
240
241
241
if (git__utf8_to_16 (dest + cwd_len , MAX_PATH - cwd_len , src ) < 0 )
242
- return -1 ;
242
+ goto on_error ;
243
243
}
244
244
245
245
return git_win32_path_canonicalize (out );
246
+
247
+ on_error :
248
+ /* set windows error code so we can use its error message */
249
+ if (errno == ENAMETOOLONG )
250
+ SetLastError (ERROR_FILENAME_EXCED_RANGE );
251
+
252
+ return -1 ;
246
253
}
247
254
248
255
int git_win32_path_to_utf8 (git_win32_utf8_path dest , const wchar_t * src )
0 commit comments