Eine aufbereitete Darstellung der Quelle

 
     
 
 
Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 

Benutzer

Quelle  string.c

  Sprache: C
 

/*-------------------------------------------------------------------------
 *
 * string.c
 *  string handling helpers
 *
 *
 * Portions Copyright (c) 1996-2025, PostgreSQL Global Development Group
 * Portions Copyright (c) 1994, Regents of the University of California
 *
 *
 * IDENTIFICATION
 *   src/common/string.c
 *
 *-------------------------------------------------------------------------
 */



#ifndef FRONTEND
#include "postgres.h"
#else
#include "postgres_fe.h"
#endif

#include "common/string.h"


/*
 * Returns whether the string `str' has the postfix `end'.
 */

bool
pg_str_endswith(const char *str, const char *end)
{
 size_t  slen = strlen(str);
 size_t  elen = strlen(end);

 /* can't be a postfix if longer */
 if (elen > slen)
  return false;

 /* compare the end of the strings */
 str += slen - elen;
 return strcmp(str, end) == 0;
}


/*
 * strtoint --- just like strtol, but returns int not long
 */

int
strtoint(const char *pg_restrict str, char **pg_restrict endptr, int base)
{
 long  val;

 val = strtol(str, endptr, base);
 if (val != (int) val)
  errno = ERANGE;
 return (int) val;
}


/*
 * pg_clean_ascii -- Replace any non-ASCII chars with a "\xXX" string
 *
 * Makes a newly allocated copy of the string passed in, which must be
 * '\0'-terminated. In the backend, additional alloc_flags may be provided and
 * will be passed as-is to palloc_extended(); in the frontend, alloc_flags is
 * ignored and the copy is malloc'd.
 *
 * This function exists specifically to deal with filtering out
 * non-ASCII characters in a few places where the client can provide an almost
 * arbitrary string (and it isn't checked to ensure it's a valid username or
 * database name or similar) and we don't want to have control characters or other
 * things ending up in the log file where server admins might end up with a
 * messed up terminal when looking at them.
 *
 * In general, this function should NOT be used- instead, consider how to handle
 * the string without needing to filter out the non-ASCII characters.
 *
 * Ultimately, we'd like to improve the situation to not require replacing all
 * non-ASCII but perform more intelligent filtering which would allow UTF or
 * similar, but it's unclear exactly what we should allow, so stick to ASCII only
 * for now.
 */

char *
pg_clean_ascii(const char *str, int alloc_flags)
{
 size_t  dstlen;
 char    *dst;
 const char *p;
 size_t  i = 0;

 /* Worst case, each byte can become four bytes, plus a null terminator. */
 dstlen = strlen(str) * 4 + 1;

#ifdef FRONTEND
 dst = malloc(dstlen);
#else
 dst = palloc_extended(dstlen, alloc_flags);
#endif

 if (!dst)
  return NULL;

 for (p = str; *p != '\0'; p++)
 {

  /* Only allow clean ASCII chars in the string */
  if (*p < 32 || *p > 126)
  {
   Assert(i < (dstlen - 3));
   snprintf(&dst[i], dstlen - i, "\\x%02x", (unsigned char) *p);
   i += 4;
  }
  else
  {
   Assert(i < dstlen);
   dst[i] = *p;
   i++;
  }
 }

 Assert(i < dstlen);
 dst[i] = '\0';
 return dst;
}


/*
 * pg_is_ascii -- Check if string is made only of ASCII characters
 */

bool
pg_is_ascii(const char *str)
{
 while (*str)
 {
  if (IS_HIGHBIT_SET(*str))
   return false;
  str++;
 }
 return true;
}


/*
 * pg_strip_crlf -- Remove any trailing newline and carriage return
 *
 * Removes any trailing newline and carriage return characters (\r on
 * Windows) in the input string, zero-terminating it.
 *
 * The passed in string must be zero-terminated.  This function returns
 * the new length of the string.
 */

int
pg_strip_crlf(char *str)
{
 int   len = strlen(str);

 while (len > 0 && (str[len - 1] == '\n' ||
        str[len - 1] == '\r'))
  str[--len] = '\0';

 return len;
}

Messung V0.5 in Prozent
C=90 H=91 G=90

¤ Dauer der Verarbeitung: 0.10 Sekunden  (vorverarbeitet am  2026-08-10) ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

PVS Prover

Isabelle Prover

NIST Cobol Testsuite

Cephes Mathematical Library

Vienna Development Method

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.






                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Open Source Software

     Quellcodebibliothek
     Eigene Quellcodes
     Fremde Quellcodes
     Suchen

Jenseits des Üblichen ....
    

Besucherstatistik

Besucherstatistik

Statistik
#Sources=141584
#Domains=738142