Ignore:
Timestamp:
Sep 25, 2013, 9:03:25 AM (11 years ago)
Author:
Bruno Cornec
Message:
  • revert r3188 & r3189 as I started to work on branch 3.0 before deciding it was much better to do it in 3.2. This will allow some small maintenance work on 3.0 if needed, while pushing all the rest to 3.2 and providing early access to it.
File:
1 edited

Legend:

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

    r3188 r3192  
    138138    }
    139139    sleep(1);
    140     sync();
     140    paranoid_system("sync");
    141141    sleep(1);
    142142    paranoid_pclose(g_tape_stream);
    143143    log_it("closein_tape() -- leaving");
     144/*
     145  for(i=0; i < g_tapecatalog->entries; i++)
     146    {
     147      log_it("i=%d type=%s num=%d aux=%ld", i, (g_tapecatalog->el[i].type==fileset)?"fileset":"bigslice", g_tapecatalog->el[i].number, g_tapecatalog->el[i].aux);
     148    }
     149*/
    144150    if (!bkpinfo->please_dont_eject) {
    145151        eject_device(bkpinfo->media_device);
     
    177183
    178184    sleep(1);
    179     sync();
     185    paranoid_system("sync");
    180186    sleep(1);
    181187    log_it("closeout_tape() -- entering");
     
    222228               g_tapecatalog->el[i].tape_posK);
    223229    }
     230    //  if (!bkpinfo->please_dont_eject)
     231    //    { eject_device(bkpinfo->media_device); }
    224232    paranoid_free(blk);
    225233    paranoid_free(g_tapecatalog);
     
    258266    char tmp[MAX_STR_LEN];
    259267    char *command = NULL;
    260     char *cdr_exe = NULL;
     268    char cdr_exe[MAX_STR_LEN];
    261269    int res;
    262270
     
    264272    dev[0] = siz[0] = '\0';
    265273    if (find_home_of_exe("cdrecord")) {
    266         mr_asprintf(cdr_exe, "cdrecord");
    267     } else {
    268         mr_asprintf(cdr_exe, "dvdrecord");
    269     }
    270     mr_asprintf(command, "%s -scanbus 2> /dev/null | grep -i tape | wc -l", cdr_exe);
    271     mr_asprintf(tmp, "%s", call_program_and_get_last_line_of_output(command));
     274        strcpy(cdr_exe, "cdrecord");
     275    } else {
     276        strcpy(cdr_exe, "dvdrecord");
     277    }
     278    mr_asprintf(command, "%s -scanbus 2> /dev/null | grep -i tape | wc -l",
     279            cdr_exe);
     280    strcpy(tmp, call_program_and_get_last_line_of_output(command));
    272281    mr_free(command);
    273282
    274283    if (atoi(tmp) != 1) {
    275         log_it("Either too few or too many tape streamers for me to detect...");
     284        log_it
     285            ("Either too few or too many tape streamers for me to detect...");
    276286        strcpy(dev, VANILLA_SCSI_TAPE);
    277         mr_free(tmp);
    278         mr_free(cdr_exe);
    279287        return 1;
    280288    }
    281     mr_free(tmp);
    282 
    283     mr_asprintf(command, "%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", cdr_exe);
    284     mr_asprintf(tmp, "%s", all_program_and_get_last_line_of_output(command));
     289    mr_asprintf(command,
     290            "%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",
     291            cdr_exe);
     292    strcpy(tmp, call_program_and_get_last_line_of_output(command));
    285293    mr_free(command);
    286294
    287295    if (strlen(tmp) < 2) {
    288296        log_it("Could not find tape device");
    289         mr_free(cdr_exe);
    290         mr_free(tmp);
    291297        return 1;
    292298    }
    293     mr_asprintf(command, "%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", cdr_exe);
    294     mr_free(cdr_exe);
    295 
    296     mr_asprintf(tmp, "%s", call_program_and_get_last_line_of_output(command));
     299    mr_asprintf(command,
     300            "%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",
     301            cdr_exe);
     302    strcpy(tmp, call_program_and_get_last_line_of_output(command));
    297303    mr_free(command);
    298304
     
    300306    dev[strlen(dev) - 1] = '\0';
    301307    strcat(dev, tmp);           // e.g. '/dev/st0' becomes '/dev/stN'
    302     mr_free(tmp);
    303 
    304308    res = 0;
    305309    if (!mt_says_tape_exists(dev)) {
     
    320324    }
    321325
    322     if (dev) {
    323         log_it("At this point, dev = %s and res = %d", dev, res);
    324     } else {
    325         log_it("At this point, dev is NULL and res = %d", dev, res);
    326     }
    327 
    328     mr_asprintf(tmp, "%s", call_program_and_get_last_line_of_output("cdrecord -scanbus 2> /dev/null | tr -s '\t' ' ' | grep \"[0-9]*,[0-9]*,[0-9]*\" | grep -v \"[0-9]*) \\*\" | grep -i TAPE | awk '{for(i=1; i<NF; i++) { if (index($i, \"GB\")>0) { print $i;};};};'"));
     326    log_it("At this point, dev = %s and res = %d", dev, res);
     327
     328    strcpy(tmp, call_program_and_get_last_line_of_output("\
     329cdrecord -scanbus 2> /dev/null | tr -s '\t' ' ' | \
     330grep \"[0-9]*,[0-9]*,[0-9]*\" | grep -v \"[0-9]*) \\*\" | grep -i TAPE | \
     331awk '{for(i=1; i<NF; i++) { if (index($i, \"GB\")>0) { print $i;};};};'"));
    329332
    330333    if (mt_says_tape_exists(dev)) {
     
    332335    } else {
    333336        log_it("Turning %s", dev);
    334         mr_free(tmp);
    335         mr_asprintf(tmp, "%s", (strrchr(dev, '/') != NULL) ? strrchr(dev, '/') : dev);
     337        strcpy(tmp, (strrchr(dev, '/') != NULL) ? strrchr(dev, '/') : dev);
    336338        sprintf(dev, "/dev/os%s", tmp);
    337339        log_it("...into %s", dev);
     
    353355        siz[0] = '\0';
    354356        log_it("Warning - size of tape unknown");
     357        return (0);
    355358    } else {
    356359        strcpy(siz, tmp);
    357     }
    358     mr_free(tmp);
    359     return (0);
    360 }
     360        return (0);
     361    }
     362}
     363
     364
     365
     366
    361367
    362368
     
    473479    log_it("Insisting on tape #%d", tapeno);
    474480    if (g_current_media_number != tapeno) {
    475         mr_asprintf(tmp, "When the tape drive goes quiet, please insert volume %d in this series.", tapeno);
     481        mr_asprintf(tmp,
     482                "When the tape drive goes quiet, please insert volume %d in this series.",
     483                tapeno);
    476484        popup_and_OK(tmp);
    477485        mr_free(tmp);
     
    606614    int res;
    607615
    608     if (bkpinfo->media_device == NULL) {
    609         return(1);
    610     }
    611 
    612616    if (strncmp(bkpinfo->media_device, "/dev/", 5)) {
    613         log_msg(1, "Not using 'mt setblk'. This isn't an actual /dev entry.");
     617        log_msg(1,
     618                "Not using 'mt setblk'. This isn't an actual /dev entry.");
    614619        return (0);
    615620    }
     
    682687    int res = 0;
    683688
    684     if (bkpinfo->media_device == NULL) {
    685         return(1);
    686     }
    687 
    688689    log_it("Skipping OBDR headers");
    689690    mr_asprintf(command, "mt -f %s rewind",bkpinfo->media_device);
     
    711712    char *command = NULL;
    712713    int res = 0;
    713 
    714     if (bkpinfo->media_device == NULL) {
    715         return(1);
    716     }
    717714
    718715    log_it("Creating OBDR headers");
     
    783780    /*@ end vars *************************************************** */
    784781
    785     g_tapecatalog = mr_malloc(sizeof(struct s_tapecatalog));
     782    assert_string_is_neither_NULL_nor_zerolength(bkpinfo->media_device);
     783    if (!(g_tapecatalog = malloc(sizeof(struct s_tapecatalog)))) {
     784        fatal_error("Cannot alloc mem for tape catalog");
     785    }
    786786    g_tapecatalog->entries = 0;
    787787    g_tape_posK = 0;
     
    800800        if (bkpinfo->media_device == NULL) {
    801801            log_it("Not able to skip OBDR - Restore will have to be done manually");
    802             return (1);
    803802        }
    804803        set_tape_block_size_with_mt(bkpinfo->internal_tape_block_size);
     
    809808    make_hole_for_file(outfname);
    810809
     810//  start_buffer_process( bkpinfo->media_device, g_tape_fifo, FALSE);
    811811    log_it("Opening IN tape");
    812     if (!(g_tape_stream = open_device_via_buffer(bkpinfo->media_device, 'r', bkpinfo->internal_tape_block_size))) {
     812    if (!
     813        (g_tape_stream =
     814         open_device_via_buffer(bkpinfo->media_device, 'r',
     815                                bkpinfo->internal_tape_block_size))) {
    813816        log_OS_error(g_tape_fifo);
    814817        log_to_screen("Cannot openin stream device");
     
    818821    log_to_screen("Reading stream");
    819822    log_it("stream device = '%s'", bkpinfo->media_device);
    820     /* skip data disks */
     823/* skip data disks */
    821824    open_evalcall_form("Skipping data disks on stream");
    822825    log_to_screen("Skipping data disks on stream");
     
    871874        // FIXME
    872875    }
    873     mr_asprintf(tmp, "tar -zxf %s ./tmp/mondo-restore.cfg 2> /dev/null", outfname);
     876    mr_asprintf(tmp, "tar -zxf %s ./tmp/mondo-restore.cfg 2> /dev/null",
     877            outfname);
    874878    paranoid_system(tmp);
    875879    mr_free(tmp);
     
    899903    /*@ end vars *************************************************** */
    900904
    901     if (cddev == NULL) {
    902         log_to_screen("Failed to openout NULL cddev");
    903         return (1);
    904     }
    905905    /*  add 'dummy' if testing */
    906906    mr_asprintf(command, "cdrecord -eject dev=%s speed=%d fs=24m -waiti - >> %s 2>> %s", cddev, speed, MONDO_LOGFILE, MONDO_LOGFILE);
     
    942942    return (0);
    943943}
    944 if (bkpinfo->media_device == NULL) {
    945     log_it("Unable to openout NULL device");
    946     return(1);
    947 }
    948 g_tapecatalog = mr_malloc(sizeof(struct s_tapecatalog));
     944if (!(g_tapecatalog = malloc(sizeof(struct s_tapecatalog)))) {
     945    fatal_error("Cannot alloc mem for tape catalog");
     946}
    949947g_tapecatalog->entries = 0;
    950948g_tape_posK = 0;
     
    956954}
    957955log_it("Opening OUT tape");
    958 if (!(g_tape_stream = open_device_via_buffer(bkpinfo->media_device, 'w', bkpinfo->internal_tape_block_size))) {
     956if (!
     957    (g_tape_stream =
     958     open_device_via_buffer(bkpinfo->media_device, 'w', bkpinfo->internal_tape_block_size))) {
    959959    log_OS_error(g_tape_fifo);
    960960    log_to_screen("Cannot openin stream device");
     
    969969/**
    970970 * Copy a file from the opened stream (CD or tape) to @p outfile.
     971 * @param bkpinfo The backup information structure. @c bkpinfo->media_device is the only field used.
    971972 * @param outfile The file to write to.
    972973 * @param size The size of the file in the input stream.
     
    10301031{
    10311032    /*@ buffers ***************************************************** */
     1033    char *tmp = NULL;
    10321034    char *datablock;
    10331035    char *temp_fname;
    10341036    char *temp_cksum;
    10351037    char *actual_cksum = NULL;
     1038//  char *pA, *pB;
    10361039
    10371040    /*@ int ********************************************************* */
     
    10751078    }
    10761079    if (orig_size != temp_size && orig_size != -1) {
    1077         log_to_screen("output file's size should be %ld K but is apparently %ld K", (long) size >> 10, (long) temp_size >> 10);
     1080        mr_asprintf(tmp, "output file's size should be %ld K but is apparently %ld K", (long) size >> 10, (long) temp_size >> 10);
     1081        log_to_screen(tmp);
     1082        mr_free(tmp);
    10781083    }
    10791084    if (ctrl_chr != BLK_START_FILE) {
     
    11461151    }
    11471152    if (strcmp(temp_cksum, actual_cksum)) {
    1148         log_to_screen("actual cksum=%s; recorded cksum=%s", actual_cksum, temp_cksum);
    1149         log_to_screen("%s (%ld K) is corrupt on tape", temp_fname, (long) orig_size >> 10);
     1153        mr_asprintf(tmp, "actual cksum=%s; recorded cksum=%s", actual_cksum,
     1154                temp_cksum);
     1155        log_to_screen(tmp);
     1156        mr_free(tmp);
     1157
     1158        mr_asprintf(tmp, "%s (%ld K) is corrupt on tape", temp_fname,
     1159                (long) orig_size >> 10);
     1160        log_to_screen(tmp);
     1161        mr_free(tmp);
     1162
    11501163        retval++;
    11511164    }
     
    11911204        g_tape_posK += fread(tempblock, 1, (size_t) TAPE_BLOCK_SIZE, g_tape_stream) / 1024;
    11921205    }
     1206/*  memcpy((char*)plength_of_incoming_file,(char*)tempblock+7001,sizeof(long long)); */
     1207/*  for(*plen=0,i=7;i>=0;i--) {*plen<<=8; *plen |= tempblock[7001+i];} */
    11931208    memcpy((char *) plen, tempblock + 7001, sizeof(long long));
    11941209    if (strcmp(tempblock + 6000 + *pcontrol_char, STR_HEADER)) {
     
    11961211    }
    11971212    strcpy(filename, tempblock + 1000);
     1213/*  strcpy(cksum,tempblock+5555);*/
     1214/*  log_it( "%s  (reading) fname=%s, filesize=%ld K",
     1215       marker_to_string (*pcontrol_char), filename,
     1216       (long) ((*plen) >> 10));
     1217*/
    11981218    if (*pcontrol_char == BLK_ABORTED_BACKUP) {
    11991219        log_to_screen("I can't verify an aborted backup.");
     
    13431363    while (ctrl_chr != BLK_START_FILE) {
    13441364        res = read_header_block_from_stream(&temp_size, temp_fname, &ctrl_chr);
    1345         if (res) {
    1346             //FIXME
    1347         }
    13481365        if (ctrl_chr == BLK_START_FILE) {
    13491366            break;
     
    13661383    }
    13671384    while (strcmp(pA, pB)) {
    1368         log_msg(6, "Skipping %s (it's not %s)", temp_fname, the_file_I_was_reading);
     1385        log_msg(6, "Skipping %s (it's not %s)", temp_fname,
     1386                the_file_I_was_reading);
    13691387        for (size = temp_size; size > 0; size -= bytes_to_write) {
    13701388            bytes_to_write =
     
    14031421        }
    14041422    }
    1405     log_msg(2, "Reading %s (it matches %s)", temp_fname, the_file_I_was_reading);
     1423    log_msg(2, "Reading %s (it matches %s)", temp_fname,
     1424            the_file_I_was_reading);
    14061425    paranoid_free(temp_fname);
    14071426    paranoid_free(datablock);
     
    14251444    /*@ end vars *************************************************** */
    14261445
    1427     if (bkpinfo->media_device == NULL) {
    1428         log_it("Unable to open in from NULL device");
    1429         return (1);
    1430     }
    1431 
    14321446    paranoid_pclose(g_tape_stream);
    14331447    sync();
     
    14371451    insist_on_this_tape_number(g_current_media_number + 1); // will increment it, too
    14381452    log_it("Opening IN the next tape");
    1439     if (!(g_tape_stream = open_device_via_buffer(bkpinfo->media_device, 'r', bkpinfo->internal_tape_block_size))) {
     1453    if (!
     1454        (g_tape_stream =
     1455         open_device_via_buffer(bkpinfo->media_device, 'r',
     1456                                bkpinfo->internal_tape_block_size))) {
    14401457        log_OS_error(g_tape_fifo);
    14411458        log_to_screen("Cannot openin stream device");
     
    14701487    char *command = NULL;
    14711488
    1472     if (bkpinfo->media_device == NULL) {
    1473         log_it("Unable to open out from NULL device");
    1474         return (1);
    1475     }
    1476 
    14771489    paranoid_pclose(g_tape_stream);
    1478     sync();
    1479     sync();
    1480     sync();
     1490    paranoid_system("sync");
     1491    paranoid_system("sync");
     1492    paranoid_system("sync");
    14811493    log_it("New tape requested.");
    14821494    insist_on_this_tape_number(g_current_media_number + 1); // will increment g_current_media, too
    14831495    if (bkpinfo->backup_media_type == cdstream) {
    1484         mr_asprintf(command, "cdrecord -eject dev=%s speed=%d fs=24m -waiti - >> %s 2>> %s", bkpinfo->media_device, bkpinfo->cdrw_speed, MONDO_LOGFILE, MONDO_LOGFILE);
     1496        mr_asprintf(command,
     1497                "cdrecord -eject dev=%s speed=%d fs=24m -waiti - >> %s 2>> %s",
     1498                bkpinfo->media_device, bkpinfo->cdrw_speed, MONDO_LOGFILE,
     1499                MONDO_LOGFILE);
    14851500        log_it("Opening OUT to next CD with the command");
    14861501        log_it(command);
     
    14951510    } else {
    14961511        log_it("Opening OUT to next tape");
    1497         if (!(g_tape_stream = open_device_via_buffer(bkpinfo->media_device, 'w', bkpinfo->internal_tape_block_size))) {
     1512        if (!
     1513            (g_tape_stream =
     1514             open_device_via_buffer(bkpinfo->media_device, 'w',
     1515                                    bkpinfo->internal_tape_block_size))) {
    14981516            log_OS_error(g_tape_fifo);
    14991517            log_to_screen("Cannot openin stream device");
     
    15661584    /*@ pointers *************************************************** */
    15671585    FILE *fin;
     1586    char *tmp = NULL;
    15681587
    15691588    /*@ long ******************************************************* */
     
    15831602    log_it("Data disks = %s", fname);
    15841603    if (!does_file_exist(fname)) {
    1585         log_to_screen("Cannot find %s", fname);
     1604        mr_asprintf(tmp, "Cannot find %s", fname);
     1605        log_to_screen(tmp);
     1606        mr_free(tmp);
    15861607        return (1);
    15871608    }
     
    16261647{
    16271648    /*@ buffers **************************************************** */
     1649    char *tmp = NULL;
    16281650    char datablock[TAPE_BLOCK_SIZE];
    16291651    char *checksum = NULL;
     
    16781700        p++;
    16791701    }
    1680     log_it("Writing file '%s' to tape (%ld KB)", p, (long) filesize >> 10);
     1702    mr_asprintf(tmp, "Writing file '%s' to tape (%ld KB)", p,
     1703            (long) filesize >> 10);
     1704    log_it(tmp);
     1705    mr_free(tmp);
    16811706    write_header_block_to_stream(filesize, infile_basename,
    16821707                                 BLK_START_FILE);
     
    17501775    /*@ buffers **************************************************** */
    17511776    char tempblock[TAPE_BLOCK_SIZE];
     1777    char *tmp = NULL;
    17521778    char *p;
    17531779
     
    17681794    }
    17691795    if (!g_tape_stream) {
    1770         log_to_screen("You're not backing up to tape. Why write a tape header?");
     1796        log_to_screen
     1797            ("You're not backing up to tape. Why write a tape header?");
    17711798        return (1);
    17721799    }
     
    17781805    memcpy(tempblock + 7001, (char *) &olen, sizeof(off_t));
    17791806    strcpy(tempblock + 1000, filename);
    1780     g_tape_posK += fwrite(tempblock, 1, (size_t) TAPE_BLOCK_SIZE, g_tape_stream) / 1024;
    1781     log_msg(6, "%s (fname=%s, size=%ld K)", marker_to_string(control_char), p, (long) length_of_incoming_file >> 10);
     1807    g_tape_posK +=
     1808        fwrite(tempblock, 1, (size_t) TAPE_BLOCK_SIZE,
     1809               g_tape_stream) / 1024;
     1810    mr_asprintf(tmp, "%s (fname=%s, size=%ld K)",
     1811            marker_to_string(control_char), p,
     1812            (long) length_of_incoming_file >> 10);
     1813    log_msg(6, tmp);
     1814    mr_free(tmp);
    17821815    return (0);
    17831816}
     
    17991832void wrong_marker(int should_be, int it_is)
    18001833{
    1801     log_to_screen("Wrong marker! (Should be %s, is actually %s)", marker_to_string(should_be), marker_to_string(it_is));
     1834    /*@ buffer ***************************************************** */
     1835    char *tmp = NULL;
     1836
     1837
     1838    /*@ end vars *************************************************** */
     1839    mr_asprintf(tmp, "Wrong marker! (Should be %s, is actually %s)", marker_to_string(should_be), marker_to_string(it_is));
     1840    log_to_screen(tmp);
     1841    mr_free(tmp);
    18021842}
    18031843
Note: See TracChangeset for help on using the changeset viewer.