perror.c raw

   1  #include <stdio.h>
   2  #include <string.h>
   3  #include <errno.h>
   4  #include "stdio_impl.h"
   5  
   6  void perror(const char *msg)
   7  {
   8  	FILE *f = stderr;
   9  	char *errstr = strerror(errno);
  10  
  11  	FLOCK(f);
  12  
  13  	/* Save stderr's orientation and encoding rule, since perror is not
  14  	 * permitted to change them. */
  15  	void *old_locale = f->locale;
  16  	int old_mode = f->mode;
  17  	
  18  	if (msg && *msg) {
  19  		fwrite(msg, strlen(msg), 1, f);
  20  		fputc(':', f);
  21  		fputc(' ', f);
  22  	}
  23  	fwrite(errstr, strlen(errstr), 1, f);
  24  	fputc('\n', f);
  25  
  26  	f->mode = old_mode;
  27  	f->locale = old_locale;
  28  
  29  	FUNLOCK(f);
  30  }
  31