From 4041c6b686f371f607ab78904a71ba860787d4a4 Mon Sep 17 00:00:00 2001
From: Eric Pouech <eric.pouech@wanadoo.fr>
Date: Tue, 10 Sep 2002 00:32:55 +0000
Subject: [PATCH] Fixed some line reading functions.

---
 debugger/debug.l  | 18 ++++++++++--------
 debugger/source.c | 37 ++++++++++++++++---------------------
 2 files changed, 26 insertions(+), 29 deletions(-)

diff --git a/debugger/debug.l b/debugger/debug.l
index e8b3212b63e..0034425a357 100644
--- a/debugger/debug.l
+++ b/debugger/debug.l
@@ -36,7 +36,7 @@ static int DEBUG_FetchFromLine(const char* pfx, char* buf, int size);
 
 #define YY_INPUT(buf,result,max_size) \
 	if ( (result = DEBUG_FetchFromLine("Wine-dbg>", buf, max_size)) < 0 ) \
-	    YY_FATAL_ERROR( "ReadLine() in flex scanner failed" );
+	    YY_FATAL_ERROR( "FetchFromLine() in flex scanner failed" );
 
 #define YY_NO_UNPUT
 
@@ -227,7 +227,7 @@ static int      DEBUG_FetchEntireLine(const char* pfx, char** line, size_t* allo
     do
     {
 	if (!ReadFile(DEBUG_hParserInput, buf_line, sizeof(buf_line) - 1, &nread, NULL) || nread == 0)
-	    break;
+            break;
 	buf_line[nread] = '\0';
 
         if (check_nl && len == 0 && nread == 1 && buf_line[0] == '\n')
@@ -246,9 +246,7 @@ static int      DEBUG_FetchEntireLine(const char* pfx, char** line, size_t* allo
     {
         *line = HeapReAlloc(GetProcessHeap(), 0, *line, *alloc = 1);
         **line = '\0';
-        strcpy(*line + len, buf_line);
-        len += nread;
-    } while (nread == 0 || buf_line[nread - 1] != '\n');
+    }
 
     /* Remove leading and trailing whitespace from the line */
     stripwhite(*line);
@@ -294,10 +292,14 @@ int DEBUG_ReadLine(const char* pfx, char* buf, int size)
     size_t      len = 0;
 
     DEBUG_FetchEntireLine(pfx, &line, &len, FALSE);
-    len = min(size, len);
-    memcpy(buf, line, len - 1);
+    len = strlen(line);
+    /* remove trailing \n */
+    if (len > 0 && line[len - 1] == '\n') len--;
+    len = min(size - 1, len);
+    memcpy(buf, line, len);
     buf[len] = '\0';
-    return len - 1;
+    HeapFree(GetProcessHeap(), 0, line);
+    return 1;
 }
 
 static char** local_symbols /* = NULL */;
diff --git a/debugger/source.c b/debugger/source.c
index 7ffae57bc06..bb3038614d3 100644
--- a/debugger/source.c
+++ b/debugger/source.c
@@ -110,7 +110,7 @@ static  void*   DEBUG_MapFile(const char* name, HANDLE* hMap, unsigned* size)
 {
     HANDLE              hFile;
 
-    hFile = CreateFile(name, GENERIC_READ, FILE_SHARE_READ, NULL, 
+    hFile = CreateFile(name, GENERIC_READ, FILE_SHARE_READ, NULL,
                        OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
     if (hFile == INVALID_HANDLE_VALUE) return (void*)-1;
     if (size != NULL && (*size = GetFileSize(hFile, NULL)) == -1) return (void*)-1;
@@ -152,13 +152,13 @@ DEBUG_DisplaySource(char * sourcefile, int start, int end)
     HANDLE                      hMap;
     DWORD			status;
     char			tmppath[PATH_MAX];
-    
+
     /*
      * First see whether we have the file open already.  If so, then
      * use that, otherwise we have to try and open it.
      */
     ol = DEBUG_SearchOpenFile(sourcefile);
-    
+
     if ( ol == NULL )
     {
         /*
@@ -171,10 +171,10 @@ DEBUG_DisplaySource(char * sourcefile, int start, int end)
             basename = sourcefile;
         else
             basename++;
-        
+
         ol = DEBUG_SearchOpenFile(basename);
     }
-    
+
     if ( ol == NULL )
     {
         /*
@@ -202,11 +202,11 @@ DEBUG_DisplaySource(char * sourcefile, int start, int end)
                  * Now append the base file name.
                  */
                 strcat(tmppath, basename);
-                
+
                 status = GetFileAttributes(tmppath);
                 if ( status != -1 ) break;
             }
-            
+
             if ( sl == NULL )
             {
                 if (DEBUG_InteractiveP)
@@ -217,12 +217,7 @@ DEBUG_DisplaySource(char * sourcefile, int start, int end)
                      */
                     sprintf(zbuf, "Enter path to file '%s': ", sourcefile);
                     DEBUG_ReadLine(zbuf, tmppath, sizeof(tmppath));
-                    
-                    if ( tmppath[strlen(tmppath)-1] == '\n' )
-                    {
-                        tmppath[strlen(tmppath)-1] = '\0';
-                    }
-                    
+
                     if ( tmppath[strlen(tmppath)-1] != '/' )
                     {
                         strcat(tmppath, "/");
@@ -231,7 +226,7 @@ DEBUG_DisplaySource(char * sourcefile, int start, int end)
                      * Now append the base file name.
                      */
                     strcat(tmppath, basename);
-                    
+
                     status = GetFileAttributes(tmppath);
                 }
                 else
@@ -239,7 +234,7 @@ DEBUG_DisplaySource(char * sourcefile, int start, int end)
                     status = -1;
                     strcpy(tmppath, sourcefile);
                 }
-                
+
                 if ( status == -1 )
                 {
                     /*
@@ -269,7 +264,7 @@ DEBUG_DisplaySource(char * sourcefile, int start, int end)
         ol->linelist = NULL;
         ol->size = 0;
         ofiles = ol;
-        
+
         addr = DEBUG_MapFile(tmppath, &hMap, &ol->size);
         if ( addr == (char *) -1 )
         {
@@ -287,10 +282,10 @@ DEBUG_DisplaySource(char * sourcefile, int start, int end)
                 ol->nlines++;
             }
         }
-        
+
         ol->nlines++;
         ol->linelist = (unsigned int*) DBG_alloc( ol->nlines * sizeof(unsigned int) );
-        
+
         nlines = 0;
         pnt = addr;
         ol->linelist[nlines++] = 0;
@@ -302,7 +297,7 @@ DEBUG_DisplaySource(char * sourcefile, int start, int end)
             }
         }
         ol->linelist[nlines++] = pnt - addr;
-        
+
     }
     else
     {
@@ -324,7 +319,7 @@ DEBUG_DisplaySource(char * sourcefile, int start, int end)
 	{
             continue;
 	}
-        
+
         rtn = TRUE;
         memset(&buffer, 0, sizeof(buffer));
         if ( ol->linelist[i+1] != ol->linelist[i] )
@@ -334,7 +329,7 @@ DEBUG_DisplaySource(char * sourcefile, int start, int end)
 	}
         DEBUG_Printf(DBG_CHN_MESG,"%d\t%s\n", i + 1,  buffer);
     }
-    
+
     DEBUG_UnmapFile(addr, hMap);
     return rtn;
 }
-- 
GitLab