Mon Jul 18 21:14:16 PDT 2005
- Previous message: [Slony1-commit] By dpage: Fix configure to find the appropriate pthread library on
- Next message: [Slony1-commit] By dpage: Here is a patch to fix a broken error msg in Slonik.
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Log Message: ----------- The function get_sharepath() in slonik (used only on win32) is badly broken as it is now. For one thing, it loops on an unsigned int var with a condition of ">=0", which is always true. Which results in it happily overwriting argv[] (and probably other such things!) makeing it impossible to run a simple command like "slonik foo" (because once it tries to open the file, argv[1] is now NULL). Attached patch cleans that up. Still uses the same logic (assuming I read the original logic correctly). It's a bit simplistic, but I think it will be enough for most cases. [Magnus Hagander] Modified Files: -------------- slony1-engine/src/slonik: slonik.c (r1.45 -> r1.46) -------------- next part -------------- Index: slonik.c =================================================================== RCS file: /usr/local/cvsroot/slony1/slony1-engine/src/slonik/slonik.c,v retrieving revision 1.45 retrieving revision 1.46 diff -Lsrc/slonik/slonik.c -Lsrc/slonik/slonik.c -u -w -r1.45 -r1.46 --- src/slonik/slonik.c +++ src/slonik/slonik.c @@ -116,38 +116,51 @@ #ifdef WIN32 /* - * This begins to look for share. - * It begins to look for it from path of exec. - * bin/slonik.exe ../share + * Attempt to locate share directory. Will add to path of exe, + * except when the exe is in a "bin" directory, in which case + * it goes to ../share. + * This is a very simple view of things - perhaps it needs to be + * expanded? If so there is more complete code available in the + * PostgreSQL backend that could be adapted. */ char *get_sharepath(const char *path) { - DWORD dwRet; + int i; char *result; result = (char *)malloc(MAX_PATH+1); + if (!result) { + printf("memory allocation failure.\n"); + exit(1); + } + memcpy(result,path,strlen(path)); - for (dwRet = strlen(path); dwRet >= 0 ; dwRet--) + for (i = strlen(path); i >= 0 ; i --) { - result[dwRet] = '\0'; - if ((path[dwRet] == '/')||(path[dwRet] == '\\')) + if ((path[i] == '/')||(path[i] == '\\')) break; + result[i] = '\0'; } - if (result) - { - dwRet = strlen(result); - if (!_stricmp((const char *)result+dwRet-3,"bin")) + if (!result[0]) { - dwRet -= 3; - result[dwRet] = '\0'; + /* Nothing left, so assume subdir of current */ + strcpy(result,PGSHARE); + return result; } + + /* Check if directory of exe is "bin" */ + if (strlen(result) >= 3 && + !strncasecmp(result+i-3,"bin",3) && + (result[i]=='/' || result[i]=='\\')) + { + /* Strip off bin directory */ + result[i-3] = 0; } - memcpy(result+dwRet,PGSHARE,strlen(PGSHARE)); + strcat(result, PGSHARE); return result; - } #endif
- Previous message: [Slony1-commit] By dpage: Fix configure to find the appropriate pthread library on
- Next message: [Slony1-commit] By dpage: Here is a patch to fix a broken error msg in Slonik.
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
More information about the Slony1-commit mailing list