Ignore:
Timestamp:
02/24/06 11:39:57 (15 years ago)
Author:
Perry Lorier <perry@…>
Branches:
4.0.1-hotfixes, cachetimestamps, develop, dpdk-ndag, etsilive, getfragoff, help, libtrace4, master, ndag_format, pfring, rc-4.0.1, rc-4.0.2, rc-4.0.3, rc-4.0.4, ringdecrementfix, ringperformance, ringtimestampfixes
Children:
c6a6c3a
Parents:
913721f
Message:

Add new error handling

File:
1 edited

Legend:

Unmodified
Added
Removed
  • lib/format_helper.c

    r9836f12 r0ea3526  
    4747#include <sys/ioctl.h>
    4848#include <assert.h>
     49#include <stdarg.h>
    4950
    5051struct libtrace_eventobj_t trace_event_device(struct libtrace_t *trace, struct libtrace_packet_t *packet) {
     
    166167        fd=open(trace->uridata,O_LARGEFILE);
    167168        if (fd==-1) {
    168                 trace_set_err(errno,"Unable to open %s",trace->uridata);
     169                trace_set_err(trace,errno,"Unable to open %s",trace->uridata);
    169170                return 0;
    170171        }
     
    199200        fd=open(trace->uridata,fileflag,0666);
    200201        if (fd==-1) {
    201                 trace_set_err(errno,"Unable to open %s",trace->uridata);
     202                trace_set_err_out(trace,
     203                                errno,"Unable to open %s",trace->uridata);
    202204                return 0;
    203205        }
     
    205207        if (ret==NULL) {
    206208                printf("%s\n",filemode);
    207                 trace_set_err(TRACE_ERR_INIT_FAILED,"gz out of memory");
     209                trace_set_err_out(trace,
     210                                TRACE_ERR_INIT_FAILED,"gz out of memory");
    208211        }
    209212        return ret;
     
    211214
    212215
    213 
     216/** Update the libtrace error
     217 * @param errcode either an Econstant from libc, or a LIBTRACE_ERROR
     218 * @param msg a plaintext error message
     219 * @internal
     220 */
     221void trace_set_err(libtrace_t *trace,int errcode,const char *msg,...)
     222{
     223        char buf[256];
     224        va_list va;
     225        va_start(va,msg);
     226        trace->err.err_num=errcode;
     227        if (errcode>0) {
     228                vsnprintf(buf,sizeof(buf),msg,va);
     229                snprintf(trace->err.problem,sizeof(trace->err.problem),
     230                                "%s: %s",buf,strerror(errno));
     231        } else {
     232                vsnprintf(trace->err.problem,sizeof(trace->err.problem),
     233                                msg,va);
     234        }
     235        va_end(va);
     236}
     237
     238/** Update the libtrace for output traces error
     239 * @param errcode either an Econstant from libc, or a LIBTRACE_ERROR
     240 * @param msg a plaintext error message
     241 * @internal
     242 */
     243void trace_set_err_out(libtrace_out_t *trace,int errcode,const char *msg,...)
     244{
     245        char buf[256];
     246        va_list va;
     247        va_start(va,msg);
     248        trace->err.err_num=errcode;
     249        if (errcode>0) {
     250                vsnprintf(buf,sizeof(buf),msg,va);
     251                snprintf(trace->err.problem,sizeof(trace->err.problem),
     252                                "%s: %s",buf,strerror(errno));
     253        } else {
     254                vsnprintf(trace->err.problem,sizeof(trace->err.problem),
     255                                msg,va);
     256        }
     257        va_end(va);
     258}
     259
Note: See TracChangeset for help on using the changeset viewer.