Ticket #281: mfile.C.diff

File mfile.C.diff, 1.9 KB (added by Joses, 17 years ago)

highlight several realloc() functions that should handle existing "buf"

  • mfile.C

    old new  
    6262int MFILE::vprintf(const char* format, va_list ap) {
    6363    char buf2[BUFSIZE];
    6464    int n, k;
     65    char* buft;
    6566
    6667    k = vsnprintf(buf2, BUFSIZE, format, ap);
    6768    if (k<=-1 || k>=BUFSIZE) {
     
    7172        return -1;
    7273    }
    7374    n = (int)strlen(buf2);
    74     buf = (char*)realloc(buf, len+n+1);
    75     if (!buf) {
     75    buft = (char*)realloc(buf, len+n+1);
     76    if (buft) {
     77        buf = buft;
     78    } else {
     79        free(buf); //buf still exists, do you want to flush it or free it?
     80        buf = 0;
     81        len = 0;
    7682        errno = ERR_MALLOC;
    7783        return ERR_MALLOC;
    7884    }
     
    9399}
    94100
    95101size_t MFILE::write(const void *ptr, size_t size, size_t nitems) {
    96     buf = (char *)realloc( buf, len+(size*nitems)+1 );
    97     if (!buf) {
     102    char* buft = (char *)realloc( buf, len+(size*nitems)+1 );
     103    if (buft) {
     104        buf = buft;
     105    } else {
     106        free(buf); //buf still exists, do you want to flush it or free it?
     107        buf = 0;
     108        len = 0;
    98109        errno = ERR_MALLOC;
    99110        return 0;
    100111    }
     
    105116}
    106117
    107118int MFILE::_putchar(char c) {
    108     buf = (char*)realloc(buf, len+1+1);
    109     if (!buf) {
     119    char* buft = (char*)realloc(buf, len+1+1);
     120    if (buft) {
     121        buf = buft;
     122    } else {
     123        free(buf); //buf still exists, do you want to flush it or free it?
     124        buf = 0;
     125        len = 0;
    110126        errno = ERR_MALLOC;
    111127        return EOF;
    112128    }
     
    118134
    119135int MFILE::puts(const char* p) {
    120136    int n = (int)strlen(p);
    121     buf = (char*)realloc(buf, len+n+1);
    122     if (!buf) {
     137    char* buft = (char*)realloc(buf, len+n+1);
     138    if (buft) {
     139        buf = buft;
     140    } else {
     141        free(buf); //buf still exists, do you want to flush it or free it?
     142        buf = 0;
     143        len = 0;
    123144        errno = ERR_MALLOC;
    124145        return EOF;
    125146    }