Changeset 6f75b9d for lib/trace.c


Ignore:
Timestamp:
10/26/05 15:56:13 (16 years ago)
Author:
Jamie Curtis <jamie@…>
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:
3436702
Parents:
437d002
Message:

Fixed bug where the compiler would optimise away the initialisation of the
scan variable.

Cleaned up some other code, added xstrncpy() and xstrndup() as platform
independant functions that dwim.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • lib/trace.c

    rf1a1f5e r6f75b9d  
    137137int nformats = 0;
    138138
     139/* strncpy is not assured to copy the final \0, so we
     140 * will use our own one that does
     141 */
     142static void xstrncpy(char *dest, const char *src, size_t n)
     143{
     144        strncpy(dest,src,n);
     145        dest[n]='\0';
     146}
     147 
     148static char *xstrndup(const char *src,size_t n)
     149{       
     150        char *ret=malloc(n+1);
     151        xstrncpy(ret,src,n);
     152        return ret;
     153}
     154
    139155void register_format(struct libtrace_format_t *f) {
    140156//      fprintf(stderr,"Registering input format %s\n",f->name);
    141157        if (format_list == 0) {
    142158                format_size = 10;
    143                 format_list = malloc(sizeof(struct libtrace_format_t *) * format_size);
     159                format_list = malloc(
     160                                        sizeof(struct libtrace_format_t *) *
     161                                        format_size
     162                                );
    144163        } else if (format_size == nformats) {
    145164                format_size = format_size + 10;
    146165                format_list = realloc(format_list,
    147                                 sizeof(struct libtrace_format_t *) * format_size);
     166                                sizeof(struct libtrace_format_t *) *
     167                                format_size);
    148168        }
    149169        format_list[nformats] = f;
     
    240260        struct libtrace_t *libtrace = malloc(sizeof(struct libtrace_t));
    241261        char *scan = 0;
    242         char *uridata = 0;                 
     262        const char *uridata = 0;                 
    243263        int i = 0;
    244         //struct stat buf;
    245264       
    246265        trace_err.err_num = E_NOERROR;
    247266       
    248         //scan = calloc(sizeof(char),URI_PROTO_LINE);   
    249267        // parse the URI to determine what sort of event we are dealing with
    250        
    251268        if ((uridata = trace_parse_uri(uri, &scan)) == 0) {
    252269                return 0;
     
    258275        for (i = 0; i < nformats; i++) {
    259276                if (strlen(scan) == strlen(format_list[i]->name) &&
    260                                 !strncasecmp(scan,
     277                                strncasecmp(scan,
    261278                                        format_list[i]->name,
    262                                         strlen(scan))) {
    263                                 libtrace->format=format_list[i];
    264                                 break;
    265                                 }
     279                                        strlen(scan)) == 0) {
     280                        libtrace->format=format_list[i];
     281                        break;
     282                }
    266283        }
    267284        if (libtrace->format == 0) {
     
    314331
    315332        if((uridata = strchr(uri,':')) == NULL) {
    316                 strncpy(scan, uri, strlen(uri));
     333                xstrncpy(scan, uri, strlen(uri));
    317334        } else {
    318                 strncpy(scan,uri, (uridata - uri));
     335                xstrncpy(scan,uri, (uridata - uri));
    319336        }
    320337       
     
    362379       
    363380        char *scan = 0;
    364         char *uridata = 0;
     381        const char *uridata = 0;
    365382        int i;
    366383
     
    13681385}
    13691386
    1370 char * trace_parse_uri(const char *uri, char **format) {
    1371         char *uridata = 0;
    1372        
    1373         *format = calloc(sizeof(char), URI_PROTO_LINE);
     1387const char * trace_parse_uri(const char *uri, char **format) {
     1388        const char *uridata = 0;
    13741389       
    13751390        if((uridata = strchr(uri,':')) == NULL) {
     
    13851400        }
    13861401
    1387         strncpy(*format ,uri, (uridata - uri));
     1402        *format=xstrndup(uri, (uridata - uri));
     1403
    13881404        // push uridata past the delimiter
    13891405        uridata++;
Note: See TracChangeset for help on using the changeset viewer.