From 37b80b35e7bcfffeb98ccdafc13a3411bd79fa6d Mon Sep 17 00:00:00 2001
From: Tomas Hajny <hajny@freepascal.org>
Date: Sat, 1 Jul 2006 20:23:23 +0000
Subject: [PATCH]   * fix for (new) bug #7109

git-svn-id: trunk@4039 -
---
 rtl/win/dos.pp | 26 ++++++++++++++++++++------
 1 file changed, 20 insertions(+), 6 deletions(-)

diff --git a/rtl/win/dos.pp b/rtl/win/dos.pp
index 060cfd9690..4e65a6bbce 100644
--- a/rtl/win/dos.pp
+++ b/rtl/win/dos.pp
@@ -655,9 +655,14 @@ begin
   {Should return value load loaddoserror?}
 
   ret:=GetShortPathName(@buffer,@buffer,255);
-  if ret=0 then
-   p:=strpas(buffer);
-  GetShortName:=ret<>0;
+  if (Ret > 0) and (Ret <= 255) then
+   begin
+    Move (Buffer, P [1], Ret);
+    byte (P [0]) := Ret;
+    GetShortName := true;
+   end
+  else
+   GetShortName := false;
 end;
 
 { change to long filename if successful DOS call PM }
@@ -680,9 +685,18 @@ begin
   {Should return value load loaddoserror?}
 
   ret:=GetFullPathName(@sfn,255,@lfn,filename);
-  if ret=0 then
-   p:=strpas(lfn);              {lfn here returns full path, filename only fn}
-  GetLongName:=ret<>0;
+  {lfn here returns full path, filename only fn}
+  { If successful, Ret contains length of the long file name,
+    0 is general error, return value larger than size of buffer (255) means
+    that the buffer size was not sufficient. }
+  if (Ret > 0) and (Ret <= 255) then
+   begin
+    Move (LFN, P [1], Ret);
+    byte (P [0]) := Ret;
+    GetLongName := true;
+   end
+  else
+   GetLongName := false;
 end;
 
 {******************************************************************************