Changeset 900 in MondoRescue for trunk/mondo/src/common/libmondo-stream.c


Ignore:
Timestamp:
Oct 24, 2006, 8:49:18 AM (18 years ago)
Author:
Bruno Cornec
Message:

Huge patch to introduce low level functions that will bw used everywhere (mr_free, mr_asprintf, ...)
Nearly linking now due to that.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/mondo/src/common/libmondo-stream.c

    r783 r900  
    2222#include "libmondo-tools-EXT.h"
    2323#include "libmondo-fifo-EXT.h"
     24#include "mr_mem.h"
    2425
    2526#define EXTRA_TAPE_CHECKSUMS
     
    126127        eject_device(bkpinfo->media_device);
    127128    }
    128     paranoid_free(blk);
    129     paranoid_free(g_tapecatalog);
     129    mr_free(blk);
     130    mr_free((void *)g_tapecatalog);
    130131    return (retval);
    131132}
     
    180181               g_tapecatalog->el[i].tape_posK);
    181182    }
    182     paranoid_free(blk);
    183     paranoid_free(g_tapecatalog);
     183    mr_free(blk);
     184    mr_free((void *)g_tapecatalog);
    184185    return (retval);
    185186}
     
    192193    int res;
    193194
    194     asprintf(&command, "mt -f %s status", dev);
     195    mr_asprintf(&command, "mt -f %s status", dev);
    195196    res = run_program_and_log_output(command, 1);
    196     paranoid_free(command);
     197    mr_free(command);
    197198    if (res) {
    198199        return (FALSE);
     
    224225    tmp = find_home_of_exe("cdrecord");
    225226    if (tmp) {
    226         asprintf(&cdr_exe, "cdrecord");
    227     } else {
    228         asprintf(&cdr_exe, "dvdrecord");
    229     }
    230     paranoid_free(tmp);
    231 
    232     asprintf(&command, "%s -scanbus 2> /dev/null | grep -i tape | wc -l",
     227        mr_asprintf(&cdr_exe, "cdrecord");
     228    } else {
     229        mr_asprintf(&cdr_exe, "dvdrecord");
     230    }
     231    mr_free(tmp);
     232
     233    mr_asprintf(&command, "%s -scanbus 2> /dev/null | grep -i tape | wc -l",
    233234             cdr_exe);
    234235    tmp = call_program_and_get_last_line_of_output(command);
    235     paranoid_free(command);
     236    mr_free(command);
    236237
    237238    if (atoi(tmp) != 1) {
    238239        log_it
    239240            ("Either too few or too many tape streamers for me to detect...");
    240         asprintf(&dev, VANILLA_SCSI_TAPE"0");
    241         paranoid_free(tmp);
    242         paranoid_free(cdr_exe);
     241        mr_asprintf(&dev, VANILLA_SCSI_TAPE"0");
     242        mr_free(tmp);
     243        mr_free(cdr_exe);
    243244        return 1;
    244245    }
    245     paranoid_free(tmp);
    246 
    247     asprintf(&command,
     246    mr_free(tmp);
     247
     248    mr_asprintf(&command,
    248249             "%s -scanbus 2> /dev/null | tr -s '\t' ' ' | grep \"[0-9]*,[0-9]*,[0-9]*\" | grep -v \"[0-9]*) \\*\" | grep -i TAPE | cut -d' ' -f2 | head -n1",
    249250             cdr_exe);
    250251    tmp = call_program_and_get_last_line_of_output(command);
    251     paranoid_free(command);
     252    mr_free(command);
    252253    if (strlen(tmp) < 2) {
    253254        log_it("Could not find tape device");
    254         paranoid_free(tmp);
    255         paranoid_free(cdr_exe);
     255        mr_free(tmp);
     256        mr_free(cdr_exe);
    256257        return 1;
    257258    }
    258     paranoid_free(tmp);
    259 
    260     asprintf(&command,
     259    mr_free(tmp);
     260
     261    mr_asprintf(&command,
    261262             "%s -scanbus 2> /dev/null | tr -s '\t' ' ' | grep \"[0-9]*,[0-9]*,[0-9]*\" | grep -v \"[0-9]*) \\*\" | grep -i TAPE | cut -d' ' -f3 | cut -d')' -f1 | head -n1",
    262263             cdr_exe);
    263     paranoid_free(cdr_exe);
     264    mr_free(cdr_exe);
    264265
    265266    tmp = call_program_and_get_last_line_of_output(command);
    266     paranoid_free(command);
    267 
    268     asprintf(&dev, VANILLA_SCSI_TAPE"%s", tmp);
    269     paranoid_free(tmp);
     267    mr_free(command);
     268
     269    mr_asprintf(&dev, VANILLA_SCSI_TAPE"%s", tmp);
     270    mr_free(tmp);
    270271
    271272    if (!mt_says_tape_exists(dev)) {
    272         paranoid_free(dev);
    273 
    274         asprintf(&dev, ALT_TAPE"%s", tmp);
     273        mr_free(dev);
     274
     275        mr_asprintf(&dev, ALT_TAPE"%s", tmp);
    275276        if (!mt_says_tape_exists(dev)) {
    276277            log_it("Cannot openin %s", dev);
    277             paranoid_free(dev);
    278 
    279             asprintf(&dev, VANILLA_SCSI_TAPE"0");
     278            mr_free(dev);
     279
     280            mr_asprintf(&dev, VANILLA_SCSI_TAPE"0");
    280281            if (!mt_says_tape_exists(dev)) {
    281282                log_it("Cannot openin %s", dev);
    282                 paranoid_free(dev);
    283 
    284                 asprintf(&dev, "/dev/osst0");
     283                mr_free(dev);
     284
     285                mr_asprintf(&dev, "/dev/osst0");
    285286                if (!mt_says_tape_exists(dev)) {
    286287                    res++;
     
    303304    } else {
    304305        log_it("Turning %s", dev);
    305         paranoid_free(tmp);
    306         asprintf(&tmp1,
     306        mr_free(tmp);
     307        mr_asprintf(&tmp1,
    307308                 (strrchr(dev, '/') != NULL) ? strrchr(dev, '/') : dev);
    308         paranoid_free(dev);
    309         asprintf(&dev, "/dev/os%s", tmp1);
    310         paranoid_free(tmp1);
     309        mr_free(dev);
     310        mr_asprintf(&dev, "/dev/os%s", tmp1);
     311        mr_free(tmp1);
    311312
    312313        log_it("...into %s", dev);
     
    321322
    322323    if (res) {
    323         paranoid_free(tmp);
     324        mr_free(tmp);
    324325        return (res);
    325326    }
     
    327328    if (strlen(tmp) < 2) {
    328329        log_it("Warning - size of tape unknown");
    329         paranoid_free(tmp);
     330        mr_free(tmp);
    330331        return (0);
    331332    } else {
     
    352353        fatal_error("Wrong order, sunshine.");
    353354    }
    354     paranoid_free(fname);
     355    mr_free(fname);
    355356    fname = (char *)&res;
    356357    read_file_from_stream_to_file(bkpinfo, xattr_fname, *ptmp_size);
     
    364365        fatal_error("Wrong order, sunshine.");
    365366    }
    366     paranoid_free(fname);
     367    mr_free(fname);
    367368    fname = (char *)&res;
    368369    if (*pctrl_chr != BLK_START_EXAT_FILE) {
     
    425426    if (g_current_media_number != tapeno) {
    426427        //      log_it("g_current_media_number = %d", g_current_media_number);
    427         asprintf(&tmp,
     428        mr_asprintf(&tmp,
    428429                 _("When the tape drive goes quiet, please insert volume %d in this series."),
    429430                 tapeno);
    430431        popup_and_OK(tmp);
    431         paranoid_free(tmp);
     432        mr_free(tmp);
    432433        open_evalcall_form(_("Waiting while the tape drive settles"));
    433434    } else {
     
    482483
    483484    bufsize_K = (long long) (1024LL * (1 + g_tape_buffer_size_MB));
    484     asprintf(&tmpdir, "%s/tmpfs/backcatalog", td);
     485    mr_asprintf(&tmpdir, "%s/tmpfs/backcatalog", td);
    485486    if (strstr(latest_fname, ".afio.") || strstr(latest_fname, ".star.")) {
    486487        type = fileset;
     
    493494    }
    494495    mkdir(tmpdir, 0x700);
    495     asprintf(&command, "cp -f %s %s", latest_fname, tmpdir);
     496    mr_asprintf(&command, "cp -f %s %s", latest_fname, tmpdir);
    496497    if (run_program_and_log_output(command, 6)) {
    497498        log_it("Warning - failed to copy %s to backcatalog at %s",
    498499               latest_fname, tmpdir);
    499500    }
    500     paranoid_free(command);
     501    mr_free(command);
    501502
    502503    last = g_tapecatalog->entries - 1;
     
    522523
    523524    for (i = curr - 1; i >= 0 && curr - i < 10; i--) {
    524         asprintf(&old_fname, "%s/%s", tmpdir, g_tapecatalog->el[i].fname);
     525        mr_asprintf(&old_fname, "%s/%s", tmpdir, g_tapecatalog->el[i].fname);
    525526        unlink(old_fname);
    526         paranoid_free(old_fname);
    527     }
    528     paranoid_free(tmpdir);
     527        mr_free(old_fname);
     528    }
     529    mr_free(tmpdir);
    529530    return (0);
    530531}
     
    554555        return (0);
    555556    }
    556     asprintf(&tmp, "mt -f %s setblk %ld", tapedev,
     557    mr_asprintf(&tmp, "mt -f %s setblk %ld", tapedev,
    557558             internal_tape_block_size);
    558559    res = run_program_and_log_output(tmp, 3);
    559     paranoid_free(tmp);
     560    mr_free(tmp);
    560561    return (res);
    561562}
     
    605606    }
    606607    insist_on_this_tape_number(1);
    607     asprintf(&outfname, "%s/tmp/all.tar.gz", bkpinfo->tmpdir);
     608    mr_asprintf(&outfname, "%s/tmp/all.tar.gz", bkpinfo->tmpdir);
    608609    make_hole_for_file(outfname);
    609610
     
    649650    }
    650651    paranoid_fclose(fout);
    651     paranoid_free(datablock);
     652    mr_free(datablock);
    652653    /* find initial blocks */
    653654    res = read_header_block_from_stream(&size, NULL, &ctrl_chr);
     
    665666    (void) getcwd(old_cwd, MAX_STR_LEN);
    666667    chdir(bkpinfo->tmpdir);
    667     asprintf(&tmp, "tar -zxf %s tmp/mondo-restore.cfg 2> /dev/null",
     668    mr_asprintf(&tmp, "tar -zxf %s tmp/mondo-restore.cfg 2> /dev/null",
    668669             outfname);
    669670    paranoid_system(tmp);
    670     paranoid_free(tmp);
     671    mr_free(tmp);
    671672    paranoid_system("cp -f tmp/mondo-restore.cfg . 2> /dev/null");
    672673    chdir(old_cwd);
    673674    unlink(outfname);
    674     paranoid_free(outfname);
     675    mr_free(outfname);
    675676    return (retval);
    676677}
     
    692693
    693694    /*  add 'dummy' if testing */
    694     asprintf(&command,
     695    mr_asprintf(&command,
    695696             "cdrecord -eject dev=%s speed=%d fs=24m -waiti - >> %s 2>> %s",
    696697             cddev, speed, MONDO_LOGFILE, MONDO_LOGFILE);
     
    706707    /*  log_it("Let's see what happens, shall we?"); */
    707708    g_tape_stream = popen(command, "w");
    708     paranoid_free(command);
     709    mr_free(command);
    709710    if (g_tape_stream) {
    710711        return (0);
     
    852853    res = read_header_block_from_stream(&temp_size, temp_fname, &ctrl_chr);
    853854    if (orig_size != temp_size && orig_size != -1) {
    854         asprintf(&tmp,
     855        mr_asprintf(&tmp,
    855856                 "output file's size should be %ld K but is apparently %ld K",
    856857                 (long) size >> 10, (long) temp_size >> 10);
    857858        log_to_screen(tmp);
    858         paranoid_free(tmp);
     859        mr_free(tmp);
    859860    }
    860861    if (ctrl_chr != BLK_START_FILE) {
     
    862863        return (1);
    863864    }
    864     asprintf(&tmp, "Reading file from tape; writing to '%s'; %ld KB",
     865    mr_asprintf(&tmp, "Reading file from tape; writing to '%s'; %ld KB",
    865866             outfname, (long) size >> 10);
    866867    log_to_screen(tmp);
    867     paranoid_free(tmp);
     868    mr_free(tmp);
    868869
    869870    if (foutstream) {
     
    921922    log_msg(6, ".......................... Should be %lld", orig_size);
    922923    g_tape_posK += total_read_from_tape_for_this_file / 1024;
    923     asprintf(&actual_cksum, "%04x%04x", crc16, crctt);
     924    mr_asprintf(&actual_cksum, "%04x%04x", crc16, crctt);
    924925    if (foutstream) {           /*log_it("Finished writing to foutstream"); */
    925926    } else {
     
    932933    }
    933934    if (strcmp(temp_cksum, actual_cksum)) {
    934         asprintf(&tmp, _("actual cksum=%s; recorded cksum=%s"), actual_cksum,
     935        mr_asprintf(&tmp, _("actual cksum=%s; recorded cksum=%s"), actual_cksum,
    935936                 temp_cksum);
    936937        log_to_screen(tmp);
    937         paranoid_free(tmp);
    938 
    939         asprintf(&tmp, _("%s (%ld K) is corrupt on tape"), temp_fname,
     938        mr_free(tmp);
     939
     940        mr_asprintf(&tmp, _("%s (%ld K) is corrupt on tape"), temp_fname,
    940941                 (long) orig_size >> 10);
    941942        log_to_screen(tmp);
    942         paranoid_free(tmp);
     943        mr_free(tmp);
    943944        retval++;
    944945    }
    945     paranoid_free(actual_cksum);
    946     paranoid_free(datablock);
    947     paranoid_free(temp_fname);
    948     paranoid_free(temp_cksum);
     946    mr_free(actual_cksum);
     947    mr_free(datablock);
     948    mr_free(temp_fname);
     949    mr_free(temp_cksum);
    949950    return (retval);
    950951}
     
    992993     * something (allocate) */
    993994    if (filename != NULL) {
    994         asprintf(&filename, tempblock + 1000);
     995        mr_asprintf(&filename, tempblock + 1000);
    995996    }
    996997    if (*pcontrol_char == BLK_ABORTED_BACKUP) {
     
    10091010            marker_to_string(*pcontrol_char), tempblock + 1000,
    10101011            (long) (*plen) >> 10);
    1011     paranoid_free(tempblock);
     1012    mr_free(tempblock);
    10121013    return (retval);
    10131014}
     
    11331134        wrong_marker(BLK_START_AN_AFIO_OR_SLICE, ctrl_chr);
    11341135        log_msg(3, "Still trying to re-sync w/ tape");
    1135         paranoid_free(temp_fname);
     1136        mr_free(temp_fname);
    11361137        temp_fname = (char *)&res;
    11371138    }
     
    11481149        /* Do not desallocate when the while condition is met */
    11491150        if (ctrl_chr != BLK_START_FILE) {
    1150             paranoid_free(temp_fname);
     1151            mr_free(temp_fname);
    11511152            temp_fname = (char *)&res;
    11521153        }
     
    11741175        }
    11751176
    1176         paranoid_free(temp_fname);
     1177        mr_free(temp_fname);
    11771178        temp_fname = (char *)&res;
    11781179        res = read_header_block_from_stream(&temp_size, NULL, &ctrl_chr);
     
    12111212    log_msg(2, "Reading %s (it matches %s)", temp_fname,
    12121213            the_file_I_was_reading);
    1213     paranoid_free(temp_fname);
    1214     paranoid_free(datablock);
     1214    mr_free(temp_fname);
     1215    mr_free(datablock);
    12151216    return (0);
    12161217}
     
    12811282    }
    12821283    if (bkpinfo->backup_media_type == cdstream) {
    1283         asprintf(&command,
     1284        mr_asprintf(&command,
    12841285                 "cdrecord -eject dev=%s speed=%d fs=24m -waiti - >> %s 2>> %s",
    12851286                 bkpinfo->media_device, bkpinfo->cdrw_speed, MONDO_LOGFILE,
     
    12891290        log_it("Let's see what happens, shall we?");
    12901291        g_tape_stream = popen(command, "w");
    1291         paranoid_free(command);
     1292        mr_free(command);
    12921293        if (!g_tape_stream) {
    12931294            log_to_screen(_("Failed to openout to cdstream (fifo)"));
     
    13321333    last = g_tapecatalog->entries - 1;
    13331334    for (i = 0; i <= last; i++) {
    1334         asprintf(&fname, "%s/tmpfs/backcatalog/%s", bkpinfo->tmpdir,
     1335        mr_asprintf(&fname, "%s/tmpfs/backcatalog/%s", bkpinfo->tmpdir,
    13351336                 g_tapecatalog->el[i].fname);
    13361337        if (!does_file_exist(fname)) {
     
    13511352            }
    13521353        }
    1353         paranoid_free(fname);
     1354        mr_free(fname);
    13541355    }
    13551356    log_msg(2, "Finished writing back catalog to tape");
     
    13851386    log_it("Data disks = %s", fname);
    13861387    if (!does_file_exist(fname)) {
    1387         asprintf(&tmp, _("Cannot find %s"), fname);
     1388        mr_asprintf(&tmp, _("Cannot find %s"), fname);
    13881389        log_to_screen(tmp);
    1389         paranoid_free(tmp);
     1390        mr_free(tmp);
    13901391        return (1);
    13911392    }
     
    14791480        p++;
    14801481    }
    1481     asprintf(&tmp, "Writing file '%s' to tape (%ld KB)", p,
     1482    mr_asprintf(&tmp, "Writing file '%s' to tape (%ld KB)", p,
    14821483             (long) filesize >> 10);
    14831484    log_it(tmp);
    1484     paranoid_free(tmp);
     1485    mr_free(tmp);
    14851486
    14861487    write_header_block_to_stream(filesize, infile_basename,
     
    15221523    }
    15231524    paranoid_fclose(fin);
    1524     asprintf(&checksum, "%04x%04x", crc16, crctt);
     1525    mr_asprintf(&checksum, "%04x%04x", crc16, crctt);
    15251526    /* BERLIOS: what does it do ??? */
    15261527    write_header_block_to_stream((off_t)g_current_media_number, checksum,
    15271528                                 BLK_STOP_FILE);
    1528     paranoid_free(checksum);
     1529    mr_free(checksum);
    15291530//  log_it("File '%s' written to tape.", infile);
    15301531    return (retval);
     
    15821583        fwrite(tempblock, 1, (size_t) TAPE_BLOCK_SIZE,
    15831584               g_tape_stream) / 1024;
    1584     asprintf(&tmp, "%s (fname=%s, size=%ld K)",
     1585    mr_asprintf(&tmp, "%s (fname=%s, size=%ld K)",
    15851586             marker_to_string(control_char), p,
    15861587             (long) length_of_incoming_file >> 10);
    15871588    log_msg(6, tmp);
    1588     paranoid_free(tmp);
     1589    mr_free(tmp);
    15891590    return (0);
    15901591}
     
    16031604
    16041605    /*@ end vars *************************************************** */
    1605     asprintf(&tmp, _("Wrong marker! (Should be %s, is actually %s)"),
     1606    mr_asprintf(&tmp, _("Wrong marker! (Should be %s, is actually %s)"),
    16061607             marker_to_string(should_be), marker_to_string(it_is));
    16071608    log_to_screen(tmp);
    1608     paranoid_free(tmp);
     1609    mr_free(tmp);
    16091610}
    16101611
Note: See TracChangeset for help on using the changeset viewer.