mirror of
				https://github.com/postgres/postgres.git
				synced 2025-11-03 09:13:20 +03:00 
			
		
		
		
	
		
			
				
	
	
		
			80 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			80 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/* This module defines the parse buffer and routines for setting/reading it */
 | 
						|
 | 
						|
#include "postgres.h"
 | 
						|
 | 
						|
#include "utils/elog.h"
 | 
						|
 | 
						|
static char *       PARSE_BUFFER;
 | 
						|
static char *       PARSE_BUFFER_PTR; 
 | 
						|
static unsigned int PARSE_BUFFER_SIZE; 
 | 
						|
static unsigned int SCANNER_POS;
 | 
						|
 | 
						|
void         set_parse_buffer( char* s );
 | 
						|
void         reset_parse_buffer( void );
 | 
						|
int          read_parse_buffer( void );
 | 
						|
char *       parse_buffer( void );
 | 
						|
char *       parse_buffer_ptr( void );
 | 
						|
unsigned int parse_buffer_curr_char( void );
 | 
						|
unsigned int parse_buffer_size( void );
 | 
						|
unsigned int parse_buffer_pos( void );
 | 
						|
 | 
						|
extern void seg_flush_scanner_buffer(void); /* defined in segscan.l */
 | 
						|
 | 
						|
void set_parse_buffer( char* s )
 | 
						|
{
 | 
						|
  PARSE_BUFFER = s;
 | 
						|
  PARSE_BUFFER_SIZE = strlen(s);
 | 
						|
  if ( PARSE_BUFFER_SIZE == 0 ) {
 | 
						|
    elog(ERROR, "seg_in: can't parse an empty string");
 | 
						|
  }
 | 
						|
  PARSE_BUFFER_PTR = PARSE_BUFFER;
 | 
						|
  SCANNER_POS = 0;
 | 
						|
}
 | 
						|
 | 
						|
void reset_parse_buffer( void )
 | 
						|
{
 | 
						|
  PARSE_BUFFER_PTR = PARSE_BUFFER;
 | 
						|
  SCANNER_POS = 0;
 | 
						|
  seg_flush_scanner_buffer();
 | 
						|
}
 | 
						|
 | 
						|
int read_parse_buffer( void )
 | 
						|
{
 | 
						|
  int c;
 | 
						|
  /*
 | 
						|
  c = *PARSE_BUFFER_PTR++;
 | 
						|
  SCANNER_POS++;
 | 
						|
  */
 | 
						|
  c = PARSE_BUFFER[SCANNER_POS];
 | 
						|
  if(SCANNER_POS < PARSE_BUFFER_SIZE)
 | 
						|
    SCANNER_POS++;
 | 
						|
  return c;
 | 
						|
}
 | 
						|
 | 
						|
char * parse_buffer( void )
 | 
						|
{
 | 
						|
  return PARSE_BUFFER;
 | 
						|
}
 | 
						|
 | 
						|
unsigned int parse_buffer_curr_char( void )
 | 
						|
{
 | 
						|
  return PARSE_BUFFER[SCANNER_POS];
 | 
						|
}
 | 
						|
 | 
						|
char * parse_buffer_ptr( void )
 | 
						|
{
 | 
						|
  return PARSE_BUFFER_PTR;
 | 
						|
}
 | 
						|
 | 
						|
unsigned int parse_buffer_pos( void )
 | 
						|
{
 | 
						|
  return SCANNER_POS;
 | 
						|
}
 | 
						|
 | 
						|
unsigned int parse_buffer_size( void )
 | 
						|
{
 | 
						|
  return PARSE_BUFFER_SIZE;
 | 
						|
}
 | 
						|
 | 
						|
 |