Alexandre Julliard : libwine:
Remove one more directory level when checking for build dir.
Alexandre Julliard
julliard at wine.codeweavers.com
Mon Jun 19 16:18:11 CDT 2006
Module: wine
Branch: refs/heads/master
Commit: e43cec76d1308750387a60fd200c0f179826a870
URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=e43cec76d1308750387a60fd200c0f179826a870
Author: Alexandre Julliard <julliard at winehq.org>
Date: Mon Jun 19 22:45:28 2006 +0200
libwine: Remove one more directory level when checking for build dir.
This way it still works if the libdir we got was libs/wine instead of libs.
---
libs/wine/config.c | 42 ++++++++++++++++++++++++++----------------
1 files changed, 26 insertions(+), 16 deletions(-)
diff --git a/libs/wine/config.c b/libs/wine/config.c
index d287c5d..b721108 100644
--- a/libs/wine/config.c
+++ b/libs/wine/config.c
@@ -234,12 +234,28 @@ #endif /* HAVE_GETPWUID */
init_server_dir( st.st_dev, st.st_ino );
}
+/* check if basedir is a valid build dir by checking for wineserver and ntdll */
+/* helper for running_from_build_dir */
+static inline int is_valid_build_dir( char *basedir, int baselen )
+{
+ struct stat st;
+
+ strcpy( basedir + baselen, "/server/wineserver" );
+ if (stat( basedir, &st ) == -1) return 0; /* no wineserver found */
+ /* check for ntdll too to make sure */
+ strcpy( basedir + baselen, "/dlls/ntdll/ntdll.dll.so" );
+ if (stat( basedir, &st ) == -1) return 0; /* no ntdll found */
+
+ basedir[baselen] = 0;
+ return 1;
+}
+
/* check if we are running from the build directory */
static char *running_from_build_dir( const char *basedir, const char *bindir )
{
struct stat st;
const char *p;
- char *path, *end;
+ char *path;
int res;
if (!(path = build_path( bindir, "wineserver" ))) return NULL;
@@ -254,24 +270,18 @@ static char *running_from_build_dir( con
if (p == basedir) return NULL;
path = xmalloc( p - basedir + sizeof("/dlls/ntdll/ntdll.dll.so") );
memcpy( path, basedir, p - basedir );
- end = path + (p - basedir);
- strcpy( end, "/server/wineserver" );
- if (stat( path, &st ) == -1)
+ if (!is_valid_build_dir( path, p - basedir ))
{
- free( path );
- return NULL; /* no wineserver found */
- }
-
- /* check for ntdll too to make sure */
- strcpy( end, "/dlls/ntdll/ntdll.dll.so" );
- if (stat( path, &st ) == -1)
- {
- free( path );
- return NULL; /* no ntdll found */
+ /* remove another component */
+ while (p > basedir && *p == '/') p--;
+ while (p > basedir && *p != '/') p--;
+ if (p == basedir || !is_valid_build_dir( path, p - basedir ))
+ {
+ free( path );
+ return NULL;
+ }
}
-
- *end = 0;
return path;
}
More information about the wine-cvs
mailing list