erlsrv_util.c
来自「OTP是开放电信平台的简称」· C语言 代码 · 共 137 行
C
137 行
#include <windows.h>#include <winsvc.h>#include <stdio.h>#include <stdlib.h>#include <string.h>#include "erlsrv_global.h"#include "erlsrv_util.h"#include "erlsrv_logmess.h"char *service_name = "";char *real_service_name = "";void log_warning(char *mess){ HANDLE logh; char *strings[] = {service_name, mess , NULL}; if(!(logh = RegisterEventSource(NULL,APP_NAME))) return; ReportEvent(logh, EVENTLOG_WARNING_TYPE, 0, MSG_WARNING, NULL, 2, 0, strings, NULL); DeregisterEventSource(logh);}void log_error(char *mess){ HANDLE logh; char *strings[] = {service_name, mess , NULL}; if(!(logh = RegisterEventSource(NULL,APP_NAME))) return; ReportEvent(logh, EVENTLOG_ERROR_TYPE, 0, MSG_ERROR, NULL, 2, 0, strings, NULL); DeregisterEventSource(logh);}void log_info(char *mess){ HANDLE logh; char *strings[] = {service_name, mess , NULL}; if(!(logh = RegisterEventSource(NULL,APP_NAME))) return; ReportEvent(logh, EVENTLOG_INFORMATION_TYPE, 0, MSG_INFO, NULL, 2, 0, strings, NULL); DeregisterEventSource(logh);}#ifndef NDEBUGvoid log_debug(char *mess){ char *buff=malloc(strlen(mess)+100); sprintf(buff,"DEBUG! %s",mess); log_info(buff); free(buff);}#endifchar *envdup(char *env){ char *tmp; int len; for(tmp = env; *tmp != '\0'; tmp += strlen(tmp)+1) ; len = (tmp - env) + 1; if(len == 1) ++len; tmp = malloc(len); memcpy(tmp,env,len); return tmp;}char **env_to_arg(char *env){ char **ret; char *tmp; int i; int num_strings = 0; for(tmp = env; *tmp != '\0'; tmp += strlen(tmp)+1) ++num_strings; /* malloc enough to insert ONE string */ ret = malloc(sizeof(char *) * (num_strings + 2)); i = 0; for(tmp = env; *tmp != '\0'; tmp += strlen(tmp)+1){ ret[i++] = strdup(tmp); } ret[i] = NULL; free(env); return ret;}static int compare(const void *a, const void *b){ char *s1 = *((char **) a); char *s2 = *((char **) b); char *e1 = strchr(s1,'='); char *e2 = strchr(s2,'='); int ret; int len; if(!e1) e1 = s1 + strlen(s1); if(!e2) e2 = s2 + strlen(s2); if((e1 - s1) > (e2 - s2)) len = (e2 - s2); else len = (e1 - s1); ret = _strnicmp(s1,s2,len); if(ret == 0) return ((e1 - s1) - (e2 - s2)); else return ret;}char *arg_to_env(char **arg){ char *block; char *pek; int i; int totlen = 1; /* extra '\0' */ for(i=0;arg[i] != NULL;++i) totlen += strlen(arg[i])+1; /* sort the environment vector */ qsort(arg,i,sizeof(char *),&compare); if(totlen == 1){ block = malloc(2); block[0] = block[1] = '\0'; } else { block = malloc(totlen); pek = block; for(i=0; arg[i] != NULL; ++i){ strcpy(pek, arg[i]); free(arg[i]); pek += strlen(pek)+1; } *pek = '\0'; } free(arg); return block;}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?