Ignore:
Timestamp:
Sep 18, 2009, 1:05:06 AM (15 years ago)
Author:
Bruno Cornec
Message:

Modify the get_netx_raitab_line function prototype to reduce static memory allocation

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2.2.10/mondo/src/common/libmondo-raid.c

    r2405 r2407  
    425425 * @return 0 if the line was read and stored successfully, 1 if we're at end of file.
    426426 */
    427 int get_next_raidtab_line(FILE * fin, char *label, char *value)
     427void get_next_raidtab_line(FILE * fin, char **label, char **value)
    428428{
    429429    char *incoming = NULL;
     
    431431
    432432    assert(fin != NULL);
    433     assert(label != NULL);
    434     assert(value != NULL);
    435 
    436     label[0] = value[0] = '\0';
     433
    437434    if (feof(fin)) {
    438         return (1);
     435        return;
    439436    }
    440437    for (mr_getline(incoming, fin); !feof(fin); mr_getline(incoming, fin)) {
     
    449446            p++;
    450447        }
    451         strcpy(label, incoming);
    452         strcpy(value, p);
     448        mr_asprintf(*label, "%s", incoming);
     449        mr_asprintf(*value, "%s", p);
    453450        mr_free(incoming);
    454         return (0);
     451        return;
    455452    }
    456453    mr_free(incoming);
    457     return (1);
     454    return;
    458455}
    459456
     
    587584#else
    588585
    589 int load_raidtab_into_raidlist(struct raidlist_itself *raidlist,
    590                                char *fname)
    591 {
    592     FILE *fin;
    593     char *label;
    594     char *value;
     586int load_raidtab_into_raidlist(struct raidlist_itself *raidlist, char *fname) {
     587
     588    FILE *fin = NULL;
     589    char *label = NULL;
     590    char *value = NULL;
    595591    int items;
    596592    int v;
     
    610606    items = 0;
    611607    log_it("Loading raidtab...");
    612     malloc_string(label);
    613     malloc_string(value);
    614     get_next_raidtab_line(fin, label, value);
     608    get_next_raidtab_line(fin, &label, &value);
    615609    while (!feof(fin)) {
    616610        log_msg(1, "Looking for raid record #%d", items);
     
    622616            strcpy(raidlist->el[items].additional_vars.el[v].value, value);
    623617            v++;
    624             get_next_raidtab_line(fin, label, value);
     618            mr_free(label);
     619            mr_free(value);
     620            get_next_raidtab_line(fin, &label, &value);
    625621        }
    626622        raidlist->el[items].additional_vars.entries = v;
     
    631627        log_msg(2, "Record #%d (%s) found", items, value);
    632628        strcpy(raidlist->el[items].raid_device, value);
    633         for (get_next_raidtab_line(fin, label, value);
    634              !feof(fin) && strcmp(label, "raiddev");
    635              get_next_raidtab_line(fin, label, value)) {
     629        mr_free(label);
     630        mr_free(value);
     631        for (get_next_raidtab_line(fin, &label, &value); !feof(fin) && strcmp(label, "raiddev"); get_next_raidtab_line(fin, &label, &value)) {
    636632            process_raidtab_line(fin, &raidlist->el[items], label, value);
    637         }
     633            mr_free(label);
     634            mr_free(value);
     635        }
     636        mr_free(label);
     637        mr_free(value);
    638638        items++;
    639639    }
     640    mr_free(label);
     641    mr_free(value);
    640642    paranoid_fclose(fin);
    641643    raidlist->entries = items;
    642644    log_msg(1, "Raidtab loaded successfully.");
    643645    log_msg(1, "%d RAID devices in raidtab", items);
    644     paranoid_free(label);
    645     paranoid_free(value);
    646646    return (0);
    647647}
     
    670670
    671671    /*@ add mallocs * */
    672     char *labelB;
    673     char *valueB;
     672    char *labelB = NULL;
     673    char *valueB = NULL;
    674674
    675675    struct list_of_disks *disklist;
     
    677677    int v;
    678678
    679     malloc_string(labelB);
    680     malloc_string(valueB);
    681679    assert(fin != NULL);
    682680    assert(raidrec != NULL);
     
    713711        }
    714712    } else if (!strcmp(label, "device")) {
    715         get_next_raidtab_line(fin, labelB, valueB);
     713        get_next_raidtab_line(fin, &labelB, &valueB);
    716714        if (!strcmp(labelB, "raid-disk")) {
    717715            disklist = &raidrec->data_disks;
     
    731729            add_disk_to_raid_device(disklist, value, index);
    732730        }
     731        mr_free(labelB);
     732        mr_free(valueB);
    733733    } else {
    734734        v = raidrec->additional_vars.entries;
     
    737737        raidrec->additional_vars.entries = ++v;
    738738    }
    739     paranoid_free(labelB);
    740     paranoid_free(valueB);
    741739}
    742740#endif
Note: See TracChangeset for help on using the changeset viewer.