⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 util.c

📁 pptp第二层隧道模块
💻 C
字号:
/* util.c ....... error message utilities. *                C. Scott Ananian <cananian@alumni.princeton.edu> * * $Id: util.c,v 1.10 2005/03/10 01:18:20 quozl Exp $ */#include <stdio.h>#include <stdarg.h>#include <syslog.h>#include <unistd.h>#include <stdlib.h>#include "util.h"#ifndef PROGRAM_NAME#define PROGRAM_NAME "pptp"#endif/* implementation of log_string, defined as extern in util.h */char *log_string = "anon";static void open_log(void) __attribute__ ((constructor));static void close_log(void) __attribute__ ((destructor));#define MAKE_STRING(label) 				\va_list ap;						\char buf[256], string[256];				\va_start(ap, format);					\vsnprintf(buf, sizeof(buf), format, ap);		\snprintf(string, sizeof(string), "%s %s[%s:%s:%d]: %s",	\	 log_string, label, func, file, line, buf);	\va_end(ap)/*** open log *****************************************************************/static void open_log(void) {    openlog(PROGRAM_NAME, LOG_PID, LOG_DAEMON);}/*** close log ****************************************************************/static void close_log(void){    closelog();}/*** print a message to syslog ************************************************/void _log(const char *func, const char *file, int line, const char *format, ...){    MAKE_STRING("log");    syslog(LOG_NOTICE, "%s", string);}/*** print a warning to syslog ************************************************/void _warn(const char *func, const char *file, int line, const char *format, ...){    MAKE_STRING("warn");    fprintf(stderr, "%s\n", string);    syslog(LOG_WARNING, "%s", string);}/*** print a fatal warning to syslog and exit *********************************/void _fatal(const char *func, const char *file, int line, const char *format, ...){    MAKE_STRING("fatal");    fprintf(stderr, "%s\n", string);    syslog(LOG_CRIT, "%s", string);    exit(1);}/*** connect a file to a file descriptor **************************************/int file2fd(const char *path, const char *mode, int fd){    int ok = 0;    FILE *file = NULL;    file = fopen(path, mode);    if (file != NULL && dup2(fileno(file), fd) != -1)        ok = 1;    if (file) fclose(file);    return ok;}/* signal to pipe delivery implementation */#include <unistd.h>#include <fcntl.h>#include <signal.h>#include <string.h>/* pipe private to process */static int sigpipe[2];/* create a signal pipe, returns 0 for success, -1 with errno for failure */int sigpipe_create(){  int rc;    rc = pipe(sigpipe);  if (rc < 0) return rc;    fcntl(sigpipe[0], F_SETFD, FD_CLOEXEC);  fcntl(sigpipe[1], F_SETFD, FD_CLOEXEC);  #ifdef O_NONBLOCK#define FLAG_TO_SET O_NONBLOCK#else#ifdef SYSV#define FLAG_TO_SET O_NDELAY#else /* BSD */#define FLAG_TO_SET FNDELAY#endif#endif    rc = fcntl(sigpipe[1], F_GETFL);  if (rc != -1)    rc = fcntl(sigpipe[1], F_SETFL, rc | FLAG_TO_SET);  if (rc < 0) return rc;  return 0;#undef FLAG_TO_SET}/* generic handler for signals, writes signal number to pipe */void sigpipe_handler(int signum){  write(sigpipe[1], &signum, sizeof(signum));  signal(signum, sigpipe_handler);}/* assign a signal number to the pipe */void sigpipe_assign(int signum){  sigset_t sigset;  struct sigaction sa;  sigemptyset(&sigset);  sigaddset(&sigset, signum);    memset(&sa, 0, sizeof(sa));  sa.sa_handler = sigpipe_handler;  sigaction(signum, &sa, NULL);}/* return the signal pipe read file descriptor for select(2) */int sigpipe_fd(){  return sigpipe[0];}/* read and return the pending signal from the pipe */int sigpipe_read(){  int signum;  read(sigpipe[0], &signum, sizeof(signum));  return signum;}void sigpipe_close(){  close(sigpipe[0]);  close(sigpipe[1]);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -