Eric Pouech : winedbg:
Rewrote the file handling to use SearchPath instead of home grown
version.
Alexandre Julliard
julliard at wine.codeweavers.com
Tue Oct 3 13:37:34 CDT 2006
Module: wine
Branch: master
Commit: 6a0568a11a655ca77c31e173d23a9770c8aa19b5
URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=6a0568a11a655ca77c31e173d23a9770c8aa19b5
Author: Eric Pouech <eric.pouech at wanadoo.fr>
Date: Sun Oct 1 08:16:20 2006 +0200
winedbg: Rewrote the file handling to use SearchPath instead of home grown version.
---
programs/winedbg/source.c | 147 ++++++++++++++++++---------------------------
1 files changed, 58 insertions(+), 89 deletions(-)
diff --git a/programs/winedbg/source.c b/programs/winedbg/source.c
index 8c6e955..c1fb2eb 100644
--- a/programs/winedbg/source.c
+++ b/programs/winedbg/source.c
@@ -28,13 +28,6 @@ #endif
#include "debugger.h"
-struct search_list
-{
- char* path;
- struct search_list* next;
-};
-
-
struct open_file_list
{
char* path;
@@ -47,45 +40,55 @@ struct open_file_list
static struct open_file_list* source_ofiles;
-static struct search_list* source_list_head;
+static char* search_path; /* = NULL; */
static char source_current_file[PATH_MAX];
static int source_start_line = -1;
static int source_end_line = -1;
void source_show_path(void)
{
- struct search_list* sl;
+ const char* ptr;
+ const char* next;
dbg_printf("Search list:\n");
- for (sl = source_list_head; sl; sl = sl->next) dbg_printf("\t%s\n", sl->path);
+ for (ptr = search_path; ptr; ptr = next)
+ {
+ next = strchr(ptr, ';');
+ if (next)
+ dbg_printf("\t%.*s\n", next++ - ptr, ptr);
+ else
+ dbg_printf("\t%s\n", ptr);
+ }
dbg_printf("\n");
}
void source_add_path(const char* path)
{
- struct search_list* sl;
-
- if (!(sl = HeapAlloc(GetProcessHeap(), 0, sizeof(struct search_list))))
- return;
+ char* new;
+ unsigned size;
- sl->next = source_list_head;
- sl->path = strcpy(HeapAlloc(GetProcessHeap(), 0, strlen(path) + 1), path);
- source_list_head = sl;
+ size = strlen(path) + 1;
+ if (search_path)
+ {
+ unsigned pos = HeapSize(GetProcessHeap(), 0, search_path);
+ new = HeapReAlloc(GetProcessHeap(), 0, search_path, pos + size);
+ if (!new || !pos) return;
+ new[pos - 1] = ';';
+ strcpy(&new[pos], path);
+ }
+ else
+ {
+ new = HeapAlloc(GetProcessHeap(), 0, size);
+ if (!new) return;
+ strcpy(new, path);
+ }
+ search_path = new;
}
void source_nuke_path(void)
{
- struct search_list* sl;
- struct search_list* nxt;
-
- for (sl = source_list_head; sl; sl = nxt)
- {
- nxt = sl->next;
- HeapFree(GetProcessHeap(), 0, sl->path);
- HeapFree(GetProcessHeap(), 0, sl);
- }
-
- source_list_head = NULL;
+ HeapFree(GetProcessHeap(), 0, search_path);
+ search_path = NULL;
}
static void* source_map_file(const char* name, HANDLE* hMap, unsigned* size)
@@ -128,9 +131,7 @@ static int source_display(const char* so
const char* basename = NULL;
char* pnt;
int rtn;
- struct search_list* sl;
HANDLE hMap;
- DWORD status;
char tmppath[PATH_MAX];
/*
@@ -157,21 +158,20 @@ static int source_display(const char* so
/*
* Crapola. We need to try and open the file.
*/
- status = GetFileAttributes(sourcefile);
- if (status != INVALID_FILE_ATTRIBUTES)
+ strcpy(tmppath, sourcefile);
+ if (GetFileAttributes(sourcefile) == INVALID_FILE_ATTRIBUTES &&
+ (!search_path || !SearchPathA(search_path, sourcefile, NULL, MAX_PATH, tmppath, NULL)))
{
- strcpy(tmppath, sourcefile);
- }
- else if ((status = GetFileAttributes(basename)) != INVALID_FILE_ATTRIBUTES)
- {
- strcpy(tmppath, basename);
- }
- else
- {
- for (sl = source_list_head; sl; sl = sl->next)
+ if (dbg_interactiveP)
{
- strcpy(tmppath, sl->path);
- if (tmppath[strlen(tmppath) - 1] != '/' && tmppath[strlen(tmppath) - 1] != '\\')
+ 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] != '/')
{
strcat(tmppath, "/");
}
@@ -179,55 +179,24 @@ static int source_display(const char* so
* Now append the base file name.
*/
strcat(tmppath, basename);
-
- status = GetFileAttributes(tmppath);
- if (status != INVALID_FILE_ATTRIBUTES) break;
}
- if (sl == NULL)
+ if (GetFileAttributes(tmppath) == INVALID_FILE_ATTRIBUTES)
{
- 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] != '/')
- {
- strcat(tmppath, "/");
- }
- /*
- * Now append the base file name.
- */
- strcat(tmppath, basename);
-
- status = GetFileAttributes(tmppath);
- }
- else
- {
- status = INVALID_FILE_ATTRIBUTES;
- strcpy(tmppath, sourcefile);
- }
-
- if (status == INVALID_FILE_ATTRIBUTES)
- {
- /*
- * OK, I guess the user doesn't really want to see it
- * after all.
- */
- ol = HeapAlloc(GetProcessHeap(), 0, sizeof(*ol));
- ol->path = strcpy(HeapAlloc(GetProcessHeap(), 0, strlen(sourcefile) + 1), sourcefile);
- ol->real_path = NULL;
- ol->next = source_ofiles;
- ol->nlines = 0;
- ol->linelist = NULL;
- source_ofiles = ol;
- dbg_printf("Unable to open file '%s'\n", tmppath);
- return FALSE;
- }
+ /*
+ * OK, I guess the user doesn't really want to see it
+ * after all.
+ */
+ ol = HeapAlloc(GetProcessHeap(), 0, sizeof(*ol));
+ ol->path = strcpy(HeapAlloc(GetProcessHeap(), 0, strlen(sourcefile) + 1), sourcefile);
+ ol->real_path = NULL;
+ ol->next = source_ofiles;
+ ol->nlines = 0;
+ ol->linelist = NULL;
+ ol->size = 0;
+ source_ofiles = ol;
+ dbg_printf("Unable to open file '%s'\n", tmppath);
+ return FALSE;
}
}
/*
More information about the wine-cvs
mailing list