Skip to content
Snippets Groups Projects
Select Git revision
  • benchmark-tools
  • postgres-lambda
  • master default
  • REL9_4_25
  • REL9_5_20
  • REL9_6_16
  • REL_10_11
  • REL_11_6
  • REL_12_1
  • REL_12_0
  • REL_12_RC1
  • REL_12_BETA4
  • REL9_4_24
  • REL9_5_19
  • REL9_6_15
  • REL_10_10
  • REL_11_5
  • REL_12_BETA3
  • REL9_4_23
  • REL9_5_18
  • REL9_6_14
  • REL_10_9
  • REL_11_4
23 results

scheck.c

Blame
  • scheck.c 1.14 KiB
    /*
     * This file is in the public domain, so clarified as of
     * 1996-06-05 by Arthur David Olson (arthur_david_olson@nih.gov).
     *
     * IDENTIFICATION
     *	  $PostgreSQL: pgsql/src/timezone/scheck.c,v 1.7 2005/10/15 02:49:51 momjian Exp $
     */
    
    #include "postgres.h"
    
    #include "private.h"
    
    
    char *
    scheck(const char *string, const char *format)
    {
    	char	   *fbuf;
    	const char *fp;
    	char	   *tp;
    	int			c;
    	char	   *result;
    	char		dummy;
    	static char nada;
    
    	result = &nada;
    	if (string == NULL || format == NULL)
    		return result;
    	fbuf = imalloc((int) (2 * strlen(format) + 4));
    	if (fbuf == NULL)
    		return result;
    	fp = format;
    	tp = fbuf;
    	while ((*tp++ = c = *fp++) != '\0')
    	{
    		if (c != '%')
    			continue;
    		if (*fp == '%')
    		{
    			*tp++ = *fp++;
    			continue;
    		}
    		*tp++ = '*';
    		if (*fp == '*')
    			++fp;
    		while (is_digit(*fp))
    			*tp++ = *fp++;
    		if (*fp == 'l' || *fp == 'h')
    			*tp++ = *fp++;
    		else if (*fp == '[')
    			do
    				*tp++ = *fp++;
    			while (*fp != '\0' && *fp != ']');
    		if ((*tp++ = *fp++) == '\0')
    			break;
    	}
    	*(tp - 1) = '%';
    	*tp++ = 'c';
    	*tp = '\0';
    	if (sscanf(string, fbuf, &dummy) != 1)
    		result = (char *) format;
    	ifree(fbuf);
    	return result;
    }