예제 #1
0
void
os_reportSetApiInfoDescription(
    const char   *description,
    ...)
{
    os_reportInfo *report;
    va_list args;
    char * descriptionCopy = NULL; /* since description may point to report->description*/

    if (description) {
        descriptionCopy = os_strdup(description);
    }

    report = (os_reportInfo *)os_threadMemGet(OS_THREAD_API_INFO);
    if (report) {
        if (report->description) {
            os_free(report->description);
            report->description = NULL;
        }
        if (descriptionCopy) {
            report->description = (char*) os_malloc(OS_MAX_DESCRIPTIONSIZE);
            if (report->description) {
                va_start(args, description);
                os_vsnprintf(report->description, OS_MAX_DESCRIPTIONSIZE-1, descriptionCopy, args);
                va_end(args);
            }
        }
    }
    os_free(descriptionCopy);
}
예제 #2
0
static void
os_defaultDiag (
    const char   *cluster,
    os_diagLevel  level,
    const char   *description,
    va_list 	  args)
{
    os_time ostime;
    char extended_description[512];
    char procIdentity[64];
    char threadIdentity[64];
    char node[64];

    ostime = os_timeGet();

    os_vsnprintf (extended_description, sizeof(extended_description)-1, description, args);
    extended_description [sizeof(extended_description)-1] = '\0';

    os_gethostname (node, sizeof(node));
    os_threadFigureIdentity (threadIdentity, sizeof (threadIdentity)-1);
    threadIdentity [sizeof (threadIdentity)-1] = '\0';
    os_procFigureIdentity (procIdentity, sizeof (procIdentity)-1);
    procIdentity [sizeof (procIdentity)-1] = '\0';

    printf (
        "Diag - %s:%s:%s - T:%d.%9.9d L:%s C:%s D:%s\n",
        node,
        procIdentity,
        threadIdentity,
        ostime.tv_sec,
        ostime.tv_nsec,
        os_diagLevelText[level],
        cluster,
        extended_description);
}
예제 #3
0
static void
os_reportSetApiInfoRec(
    const char   *reportContext,
    const char   *sourceLine,
    const char   *callStack,
    os_int32      reportCode,
    const char   *description,
    va_list       args)
{
    os_reportInfo *report;
    char * descriptionCopy = NULL; /* since description may point to report->description*/

    if (description) {
        descriptionCopy = os_strdup(description);
    }

    report = (os_reportInfo *)os_threadMemGet(OS_THREAD_API_INFO);
    if (report == NULL) {
        report = (os_reportInfo *)os_threadMemMalloc(OS_THREAD_API_INFO, sizeof(os_reportInfo));
        if (report) memset(report, 0, sizeof(os_reportInfo));
    }
    if (report) {
        if (report->reportContext) {
            os_free(report->reportContext);
            report->reportContext = NULL;
        }
        if (reportContext) {
            report->reportContext = os_strdup(reportContext);
        }
        if (report->sourceLine) {
            os_free(report->sourceLine);
            report->sourceLine = NULL;
        }
        if (sourceLine) {
            report->sourceLine = os_strdup(sourceLine);
        }
        if (report->callStack) {
            os_free(report->callStack);
            report->callStack = NULL;
        }
        if (callStack) {
            report->callStack = os_strdup(callStack);
        }
        report->reportCode = reportCode;
        if (report->description) {
            os_free(report->description);
            report->description = NULL;
        }
        if (descriptionCopy) {
            report->description = (char*) os_malloc(OS_MAX_DESCRIPTIONSIZE);
            if (report->description) {
                os_vsnprintf(report->description, OS_MAX_DESCRIPTIONSIZE-1, descriptionCopy, args);
            }
        }
    }
    os_free(descriptionCopy);
}
예제 #4
0
static void exa_perf_instance_print(const char *fmt, ...)
{
    va_list ap;
    char log[EXALOG_MSG_MAX + 1];

    va_start(ap, fmt);
    os_vsnprintf(log, EXALOG_MSG_MAX + 1, fmt, ap);
    va_end(ap);

    exalog_info("%s", log);
}
예제 #5
0
파일: q_log.c 프로젝트: osrf/opensplice
static void nn_vlogb (struct thread_state1 *self, const char *fmt, va_list ap)
{
  int n, trunc = 0;
  size_t nrem;
  logbuf_t lb;
  if (*fmt == 0)
    return;
  if (self && self->lb)
    lb = self->lb;
  else
  {
    lb = &gv.static_logbuf;
    if (gv.static_logbuf_lock_inited)
    {
      /* not supposed to be multi-threaded when mutex not
         initialized */
      os_mutexLock (&gv.static_logbuf_lock);
    }
  }

  nrem = lb->bufsz - lb->pos;
  if (nrem > 0)
  {
    n = os_vsnprintf (lb->buf + lb->pos, nrem, fmt, ap);
    if (n >= 0 && (size_t) n < nrem)
      lb->pos += (size_t) n;
    else
    {
      lb->pos += nrem;
      trunc = 1;
    }
    if (trunc)
    {
      static const char msg[] = "(trunc)\n";
      const size_t msglen = sizeof (msg) - 1;
      assert (lb->pos <= lb->bufsz);
      assert (lb->pos >= msglen);
      memcpy (lb->buf + lb->pos - msglen, msg, msglen);
    }
  }
  if (fmt[strlen (fmt) - 1] == '\n')
  {
    logbuf_flush_real (self, lb);
  }

  if (lb == &gv.static_logbuf && gv.static_logbuf_lock_inited)
  {
    os_mutexUnlock (&gv.static_logbuf_lock);
  }
}
예제 #6
0
파일: d_misc.c 프로젝트: xrl/opensplice_dds
static void
d_doPrint(
    d_configuration config,
    const char* format,
    va_list args)
{
    char description[512];

    if(config->tracingOutputFile){
        os_vsnprintf(description, sizeof(description)-1, format, args);
        description [sizeof(description)-1] = '\0';
        fprintf(config->tracingOutputFile, "%s", description);
        fflush(config->tracingOutputFile);

        if(config->tracingSynchronous){
            os_fsync(config->tracingOutputFile);
        }
    }
}
예제 #7
0
void
DLRL_Exception_format(
    DLRL_Exception *_this,
    LOC_long exceptionID,
    char *exceptionName,
    char *format,
    va_list args)
{
  char *p;
  int space = DLRL_MAX_EXCEPTION_MESSAGE_SIZE;
  int len;

  assert (_this);
  assert(exceptionName);
  assert(format);

  _this->exceptionID = exceptionID;
  p = _this->exceptionMessage;

  len = strlen(_this->exceptionMessage);
  space = DLRL_MAX_EXCEPTION_MESSAGE_SIZE - len;
  snprintf(p + len, space, "Exception %s --\n", exceptionName);
  p[DLRL_MAX_EXCEPTION_MESSAGE_SIZE - 1] = '\0';
  len = strlen(p);
  space = DLRL_MAX_EXCEPTION_MESSAGE_SIZE - len;

  if (format)
  {
    snprintf(p + len, space, "  ");
    p[DLRL_MAX_EXCEPTION_MESSAGE_SIZE - 1] = '\0';
    len = strlen(p);
    space = DLRL_MAX_EXCEPTION_MESSAGE_SIZE - len;
    os_vsnprintf(p + len, space, format, args);
    p[DLRL_MAX_EXCEPTION_MESSAGE_SIZE - 1] = '\0';
    len = strlen(p);
    space = DLRL_MAX_EXCEPTION_MESSAGE_SIZE - len;
    snprintf(p + len, space, "\n");
    p[DLRL_MAX_EXCEPTION_MESSAGE_SIZE - 1] = '\0';
  }
}
예제 #8
0
void
sd_stringAddImpl (
    sd_string     str,
    const c_char *format,
    va_list       args)
{
    c_ulong l;
    c_bool  ready = FALSE;

    while ( !ready ) {
        l = os_vsnprintf(SD_POINTER(str), SD_FREE(str), format, args);
        if ( l < SD_FREE(str) ) {
            str->index += l;
            ready = TRUE;
        } else {
            sd_stringRealloc(str);
            if ( l >= SD_FREE(str) ) {
                ready = TRUE;
            }
        }
    }
}
예제 #9
0
void
os_report(
    os_reportType reportType,
    const char   *reportContext,
    const char   *fileName,
    os_int32      lineNo,
    os_int32      reportCode,
    const char   *description,
    ...)
{
    va_list args;
    unsigned int i;
    const char *file_name = fileName;
    const char *ptr;
    char xml_description[1024];
    char extended_description[1024];
    char threadIdentity[64];
    char procIdentity[256];
    struct os_reportEventV1_s eventDetails = { OS_REPORT_EVENT_V1, /* version */
                                               0, /* reportType */
                                               NULL, /* reportContext */
                                               NULL, /* fileName */
                                               0, /* lineNo */
                                               0, /* code */
                                               NULL, /*description */
                                               NULL, /* threadDesc */
                                               NULL /*processDesc */
                                              };

#ifdef WIN32
    char file_separator = '\\';
#else
    char file_separator = '/';
#endif

    eventDetails.description = (char*) &extended_description;
    eventDetails.threadDesc = (char*) &threadIdentity;
    eventDetails.processDesc = (char*) &procIdentity;

    if (reportType < os_reportVerbosity)
    {
        /* This level / type of report is below the process output suppression threshold. */
        return;
    }

    va_start(args, description);
    os_vsnprintf(extended_description, sizeof(extended_description)-1, description, args);
    va_end(args);
    extended_description[sizeof(extended_description)-1] = '\0';
    os_threadFigureIdentity(threadIdentity, sizeof (threadIdentity)-1);
    threadIdentity[sizeof (threadIdentity)-1] = '\0';
    os_procFigureIdentity(procIdentity, sizeof (procIdentity)-1);
    procIdentity[sizeof (procIdentity)-1] = '\0';
    eventDetails.reportType = reportType;
    eventDetails.reportContext = reportContext;
    eventDetails.lineNo = lineNo;
    eventDetails.code = reportCode;

    for (ptr=fileName; *ptr!=0; ptr++) {
       if (*ptr == file_separator) {
          file_name = (char *)((os_address)ptr+1);
       }
    }

    eventDetails.fileName = file_name;

    if (os_reportServicesCount != 0) {
       for (i = 0; i < OS_REPORTSERVICES_MAX; i++) {
          if (os_reportServices[i].os_reportContext != 0) {
             /* Must call va_start and va_end before and after each call to the plugged in services */
             va_start(args, description);
             os_reportServices[i].os_reportService(os_reportServices[i].os_reportContext,
                                                   reportType, reportContext, file_name, lineNo, reportCode,
                                                   description, args);
             va_end(args);
          }
       }
    }

    if (reportPluginAdmin != NULL){
        if (xmlReportPluginsCount > 0)
        {
            /* print format the XML string only if at least one plugin
             * has been registered with an XML Report method */
            os_sprintf (xml_description,
                        "<%s>\n"
                        "<DESCRIPTION>%s</DESCRIPTION>\n"
                        "<CONTEXT>%s</CONTEXT>\n"
                        "<FILE>%s</FILE>\n"
                        "<LINE>%d</LINE>\n"
                        "<CODE>%d</CODE>\n"
                        "</%s>\n",
                        os_reportTypeText[reportType],
                        extended_description,
                        reportContext,
                        file_name,
                        lineNo,
                        reportCode,
                        os_reportTypeText[reportType]);
            xml_description[sizeof(xml_description)-1] = '\0';
        }
        for (i = 0; i < reportPluginAdmin->size; i++){
            if (reportPluginAdmin->reportArray[i] != NULL) {
                if (reportPluginAdmin->reportArray[i]->report_symbol != NULL) {
                    reportPluginAdmin->reportArray[i]->report_symbol
                    (reportPluginAdmin->reportArray[i]->plugin_context, xml_description);
                }

                if (reportPluginAdmin->reportArray[i]->typedreport_symbol != NULL) {
                    reportPluginAdmin->reportArray[i]->typedreport_symbol
                    (reportPluginAdmin->reportArray[i]->plugin_context, (os_reportEvent) &eventDetails);
                }
            }
        }
    }

    if (doDefault)
    {
       os_defaultReport(&eventDetails);
    }

    va_start(args, description);
    if (reportType == OS_API_INFO) {
       char sourceLine[512];

       snprintf(sourceLine, sizeof(sourceLine), "%s::%d", file_name, lineNo);
       sourceLine[sizeof(sourceLine)-1] = '\0';
       os_reportSetApiInfoRec(reportContext, sourceLine, NULL, reportCode,
                              description, args);
    }
    va_end(args);
 }