Fix a couple of bugs in win32 shmem name generation:
authorMagnus Hagander <magnus@hagander.net>
Fri, 4 Jul 2008 10:50:20 +0000 (10:50 +0000)
committerMagnus Hagander <magnus@hagander.net>
Fri, 4 Jul 2008 10:50:20 +0000 (10:50 +0000)
* Don't cut off the prefix. With this fix, it's again readable.
* Properly store it in the Global namespace as intended.

src/backend/port/win32_shmem.c

index 6882ad7a8dd0796b72ddd80862beed24f808b23e..970b552043365cf44529cd709111f67594c4f124 100644 (file)
@@ -47,18 +47,17 @@ GetSharedMemName(void)
                elog(FATAL, "could not get size for full pathname of datadir %s: %lu",
                         DataDir, GetLastError());
 
-       retptr = malloc(bufsize + 1 + 18);      /* 1 NULL and 18 for
-                                                                                * Global\PostgreSQL: */
+       retptr = malloc(bufsize + 18);          /* 18 for Global\PostgreSQL: */
        if (retptr == NULL)
                elog(FATAL, "could not allocate memory for shared memory name");
 
        strcpy(retptr, "Global\\PostgreSQL:");
-       r = GetFullPathName(DataDir, bufsize, retptr + 11, NULL);
+       r = GetFullPathName(DataDir, bufsize, retptr + 18, NULL);
        if (r == 0 || r > bufsize)
                elog(FATAL, "could not generate full pathname for datadir %s: %lu",
                         DataDir, GetLastError());
 
-       for (cp = retptr; *cp; cp++)
+       for (cp = retptr + 18; *cp; cp++)
                if (*cp == '\\')
                        *cp = '/';