Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/C/Postgres/src/port/   (Postgres Database Version 18.4©)  Datei vom 11.4.2026 mit Größe 2 kB image not shown  

Quelle  system.c

  Sprache: C
 

/*-------------------------------------------------------------------------
 *
 * system.c
 *    Win32 system() and popen() replacements
 *
 *
 * Win32 needs double quotes at the beginning and end of system()
 * strings.  If not, it gets confused with multiple quoted strings.
 * It also requires double-quotes around the executable name and
 * any files used for redirection.  Filter other args through
 * appendShellString() to quote them.
 *
 * Generated using Win32 "CMD /?":
 *
 * 1. If all of the following conditions are met, then quote characters
 * on the command line are preserved:
 *
 *  - no /S switch
 *  - exactly two quote characters
 *  - no special characters between the two quote characters, where special
 *    is one of: &<>()@^|
 *  - there are one or more whitespace characters between the two quote
 *    characters
 *  - the string between the two quote characters is the name of an
 *    executable file.
 *
 *  2. Otherwise, old behavior is to see if the first character is a quote
 *  character and if so, strip the leading character and remove the last
 *  quote character on the command line, preserving any text after the last
 *  quote character.
 *
 * Portions Copyright (c) 1996-2025, PostgreSQL Global Development Group
 *
 * src/port/system.c
 *
 *-------------------------------------------------------------------------
 */


#if defined(WIN32) && !defined(__CYGWIN__)

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

#include <fcntl.h>

#undef system
#undef popen

int
pgwin32_system(const char *command)
{
 size_t  cmdlen = strlen(command);
 char    *buf;
 int   save_errno;
 int   res;

 /*
  * Create a malloc'd copy of the command string, enclosed with an extra
  * pair of quotes
 */

 buf = malloc(cmdlen + 2 + 1);
 if (buf == NULL)
 {
  errno = ENOMEM;
  return -1;
 }
 buf[0] = '"';
 memcpy(&buf[1], command, cmdlen);
 buf[cmdlen + 1] = '"';
 buf[cmdlen + 2] = '\0';

 res = system(buf);

 save_errno = errno;
 free(buf);
 errno = save_errno;

 return res;
}


FILE *
pgwin32_popen(const char *command, const char *type)
{
 size_t  cmdlen = strlen(command);
 char    *buf;
 int   save_errno;
 FILE    *res;

 /*
  * Create a malloc'd copy of the command string, enclosed with an extra
  * pair of quotes
 */

 buf = malloc(cmdlen + 2 + 1);
 if (buf == NULL)
 {
  errno = ENOMEM;
  return NULL;
 }
 buf[0] = '"';
 memcpy(&buf[1], command, cmdlen);
 buf[cmdlen + 1] = '"';
 buf[cmdlen + 2] = '\0';

 res = _popen(buf, type);

 save_errno = errno;
 free(buf);
 errno = save_errno;

 return res;
}

#endif

Messung V0.5 in Prozent
C=98 H=100 G=98

¤ Dauer der Verarbeitung: 0.12 Sekunden  (vorverarbeitet am  2026-08-09) ¤

*© 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.