Подробности

[В начало]

Проблема в реализации № S0684

Краткое описание

Неправильный вывод из psignal(int sig, const char * s) при пустой строке s

Подробное описание

В документации сказано, что при пустой строке s функция psignal должна вывести только сообщение, описывающее сигнал sig.

SYNOPSIS
  void psignal(int sig, const char * s);

DESCRIPTION
  If s is not the null pointer, and does not point to an empty string
  (e.g. "\0"), the message shall consist of the string s, a colon, 
  a space, and a string describing the signal number sig; otherwise
  psignal() shall display only a message describing the signal number sig.
Но на самом деле psignal выводит двоеточие, пробел, и только потом сообщение, описывающее сигнал sig.

Раздел стандарта

Linux Standard Base Core Specification 3.1, Chapter 13. Base Libraries, 13.5. Interface Definitions for libc, psignal() function.

Пример

#include <stdio.h>
#include <signal.h>

int main( int argc, char ** argv ) {
    printf( "If string s is empty, psignal( sig, s ) shall display only a message describing the signal number sig.\n" );
    printf( "Call psignal( 1, \"\" ) now...\n" );
    psignal( 1, "" );
    return 0;
}

Способы устранения

diff -r1.15 psignal.c
/* Print out on stderr a line consisting of the test in S, a colon, a space,
   a message describing the meaning of the signal number SIG and a newline.
   If S is NULL or "", the colon and space are omitted.  */
void
psignal (int sig, const char *s)
{
  const char *colon, *desc;

- if (s == NULL || s == '\0')
+ if (s == NULL || *s == '\0')
    s = colon = "";
  else
    colon = ": ";

  if (sig >= 0 && sig < NSIG && (desc = INTUSE(_sys_siglist)[sig]) != NULL)
    (void) __fxprintf (NULL, "%s%s%s\n", s, colon, _(desc));
  else

Компонент

glibc

Принято

Red Hat Bugzilla, 9823

Статус

Исправлено в glibc-2.10

[В начало]