Patch for 7.0.3 code to read pg_options

Поиск
Список
Период
Сортировка
От Oliver Elphick
Тема Patch for 7.0.3 code to read pg_options
Дата
Msg-id 200011281047.eASAlU603933@linda.lfix.co.uk
обсуждение исходный текст
Список pgsql-hackers
The pg_options.sample that is included in 7.0.x cannot actually be used
because of bugs in the routine that reads it. First, it reads only 4095
bytes and second it does not cope with white space within lines.  The
attached patch cures the problem.

It seems to be relevant only to 7.0.x because the entire code has been
removed from 7.1.

Index: src/backend/utils/misc/trace.c
===================================================================
RCS file: /cvs/pgsql-deb/postgresql/src/backend/utils/misc/trace.c,v
retrieving revision 1.1.1.2
diff -c -b -r1.1.1.2 trace.c
*** src/backend/utils/misc/trace.c    2000/11/14 10:40:10    1.1.1.2
--- src/backend/utils/misc/trace.c    2000/11/28 07:43:13
***************
*** 438,444 ****
--- 438,446 ----     int            fd;     int            n;     int            verbose;
+     int        incomment = 0;     char        buffer[BUF_SIZE];
+     char        optbuf[BUF_SIZE];     char        c;     char       *s,                *p;
***************
*** 455,478 **** #else     if ((fd = open(buffer, O_RDONLY | O_BINARY)) < 0) #endif         return; 
!     if ((n = read(fd, buffer, BUF_SIZE - 1)) > 0)     {
!         /* collpse buffer in place removing comments and spaces */
!         for (s = buffer, p = buffer, c = '\0'; s < (buffer + n);)         {             switch (*s)             {
           case '#':                     while ((s < (buffer + n)) && (*s++ != '\n'));                     break;
 
-                 case ' ':
-                 case '\t':
-                 case '\n':                 case '\r':                     if (c != ',')                         c =
*p++= ',';                     s++;                     break;                 default:
 
--- 457,490 ---- #else     if ((fd = open(buffer, O_RDONLY | O_BINARY)) < 0) #endif
+     {
+         fprintf(stderr,"Couldn't open %s\n",buffer);         return;
+     } 
!     p = optbuf;
!     c = '\0';
!     while ((n = read(fd, buffer, BUF_SIZE - 1)) > 0)     {
!         if (incomment && (*buffer != '\n'))
!             *buffer = '#';
! 
!         /* read in options removing comments and spaces */
!         for (s = buffer; s < (buffer + n);)         {             switch (*s)             {                 case
'#':
+                     incomment = 1;                     while ((s < (buffer + n)) && (*s++ != '\n'));
  break;                 case '\r':
 
+                 case '\n':
+                     incomment = 0;                     if (c != ',')                         c = *p++ = ',';
+                 case ' ':
+                 case '\t':                     s++;                     break;                 default:
***************
*** 480,494 ****                     break;             }         }         if (c == ',')             p--;         *p =
'\0';        verbose = pg_options[TRACE_VERBOSE];
 
!         parse_options(buffer, true);         verbose |= pg_options[TRACE_VERBOSE];         if (verbose ||
postgres_signal_arg== SIGHUP)
 
!             tprintf(TRACE_ALL, "read_pg_options: %s", buffer);
!     }      close(fd); }
--- 492,506 ----                     break;             }         }
+     }     if (c == ',')         p--;     *p = '\0';     verbose = pg_options[TRACE_VERBOSE];
!     parse_options(optbuf, true);     verbose |= pg_options[TRACE_VERBOSE];     if (verbose || postgres_signal_arg ==
SIGHUP)
!         tprintf(TRACE_ALL, "read_pg_options: %s", optbuf);      close(fd); }

-- 
Oliver Elphick                                Oliver.Elphick@lfix.co.uk
Isle of Wight                              http://www.lfix.co.uk/oliver
PGP: 1024R/32B8FAA1: 97 EA 1D 47 72 3F 28 47  6B 7E 39 CC 56 E4 C1 47
GPG: 1024D/3E1D0C1C: CA12 09E0 E8D5 8870 5839  932A 614D 4C34 3E1D 0C1C
========================================   "The earth is the LORD'S, and the fullness thereof; the     world, and they
thatdwell therein."       Psalms 24:1
 




В списке pgsql-hackers по дате отправления:

Предыдущее
От: Pete Forman
Дата:
Сообщение: Re: Question about Oracle compatibility
Следующее
От: Zeugswetter Andreas SB
Дата:
Сообщение: AW: Constraint names using 'user namespace'?