winedbg: Display a valid source file when reporting an error about a missing source...
authorEric Pouech <eric.pouech@orange.fr>
Tue, 15 Mar 2011 21:26:55 +0000 (22:26 +0100)
committerAlexandre Julliard <julliard@winehq.org>
Wed, 16 Mar 2011 13:14:22 +0000 (14:14 +0100)
programs/winedbg/source.c

index e341d48289217bd5fdd8e3b2f60b4c28cb43e7e9..e5648158a719b3c42c374e5cb6e19a1c959ad494 100644 (file)
@@ -199,31 +199,39 @@ static int source_display(const char* sourcefile, int start, int end)
             if (dbg_interactiveP)
             {
                 char zbuf[256];
-                /*
-                 * Still couldn't find it.  Ask user for path to add.
-                 */
-                snprintf(zbuf, sizeof(zbuf), "Enter path to file '%s': ", sourcefile);
-                input_read_line(zbuf, tmppath, sizeof(tmppath));
 
-                if (tmppath[strlen(tmppath) - 1] != '/')
+                for (;;)
                 {
-                    strcat(tmppath, "/");
+                    size_t      len;
+                    /*
+                     * Still couldn't find it.  Ask user for path to add.
+                     */
+                    snprintf(zbuf, sizeof(zbuf), "Enter path to file '%s' (<cr> to end search): ", sourcefile);
+                    input_read_line(zbuf, tmppath, sizeof(tmppath));
+                    if (!(len = strlen(tmppath))) break;
+
+                    /* append '/' if missing at the end */
+                    if (tmppath[len - 1] != '/' && tmppath[len - 1] != '\\')
+                        tmppath[len++] = '/';
+                    strcpy(&tmppath[len], basename);
+                    if (GetFileAttributesA(tmppath) != INVALID_FILE_ATTRIBUTES)
+                        break;
+                    dbg_printf("Unable to access file '%s'\n", tmppath);
                 }
-                /*
-                 * Now append the base file name.
-                 */
-                strcat(tmppath, basename);
             }
-            else tmppath[0] = '\0';
+            else
+            {
+                dbg_printf("Unable to access file '%s'\n", sourcefile);
+                tmppath[0] = '\0';
+            }
 
-            if (GetFileAttributesA(tmppath) == INVALID_FILE_ATTRIBUTES)
+            if (!tmppath[0])
             {
                 /*
                  * OK, I guess the user doesn't really want to see it
                  * after all.
                  */
                 ol = source_add_file(sourcefile, NULL);
-                dbg_printf("Unable to open file '%s'\n", tmppath);
                 return FALSE;
             }
         }