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

📄 osip_port.c

📁 嵌入式产品中的osip的源代码.
💻 C
📖 第 1 页 / 共 2 页
字号:
    return -1;			/* empty value (or several space!) */  *dest = osip_malloc (sep - (buf) + 1);  osip_strncpy (*dest, buf, sep - buf);  *next = sep + 1;		/* return the position right after the separator */  return 1;}#endif/* in quoted-string, many characters can be escaped...   *//* __osip_quote_find returns the next quote that is not escaped */char *__osip_quote_find (const char *qstring){  char *quote;  quote = strchr (qstring, '"');  if (quote == qstring)		/* the first char matches and is not escaped... */    return quote;  if (quote == NULL)    return NULL;		/* no quote at all... */  /* this is now the nasty cases where '"' is escaped     '" jonathan ros \\\""'     |                  |     '" jonathan ros \\"'     |                |     '" jonathan ros \""'     |                |     we must count the number of preceeding '\' */  {    int i = 1;    for (;;)      {	if (0 == strncmp (quote - i, "\\", 1))	  i++;	else	  {	    if (i % 2 == 1)	/* the '"' was not escaped */	      return quote;	    /* else continue with the next '"' */	    quote = strchr (quote + 1, '"');	    if (quote == NULL)	      return NULL;	    i = 1;	  }	if (quote - i == qstring - 1)	  /* example: "\"john"  */	  /* example: "\\"jack" */	  {	    /* special case where the string start with '\' */	    if (*qstring == '\\')	      i++;		/* an escape char was not counted */	    if (i % 2 == 0)	/* the '"' was not escaped */	      return quote;	    else	      {			/* else continue with the next '"' */		qstring = quote + 1;	/* reset qstring because					   (*quote+1) may be also == to '\\' */		quote = strchr (quote + 1, '"');		if (quote == NULL)		  return NULL;		i = 1;	      }	  }      }    return NULL;  }}char *osip_enquote (const char *s){  char *rtn;  char *t;  t = rtn = osip_malloc (strlen (s) * 2 + 3);  *t++ = '"';  for (; *s != '\0'; s++)    {      switch (*s)	{	case '"':	case '\\':	case 0x7f:	  *t++ = '\\';	  *t++ = *s;	  break;	case '\n':	case '\r':	  *t++ = ' ';	  break;	default:	  *t++ = *s;	  break;	}    }  *t++ = '"';  *t++ = '\0';  return rtn;}voidosip_dequote (char *s){  size_t len;  if (*s == '\0')    return;  if (*s != '"')    return;  len = strlen (s);  memmove (s, s + 1, len--);  if (len > 0 && s[len - 1] == '"')    s[--len] = '\0';  for (; *s != '\0'; s++, len--)    {      if (*s == '\\')	memmove (s, s + 1, len--);    }}/**********************************************************//* only MACROS from osip/trace.h should be used by others *//* TRACE_INITIALIZE(level,file))                          *//* TRACE_ENABLE_LEVEL(level)                              *//* TRACE_DISABLE_LEVEL(level)                             *//* IS_TRACE_LEVEL_ACTIVATE(level)                         *//**********************************************************/#ifndef ENABLE_TRACEvoidosip_trace_initialize_syslog (osip_trace_level_t level, char *ident){}voidosip_trace_initialize (osip_trace_level_t level, FILE * file){}voidosip_trace_enable_level (osip_trace_level_t level){}voidosip_trace_disable_level (osip_trace_level_t level){}intosip_is_trace_level_activate (osip_trace_level_t level){  return LOG_FALSE;}#else/* initialize log *//* all lower levels of level are logged in file. */voidosip_trace_initialize (osip_trace_level_t level, FILE * file){  int i = 0;  /* enable trace in log file by default */  logfile = NULL;  if (file != NULL)    logfile = file;#ifndef SYSTEM_LOGGER_ENABLED  else    logfile = stdout;#endif  /* enable all lower levels */  while (i < END_TRACE_LEVEL)    {      if (i < level)	tracing_table[i] = LOG_TRUE;      else	tracing_table[i] = LOG_FALSE;      i++;    }}voidosip_trace_initialize_syslog (osip_trace_level_t level, char *ident){  int i = 0;#if defined (HAVE_SYSLOG_H)  openlog (ident, LOG_CONS | LOG_PID, LOG_DAEMON);  use_syslog = 1;#endif  /* enable all lower levels */  while (i < END_TRACE_LEVEL)    {      if (i < level)	tracing_table[i] = LOG_TRUE;      else	tracing_table[i] = LOG_FALSE;      i++;    }}/* enable a special debugging level! */voidosip_trace_enable_level (osip_trace_level_t level){  tracing_table[level] = LOG_TRUE;}/* disable a special debugging level! */voidosip_trace_disable_level (osip_trace_level_t level){  tracing_table[level] = LOG_FALSE;}/* not so usefull? */intosip_is_trace_level_activate (osip_trace_level_t level){  return tracing_table[level];}#endifintosip_trace (char *fi, int li, osip_trace_level_t level, FILE * f, char *chfr,	    ...){  va_list ap;#ifdef ENABLE_TRACE#if !defined(WIN32) && !defined(SYSTEM_LOGGER_ENABLED)  if (logfile == NULL && use_syslog == 0)    {				/* user did not initialize logger.. */      return 1;    }#endif  if (f == NULL)    f = logfile;  if (tracing_table[level] == LOG_FALSE)    return 0;  VA_START (ap, chfr);#ifdef __VXWORKS_OS__  /* vxworks can't have a local file */  f = stdout;#endif  if (f && use_syslog == 0)    {      if (level == OSIP_FATAL)	fprintf (f, "| FATAL | <%s: %i> ", fi, li);      else if (level == OSIP_BUG)	fprintf (f, "|  BUG  | <%s: %i> ", fi, li);      else if (level == OSIP_ERROR)	fprintf (f, "| ERROR | <%s: %i> ", fi, li);      else if (level == OSIP_WARNING)	fprintf (f, "|WARNING| <%s: %i> ", fi, li);      else if (level == OSIP_INFO1)	fprintf (f, "| INFO1 | <%s: %i> ", fi, li);      else if (level == OSIP_INFO2)	fprintf (f, "| INFO2 | <%s: %i> ", fi, li);      else if (level == OSIP_INFO3)	fprintf (f, "| INFO3 | <%s: %i> ", fi, li);      else if (level == OSIP_INFO4)	fprintf (f, "| INFO4 | <%s: %i> ", fi, li);      vfprintf (f, chfr, ap);      fflush (f);    }#if defined (HAVE_SYSLOG_H)  else if (use_syslog == 1)    {      char buffer[512];      int in = 0;      memset (buffer, 0, sizeof (buffer));      if (level == OSIP_FATAL)	in = snprintf (buffer, 511, "| FATAL | <%s: %i> ", fi, li);      else if (level == OSIP_BUG)	in = snprintf (buffer, 511, "|  BUG  | <%s: %i> ", fi, li);      else if (level == OSIP_ERROR)	in = snprintf (buffer, 511, "| ERROR | <%s: %i> ", fi, li);      else if (level == OSIP_WARNING)	in = snprintf (buffer, 511, "|WARNING| <%s: %i> ", fi, li);      else if (level == OSIP_INFO1)	in = snprintf (buffer, 511, "| INFO1 | <%s: %i> ", fi, li);      else if (level == OSIP_INFO2)	in = snprintf (buffer, 511, "| INFO2 | <%s: %i> ", fi, li);      else if (level == OSIP_INFO3)	in = snprintf (buffer, 511, "| INFO3 | <%s: %i> ", fi, li);      else if (level == OSIP_INFO4)	in = snprintf (buffer, 511, "| INFO4 | <%s: %i> ", fi, li);      vsnprintf (buffer + in, 511 - in, chfr, ap);      if (level == OSIP_FATAL)	syslog (LOG_ERR, "%s", buffer);      else if (level == OSIP_BUG)	syslog (LOG_ERR, "%s", buffer);      else if (level == OSIP_ERROR)	syslog (LOG_ERR, "%s", buffer);      else if (level == OSIP_WARNING)	syslog (LOG_WARNING, "%s", buffer);      else if (level == OSIP_INFO1)	syslog (LOG_INFO, "%s", buffer);      else if (level == OSIP_INFO2)	syslog (LOG_INFO, "%s", buffer);      else if (level == OSIP_INFO3)	syslog (LOG_DEBUG, "%s", buffer);      else if (level == OSIP_INFO4)	syslog (LOG_DEBUG, "%s", buffer);    }#endif#ifdef SYSTEM_LOGGER_ENABLED  else    {      char buffer[512];      int in = 0;      memset (buffer, 0, sizeof (buffer));      if (level == OSIP_FATAL)	in = _snprintf (buffer, 511, "| FATAL | <%s: %i> ", fi, li);      else if (level == OSIP_BUG)	in = _snprintf (buffer, 511, "|  BUG  | <%s: %i> ", fi, li);      else if (level == OSIP_ERROR)	in = _snprintf (buffer, 511, "| ERROR | <%s: %i> ", fi, li);      else if (level == OSIP_WARNING)	in = _snprintf (buffer, 511, "|WARNING| <%s: %i> ", fi, li);      else if (level == OSIP_INFO1)	in = _snprintf (buffer, 511, "| INFO1 | <%s: %i> ", fi, li);      else if (level == OSIP_INFO2)	in = _snprintf (buffer, 511, "| INFO2 | <%s: %i> ", fi, li);      else if (level == OSIP_INFO3)	in = _snprintf (buffer, 511, "| INFO3 | <%s: %i> ", fi, li);      else if (level == OSIP_INFO4)	in = _snprintf (buffer, 511, "| INFO4 | <%s: %i> ", fi, li);      _vsnprintf (buffer + in, 511 - in, chfr, ap);      OutputDebugString (buffer);    }#endif  va_end (ap);#endif  return 0;}#ifdef WIN32void *osip_malloc(size_t size){  void *ptr = malloc(size);  if(ptr!=NULL)    memset(ptr,0,size);  return ptr;}void osip_free(void *ptr){  if (ptr==NULL) return;  free(ptr);}#endif

⌨️ 快捷键说明

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