diff options
| author | MatthiasWM <visualc.git@matthiasm.com> | 2022-06-12 14:53:06 +0200 |
|---|---|---|
| committer | MatthiasWM <visualc.git@matthiasm.com> | 2022-06-12 14:53:06 +0200 |
| commit | 1b1e8a4d4682dd802c66884db05f2ebdcaf82218 (patch) | |
| tree | fd8fac33c443d856e2034665a491d0aa28f7fe88 /src | |
| parent | 995e3118a6cdfc93ae75eff0061205983f468122 (diff) | |
Issue #141: fl_filename_absolute bugs fixed for MSWindows.
Diffstat (limited to 'src')
| -rw-r--r-- | src/drivers/WinAPI/Fl_WinAPI_System_Driver.cxx | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/src/drivers/WinAPI/Fl_WinAPI_System_Driver.cxx b/src/drivers/WinAPI/Fl_WinAPI_System_Driver.cxx index cc6aede08..3aaa4401c 100644 --- a/src/drivers/WinAPI/Fl_WinAPI_System_Driver.cxx +++ b/src/drivers/WinAPI/Fl_WinAPI_System_Driver.cxx @@ -54,7 +54,7 @@ typedef RPC_STATUS (WINAPI *uuid_func)(UUID __RPC_FAR *Uuid); # include <mntent.h> #endif -inline int isdirsep(char c) { return c == '/' || c == '\\'; } +static inline int isdirsep(char c) { return c == '/' || c == '\\'; } static wchar_t *mbwbuf = NULL; static wchar_t *wbuf = NULL; @@ -644,16 +644,22 @@ int Fl_WinAPI_System_Driver::filename_absolute(char *to, int tolen, const char * if (isdirsep(*(a-1))) a--; /* remove intermediate . and .. names: */ while (*start == '.') { - if (start[1]=='.' && isdirsep(start[2])) { + if (start[1]=='.' && (isdirsep(start[2]) || start[2]==0) ) { + // found "..", remove the last directory segment form cwd char *b; for (b = a-1; b >= temp && !isdirsep(*b); b--) {/*empty*/} if (b < temp) break; a = b; - start += 3; + if (start[2] == 0) + start += 2; + else + start += 3; } else if (isdirsep(start[1])) { + // found "./" in path, just skip it start += 2; } else if (!start[1]) { - start ++; // Skip lone "." + // found "." at end of path, just skip it + start ++; break; } else break; |
