Changeset 2316 in MondoRescue for branches/2.2.10/mondo/src/mondorestore


Ignore:
Timestamp:
Aug 18, 2009, 2:34:29 PM (16 years ago)
Author:
Bruno Cornec
Message:

r3327@localhost: bruno | 2009-08-04 00:17:46 +0200
popup_and_get_string and build_partition_name now return an allocated string

Location:
branches/2.2.10/mondo/src/mondorestore
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • branches/2.2.10/mondo/src/mondorestore/mondo-prep.c

    r2299 r2316  
    14571457
    14581458    /** buffers *********************************************************/
    1459     char *device_str;
     1459    char *device_str = NULL;
    14601460    char *format;
    14611461    char *tmp = NULL;
     
    14661466    assert_string_is_neither_NULL_nor_zerolength(drivename);
    14671467
    1468     malloc_string(device_str);
    14691468    malloc_string(format);
    14701469
     
    14831482    if (!pout_to_fdisk) {
    14841483        log_to_screen("Cannot call parted2fdisk to configure %s", drivename);
    1485         paranoid_free(device_str);
    14861484        paranoid_free(format);
    14871485        return (1);
     
    14891487#endif
    14901488    for (current_devno = 1; current_devno < 99; current_devno++) {
    1491         build_partition_name(device_str, drivename, current_devno);
     1489        device_str = build_partition_name(drivename, current_devno);
    14921490        lino = find_device_in_mountlist(mountlist, device_str);
    14931491
     
    15181516                    }
    15191517                    mr_free(command);
    1520                     paranoid_free(device_str);
     1518                    mr_free(device_str);
    15211519                    paranoid_free(format);
    15221520                    return r;
     
    15471545                }
    15481546            } else {
     1547                mr_free(device_str);
    15491548                continue;
    15501549            }
    15511550#else
     1551            mr_free(device_str);
    15521552            continue;
    15531553#endif
     
    16061606            log_to_screen
    16071607                ("You must leave at least one partition spare as the Extended partition.");
    1608             paranoid_free(device_str);
     1608            mr_free(device_str);
    16091609            paranoid_free(format);
    16101610            return (1);
     
    16271627        }
    16281628#endif
     1629        mr_free(device_str);
    16291630
    16301631        previous_devno = current_devno;
     
    16661667        }
    16671668    }
    1668     paranoid_free(device_str);
    16691669    paranoid_free(format);
    16701670    return (retval);
     
    16901690    /** buffers **********************************************************/
    16911691    char *program = NULL;
    1692     char *partition_name;
     1692    char *partition_name = NULL;
    16931693    char *tmp = NULL;
    16941694    char *output = NULL;
     
    17011701    /** end ***************************************************************/
    17021702
    1703     malloc_string(partition_name);
    1704 
    17051703    assert_string_is_neither_NULL_nor_zerolength(drive);
    17061704    assert(format != NULL);
     
    17141712        mr_free(tmp);
    17151713
    1716         paranoid_free(partition_name);
    17171714        return (0);
    17181715    }
    1719     build_partition_name(partition_name, drive, partno);
     1716    partition_name = build_partition_name(drive, partno);
    17201717    if (partsize <= 0) {
    17211718        mr_asprintf(&tmp, "Partitioning device %s (max size)", partition_name);
     
    17311728        log_to_screen(tmp);
    17321729        mr_free(tmp);
    1733         paranoid_free(partition_name);
     1730        mr_free(partition_name);
    17341731        return (1);
    17351732    }
     
    17491746            if (partno == 5) {
    17501747                if (prev_partno >= 4) {
    1751                     log_to_screen
    1752                         ("You need to leave at least one partition free, for 'extended/logical'");
    1753                     paranoid_free(partition_name);
     1748                    log_to_screen("You need to leave at least one partition free, for 'extended/logical'");
     1749                    mr_free(partition_name);
    17541750                    paranoid_free(output);
    17551751                    return (1);
     
    17761772    log_it(tmp);
    17771773    mr_free(tmp);
     1774
    17781775    log_it("---fdisk command---");
    17791776    log_it(output);
     
    18671864    }
    18681865    mr_free(program);
     1866    mr_free(partition_name);
    18691867    paranoid_free(output);
    18701868
    18711869    g_current_progress++;
    18721870    log_it("partition_device() --- leaving");
    1873     paranoid_free(partition_name);
    18741871    return (retval);
    18751872}
     
    19791976{
    19801977    /** buffers *********************************************************/
    1981     char *partition;
     1978    char *partition = NULL;
    19821979    char *command = NULL;
    19831980    char *output = NULL;
    19841981    char *tmp = NULL;
    1985     char *partcode;
     1982    char *partcode = NULL;
    19861983
    19871984    /** pointers *********************************************************/
     
    19971994    assert(format != NULL);
    19981995
    1999     malloc_string(partition);
    2000     malloc_string(partcode);
    2001 
    2002     build_partition_name(partition, drive, partno);
     1996    partition = build_partition_name(drive, partno);
    20031997    p = (char *) strrchr(partition, '/');
    20041998    if (strcmp(format, "swap") == 0) {
    2005         strcpy(partcode, "82");
     1999        mr_asprintf(&partcode, "82");
    20062000    } else if (strcmp(format, "vfat") == 0) {
    20072001        if (partsize / 1024 > 8192) {
    2008             strcpy(partcode, "c");
     2002            mr_asprintf(&partcode, "c");
    20092003        } else {
    2010             strcpy(partcode, "b");
     2004            mr_asprintf(&partcode, "b");
    20112005        }
    20122006    } else if (strcmp(format, "ext2") == 0
     
    20162010               || strcmp(format, "xfs") == 0
    20172011               || strcmp(format, "jfs") == 0) {
    2018         strcpy(partcode, "83");
     2012        mr_asprintf(&partcode, "83");
    20192013    } else if (strcmp(format, "minix") == 0) {
    2020         strcpy(partcode, "81");
     2014        mr_asprintf(&partcode, "81");
    20212015    } else if (strcmp(format, "vmfs3") == 0) {
    2022         strcpy(partcode, "fb");
     2016        mr_asprintf(&partcode, "fb");
    20232017    } else if (strcmp(format, "vmkcore") == 0) {
    2024         strcpy(partcode, "fc");
     2018        mr_asprintf(&partcode, "fc");
    20252019    } else if (strcmp(format, "raid") == 0) {
    2026         strcpy(partcode, "fd");
     2020        mr_asprintf(&partcode, "fd");
    20272021    } else if (strcmp(format, "ntfs") == 0) {
    2028         strcpy(partcode, "7");
     2022        mr_asprintf(&partcode, "7");
    20292023    } else if ((strcmp(format, "ufs") == 0)
    20302024               || (strcmp(format, "ffs") == 0)) {   /* raid autodetect */
    2031         strcpy(partcode, "a5");
     2025        mr_asprintf(&partcode, "a5");
    20322026    } else if (strcmp(format, "lvm") == 0) {
    2033         strcpy(partcode, "8e");
     2027        mr_asprintf(&partcode, "8e");
    20342028    } else if (format[0] == '\0') { /* LVM physical partition */
    2035         partcode[0] = '\0';
     2029        mr_asprintf(&partcode, "");
    20362030    } else if (strlen(format) >= 1 && strlen(format) <= 2) {
    2037         strcpy(partcode, format);
     2031        mr_asprintf(&partcode, format);
    20382032    } else {
    20392033        /* probably an image */
     
    20422036        mr_free(tmp);
    20432037#ifdef __FreeBSD__
    2044         strcpy(partcode, format);   // was a5
     2038        mr_asprintf(&partcode, format); // was a5
    20452039#else
    2046         strcpy(partcode, format);   // was 83
     2040        mr_asprintf(&partcode, format); // was 83
    20472041#endif
    20482042    }
    20492043    log_msg(1, tmp, "Setting %s's type to %s (%s)", partition, format, partcode);
    2050     if (partcode[0] != '\0' && strcmp(partcode, "83")) {    /* no need to set type if 83: 83 is default */
     2044    mr_free(partition);
     2045
     2046    if (partcode != NULL && strcmp(partcode, "83")) {   /* no need to set type if 83: 83 is default */
    20512047
    20522048        if (pout_to_fdisk) {
     
    21042100    }
    21052101
    2106     paranoid_free(partition);
    2107     paranoid_free(partcode);
    2108 
     2102    mr_free(partcode);
    21092103    return (res);
    21102104}
  • branches/2.2.10/mondo/src/mondorestore/mondo-rstr-newt.c

    r2314 r2316  
    1212#include "mondo-rstr-newt.h"
    1313#include "mr_mem.h"
     14#include "mr_str.h"
    1415
    1516//static char cvsid[] = "$Id$";
     
    255256{
    256257
    257     /** buffers ***********************************************************/
    258     char sz_out[MAX_STR_LEN];
    259 
    260258    /** int ****************************************************************/
    261259    int items = 0;
    262260    int i = 0;
    263261
     262    char *p = NULL;
     263
    264264    assert(raidrec != NULL);
    265265
    266     sz_out[0] = '\0';
    267     if (popup_and_get_string
    268         ("Add variable", "Enter the name of the variable to add", sz_out,
    269          MAX_STR_LEN)) {
    270         strip_spaces(sz_out);
     266    p = popup_and_get_string("Add variable", "Enter the name of the variable to add", "");
     267    if (p != NULL) {
     268        mr_strip_spaces(p);
    271269        items = raidrec->additional_vars.entries;
    272270        for (i = 0;
    273271             i < items
    274              && strcmp(raidrec->additional_vars.el[i].label, sz_out); i++);
     272             && strcmp(raidrec->additional_vars.el[i].label, p); i++);
    275273        if (i < items) {
    276274            popup_and_OK
    277275                ("No need to add that variable. It is already listed here.");
    278276        } else {
    279             strcpy(raidrec->additional_vars.el[items].label, sz_out);
     277            strcpy(raidrec->additional_vars.el[items].label, p);
    280278            edit_varslist_entry(raidrec, items);
    281279            raidrec->additional_vars.entries = ++items;
    282280        }
    283281    }
     282    mr_free(p);
    284283}
    285284#endif
     
    464463
    465464    /** int ***************************************************************/
    466     int res = 0;
    467465    int out = 0;
     466    int i = 0;
    468467
    469468    /** buffers ***********************************************************/
    470     char tmp[MAX_STR_LEN];
     469    char *tmp = NULL;
     470    char *p = NULL;
     471    char *q = NULL;
    471472    char *prompt = NULL;
    472     char *sz = NULL;
    473473
    474474    mr_asprintf(&prompt, "Please enter the RAID level you want. (concat, striped, raid5)");
    475475    if (raidrec->raidlevel == -1) {
    476         strcpy(tmp, "concat");
     476        mr_asprintf(&tmp, "concat");
    477477    } else if (raidrec->raidlevel == 0) {
    478         strcpy(tmp, "striped");
     478        mr_asprintf(&tmp, "striped");
    479479    } else {
    480         sprintf(tmp, "raid%i", raidrec->raidlevel);
     480        mr_asprintf(&tmp, "raid%i", raidrec->raidlevel);
    481481    }
    482482    for (out = 999; out == 999;) {
    483         res = popup_and_get_string("Specify RAID level", prompt, tmp, 10);
    484         if (!res) {
     483        p = popup_and_get_string("Specify RAID level", prompt, tmp);
     484        if (p == NULL) {
     485            mr_free(tmp);
     486            mr_free(prompt);
    485487            mr_free(prompt);
    486488            return;
    487489        }
    488         strip_spaces(tmp);
    489         if (tmp[0] == '[' && tmp[strlen(tmp) - 1] == ']') {
    490             mr_asprintf(&sz, "%s", tmp);
    491             strncpy(tmp, sz + 1, strlen(sz) - 2);
    492             tmp[strlen(sz) - 2] = '\0';
     490        mr_strip_spaces(p);
     491        /* Suppress brakets at each hend */
     492        if (p[0] == '[' && p[strlen(p) - 1] == ']') {
     493            q = p+1;
     494            i = 0;
     495            while (*q != ']') {
     496                p[i] = *q;
     497                i++;
     498                q++;
     499            }
     500            p[i] = '\0';
    493501            mr_free(sz);
    494502        }
    495         if (!strcmp(tmp, "concat")) {
     503        if (!strcmp(p, "concat")) {
    496504            out = -1;
    497         } else if (!strcmp(tmp, "striped")) {
     505        } else if (!strcmp(p, "striped")) {
    498506            out = 0;
    499         } else if (!strcmp(tmp, "raid5")) {
     507        } else if (!strcmp(p, "raid5")) {
    500508            out = 5;
    501509        }
    502         log_it(tmp);
     510        log_it("Raid level : %s",p);
     511        mr_free(p);
     512
    503513        if (is_this_raid_personality_registered(out)) {
    504             log_it
    505                 ("Groovy. You've picked a RAID personality which is registered.");
     514            log_it("Groovy. You've picked a RAID personality which is registered.");
    506515        } else {
    507             if (ask_me_yes_or_no
    508                 ("You have chosen a RAID personality which is not registered with the kernel. Make another selection?"))
     516            if (ask_me_yes_or_no("You have chosen a RAID personality which is not registered with the kernel. Make another selection?"))
    509517            {
    510518                out = 999;
     
    512520        }
    513521    }
     522    mr_free(tmp);
    514523    mr_free(prompt);
     524
    515525    raidrec->raidlevel = out;
    516526#else
    517527    /** buffers ***********************************************************/
    518     char tmp[MAX_STR_LEN];
     528    char *tmp = NULL;
    519529    char *personalities = NULL;
    520530    char *prompt = NULL;
    521     char *sz = NULL;
    522     int out = 0, res = 0;
     531    char *p = NULL;
     532    char *q = NULL;
     533    int out = 0;
     534    int i = 0;
    523535
    524536
    525537    assert(raidrec != NULL);
    526     system
    527         ("grep Pers /proc/mdstat > /tmp/raid-personalities.txt 2> /dev/null");
     538
     539    system("grep Pers /proc/mdstat > /tmp/raid-personalities.txt 2> /dev/null");
    528540    mr_asprintf(&personalities, "%s", last_line_of_file("/tmp/raid-personalities.txt"));
    529541    mr_asprintf(&prompt, "Please enter the RAID level you want. %s", personalities);
     
    531543
    532544    if (raidrec->raid_level == -1) {
    533         strcpy(tmp, "linear");
     545        mr_asprintf(&tmp, "linear");
    534546    } else {
    535         sprintf(tmp, "%d", raidrec->raid_level);
     547        mr_asprintf(&tmp, "%d", raidrec->raid_level);
    536548    }
    537549    for (out = 999;
    538550         out != -1 && out != 0 && out != 1 && out != 4 && out != 5
    539551         && out != 10;) {
    540         res = popup_and_get_string("Specify RAID level", prompt, tmp, 10);
    541         if (!res) {
     552        p = popup_and_get_string("Specify RAID level", prompt, tmp);
     553
     554        if (p == NULL) {
     555            mr_free(tmp);
     556            mr_free(prompt);
    542557            mr_free(prompt);
    543558            return;
    544559        }
    545         strip_spaces(tmp);
    546         if (tmp[0] == '[' && tmp[strlen(tmp) - 1] == ']') {
    547             mr_asprintf(&sz, "%s", tmp);
    548             strncpy(tmp, sz + 1, strlen(sz) - 2);
    549             tmp[strlen(sz) - 2] = '\0';
     560        mr_strip_spaces(p);
     561        if (p[0] == '[' && p[strlen(p) - 1] == ']') {
     562            q = p+1;
     563            i = 0;
     564            while (*q != ']') {
     565                p[i] = *q;
     566                i++;
     567                q++;
     568            }
     569            p[i] = '\0';
    550570            mr_free(sz);
    551571        }
    552         if (!strcmp(tmp, "linear")) {
     572        if (!strcmp(p, "linear")) {
    553573            out = -1;
    554         } else if (!strncmp(tmp, "raid", 4)) {
    555             out = atoi(tmp + 4);
     574        } else if (!strncmp(p, "raid", 4)) {
     575            out = atoi(p + 4);
    556576        } else {
    557             out = atoi(tmp);
    558         }
    559         log_it(tmp);
     577            out = atoi(p);
     578        }
     579        log_it("Raid level : %s",p);
    560580        if (is_this_raid_personality_registered(out)) {
    561             log_it
    562                 ("Groovy. You've picked a RAID personality which is registered.");
     581            log_it("Groovy. You've picked a RAID personality which is registered.");
    563582        } else {
    564             if (ask_me_yes_or_no
    565                 ("You have chosen a RAID personality which is not registered with the kernel. Make another selection?"))
    566             {
     583            if (ask_me_yes_or_no("You have chosen a RAID personality which is not registered with the kernel. Make another selection?")) {
    567584                out = 999;
    568585            }
    569586        }
    570587    }
     588    mr_free(tmp);
    571589    mr_free(prompt);
    572590    raidrec->raid_level = out;
     
    16961714    int currline_a, currline_u;
    16971715
     1716    char *p = NULL;
     1717
    16981718    struct mountlist_itself *unallocparts;
    16991719
     
    18281848            choose_raid_level(raidrec);
    18291849        } else if (b_res == bStripeSize) {
    1830             char tmp[64];
    1831             sprintf(tmp, "%i", raidrec->stripesize);
    1832             if (popup_and_get_string
    1833                 ("Stripe size",
    1834                  "Please enter the stripe size in kilobytes.", tmp, 20)) {
    1835                 raidrec->stripesize = atoi(tmp);
     1850            char *tmp = NULL;
     1851
     1852            mr_asprintf(&tmp, "%i", raidrec->stripesize);
     1853            p = popup_and_get_string("Stripe size", "Please enter the stripe size in kilobytes.", tmp);
     1854            mr_free(tmp);
     1855
     1856            if (p != NULL) {
     1857                raidrec->stripesize = atoi(p);
    18361858            }
     1859            mr_free(p);
    18371860        } else if ((b_res == bAlloc) || (b_res == unallocListbox)) {
    18381861            if (currline_u <= unallocparts->entries)
     
    18681891
    18691892    /** buffers ***********************************************************/
    1870     char header[MAX_STR_LEN];
    1871     char comment[MAX_STR_LEN];
    1872     char sz_out[MAX_STR_LEN];
     1893    char *header = NULL;
     1894    char *comment = NULL;
     1895    char *sz_out = NULL;
     1896    char *p = NULL;
    18731897
    18741898    assert(raidrec != 0);
    18751899    assert(lino >= 0);
    18761900
    1877     strcpy(sz_out, raidrec->additional_vars.el[lino].value);
    1878     sprintf(header, "Edit %s", raidrec->additional_vars.el[lino].label);
    1879     sprintf(comment, "Please set %s's value (currently '%s')",
    1880             raidrec->additional_vars.el[lino].label, sz_out);
    1881     if (popup_and_get_string(header, comment, sz_out, MAX_STR_LEN)) {
    1882         strip_spaces(sz_out);
    1883         strcpy(raidrec->additional_vars.el[lino].value, sz_out);
    1884     }
     1901    mr_asprintf(&sz_out, "%s", raidrec->additional_vars.el[lino].value);
     1902    mr_asprintf(&header, "Edit %s", raidrec->additional_vars.el[lino].label);
     1903    mr_asprintf(&comment, "Please set %s's value (currently '%s')", raidrec->additional_vars.el[lino].label, sz_out);
     1904    p = popup_and_get_string(header, comment, sz_out);
     1905    if (p != NULL) {
     1906        mr_strip_spaces(p);
     1907        strcpy(raidrec->additional_vars.el[lino].value, p);
     1908    }
     1909    mr_free(p);
    18851910}
    18861911
     
    22422267 * @return TRUE if OK was pressed, FALSE otherwise.
    22432268 */
    2244 bool
    2245 get_isodir_info(char *isodir_device, char *isodir_format,
    2246                 char *isodir_path, bool nuke_me_please)
    2247 {
     2269bool get_isodir_info(char *isodir_device, char *isodir_format, char *isodir_path, bool nuke_me_please)
     2270{
     2271
     2272    char *p = NULL;
     2273    char *q = NULL;
     2274    char *r = NULL;
     2275    char *idev = NULL;
     2276    bool ret = FALSE;       /* Should be false by default, and modfiy if conditions respected */
    22482277
    22492278    /** initialize ********************************************************/
    22502279
    22512280    assert(isodir_device != NULL);
    2252     assert(isodir_format != NULL);
    22532281    assert(isodir_path != NULL);
    22542282
    22552283    log_it("isodir_path = %s", isodir_path);
    2256     isodir_format[0] = '\0';
    22572284    if (isodir_device[0] == '\0') {
    2258         strcpy(isodir_device, "/dev/");
    2259     }
     2285        mr_asprintf(&idev, "/dev/");
     2286    } else {
     2287        mr_asprintf(&idev, "%s", isodir_device);
     2288    }
     2289
    22602290    if (isodir_path[0] == '\0') {
    22612291        strcpy(isodir_path, "/");
    22622292    }
    22632293    if (does_file_exist("/tmp/NFS-SERVER-PATH")) {
    2264         strcpy(isodir_device, last_line_of_file("/tmp/NFS-SERVER-MOUNT"));
    2265         strcpy(isodir_format, "nfs");
     2294        mr_free(idev);
     2295        mr_asprintf(&idev, "%s", last_line_of_file("/tmp/NFS-SERVER-MOUNT"));
     2296        mr_asprintf(&isodir_format, "nfs");
    22662297        strcpy(isodir_path, last_line_of_file("/tmp/NFS-SERVER-PATH"));
    22672298    }
     2299
     2300    /* modify for the caller */
     2301    strcpy(isodir_device, idev);
    22682302    if (nuke_me_please) {
    2269         return (TRUE);
    2270     }
    2271 
    2272     if (popup_and_get_string
    2273         ("ISO Mode - device", "On what device do the ISO files live?",
    2274          isodir_device, MAX_STR_LEN / 4)) {
    2275         if (popup_and_get_string
    2276             ("ISO Mode - format",
    2277              "What is the disk format of the device? (Hit ENTER if you don't know.)",
    2278              isodir_format, 16)) {
    2279             if (popup_and_get_string
    2280                 ("ISO Mode - path",
    2281                  "At what path on this device can the ISO files be found?",
    2282                  isodir_path, MAX_STR_LEN / 4)) {
    2283                 strip_spaces(isodir_device);
    2284                 strip_spaces(isodir_format);
    2285                 strip_spaces(isodir_path);
    2286                 log_it("isodir_device = %s - isodir_format = %s - isodir_path = %s", isodir_device, isodir_format, isodir_path);
    2287                 return (TRUE);
     2303        ret = TRUE;
     2304    } else {
     2305        p = popup_and_get_string("ISO Mode - device", "On what device do the ISO files live?", idev);
     2306        if (p != NULL) {
     2307            q = popup_and_get_string("ISO Mode - format", "What is the disk format of the device? (Hit ENTER if you don't know.)", isodir_format);
     2308            mr_free(isodir_format);
     2309   
     2310            if (q != NULL) {
     2311                r = popup_and_get_string("ISO Mode - path", "At what path on this device can the ISO files be found?", isodir_path);
     2312                if (r != NULL) {
     2313                    mr_strip_spaces(p);
     2314                    mr_strip_spaces(q);
     2315                    mr_strip_spaces(r);
     2316
     2317                    isodir_format = q;
     2318   
     2319                    /* modify for the caller */
     2320                    strcpy(isodir_device, p);
     2321                    strcpy(isodir_path, r);
     2322                    log_it("isodir_device = %s - isodir_format = %s - isodir_path = %s", isodir_device, isodir_format, isodir_path);
     2323                    mr_free(r);
     2324   
     2325                    ret = TRUE;
     2326                }
    22882327            }
    22892328        }
    2290     }
    2291     return (FALSE);
     2329        mr_free(p);
     2330    }
     2331    mr_free(idev);
     2332    mr_free(isodir_format);
     2333    return(ret);
    22922334}
    22932335
     
    27002742    /** buffers **********************************************************/
    27012743    void *keylist[ARBITRARY_MAXIMUM];
    2702     char *tmp;
    2703     char *help_text;
    2704     char *title_of_window;
    2705     char *sz_res;
    2706     char *header_text;
     2744    char *tmp = NULL;
     2745    char *help_text = NULL;
     2746    char *title_of_window = NULL;
     2747    char *sz_res = NULL;
     2748    char *header_text = NULL;
     2749    char *p = NULL;
    27072750
    27082751  /** int **************************************************************/
     
    27172760
    27182761    log_it("malloc'ing");
    2719     malloc_string(tmp);
    2720     malloc_string(help_text);
    2721     malloc_string(title_of_window);
    2722     malloc_string(sz_res);
    2723     malloc_string(header_text);
    2724     if (!(bkp_raidrec = malloc(sizeof(struct raid_device_record)))) {
    2725         fatal_error("Cannot malloc space for raidrec");
    2726     }
    2727     if (!(bkp_disklist = malloc(sizeof(struct list_of_disks)))) {
    2728         fatal_error("Cannot malloc space for disklist");
    2729     }
    2730     if (!(bkp_raidlist = malloc(sizeof(struct raidlist_itself)))) {
    2731         fatal_error("Cannot malloc space for raidlist");
    2732     }
    2733     if (!
    2734         (unallocated_raid_partitions =
    2735          malloc(sizeof(struct mountlist_itself)))) {
    2736         fatal_error("Cannot malloc space for unallocated_raid_partitions");
    2737     }
    2738 
    2739     memcpy((void *) bkp_raidlist, (void *) raidlist,
    2740            sizeof(struct raidlist_itself));
    2741     memcpy((void *) bkp_raidrec, (void *) raidrec,
    2742            sizeof(struct raid_device_record));
    2743     memcpy((void *) bkp_disklist, (void *) disklist,
    2744            sizeof(struct list_of_disks));
     2762    bkp_raidrec = mr_malloc(sizeof(struct raid_device_record));
     2763    bkp_disklist = mr_malloc(sizeof(struct list_of_disks));
     2764    bkp_raidlist = mr_malloc(sizeof(struct raidlist_itself));
     2765    unallocated_raid_partitions = mr_malloc(sizeof(struct mountlist_itself));
     2766
     2767    memcpy((void *) bkp_raidlist, (void *) raidlist, sizeof(struct raidlist_itself));
     2768    memcpy((void *) bkp_raidrec, (void *) raidrec, sizeof(struct raid_device_record));
     2769    memcpy((void *) bkp_disklist, (void *) disklist, sizeof(struct list_of_disks));
    27452770
    27462771    log_it("Post-malloc");
    2747     strcpy(help_text,
    2748            "   Edit this RAID device's list of partitions. Choose OK or Cancel when done.");
    2749     sprintf(header_text, "%-24s    %s", "Device", "Index");
    2750     sprintf(title_of_window, "%s contains...", raidrec->raid_device);
     2772    mr_asprintf(&help_text, "   Edit this RAID device's list of partitions. Choose OK or Cancel when done.");
     2773    mr_asprintf(&header_text, "%-24s    %s", "Device", "Index");
     2774    mr_asprintf(&title_of_window, "%s contains...", raidrec->raid_device);
    27512775    newtPushHelpLine(help_text);
    27522776    for (b_res = (newtComponent) 12345; b_res != bOK && b_res != bCancel;) {
     
    28032827                    redraw_disklist(disklist, keylist, partitionsListbox);
    28042828                } else {
    2805                     sprintf(tmp, "%s's index is %d. What should it be?",
    2806                             raidrec->raid_device,
    2807                             disklist->el[currline].index);
    2808                     sprintf(sz_res, "%d", disklist->el[currline].index);
    2809                     if (popup_and_get_string("Set index", tmp, sz_res, 10)) {
     2829                    mr_asprintf(&tmp, "%s's index is %d. What should it be?", raidrec->raid_device, disklist->el[currline].index);
     2830                    mr_asprintf(&sz_res, "%d", disklist->el[currline].index);
     2831                    p = popup_and_get_string("Set index", tmp, sz_res);
     2832                    mr_free(tmp);
     2833                    if (p != NULL) {
    28102834                        disklist->el[currline].index = atoi(sz_res);
    28112835                    }
    28122836                    redraw_disklist(disklist, keylist, partitionsListbox);
     2837                    mr_free(sz_res);
    28132838                }
    28142839            }
     
    28182843    }
    28192844    newtPopHelpLine();
     2845    mr_free(help_text);
     2846    mr_free(header_text);
     2847    mr_free(title_of_window);
     2848
    28202849    if (b_res == bCancel) {
    2821         memcpy((void *) raidlist, (void *) bkp_raidlist,
    2822                sizeof(struct raidlist_itself));
    2823         memcpy((void *) raidrec, (void *) bkp_raidrec,
    2824                sizeof(struct raid_device_record));
    2825         memcpy((void *) disklist, (void *) bkp_disklist,
    2826                sizeof(struct list_of_disks));
    2827     }
    2828     paranoid_free(tmp);
    2829     paranoid_free(help_text);
    2830     paranoid_free(title_of_window);
    2831     paranoid_free(sz_res);
    2832     paranoid_free(header_text);
    2833     paranoid_free(bkp_raidrec);
    2834     paranoid_free(bkp_disklist);
    2835     paranoid_free(bkp_raidlist);
    2836     paranoid_free(unallocated_raid_partitions);
     2850        memcpy((void *) raidlist, (void *) bkp_raidlist, sizeof(struct raidlist_itself));
     2851        memcpy((void *) raidrec, (void *) bkp_raidrec, sizeof(struct raid_device_record));
     2852        memcpy((void *) disklist, (void *) bkp_disklist, sizeof(struct list_of_disks));
     2853    }
     2854    mr_free(bkp_raidrec);
     2855    mr_free(bkp_disklist);
     2856    mr_free(bkp_raidlist);
     2857    mr_free(unallocated_raid_partitions);
    28372858}
    28382859#endif
  • branches/2.2.10/mondo/src/mondorestore/mondo-rstr-newt.h

    r2202 r2316  
    159159void open_progress_form(char *, char *, char *, char *, long);
    160160void popup_and_OK(char *);
    161 bool popup_and_get_string(char *, char *, char *, int);
     161char *popup_and_get_string(char *, char *, char *);
    162162bool popup_with_buttons(char *, char *, char *);
    163163void redraw_disklist(struct list_of_disks *, void *keylist[],
  • branches/2.2.10/mondo/src/mondorestore/mondo-rstr-tools.c

    r2296 r2316  
    4242*/
    4343extern char *g_isodir_device;
    44 extern char *g_isodir_format;
    4544extern long g_current_progress, g_maximum_progress;
    4645extern char *g_biggielist_txt;  // where 'biggielist.txt' is stored, on ramdisk / tempdir;
     
    9695*/
    9796paranoid_free(g_isodir_device);
    98 paranoid_free(g_isodir_format);
    9997
    10098}
     
    264262    int retval = 0, i;
    265263    bool already_mounted = FALSE;
     264    char *isodir_format = NULL;
    266265
    267266assert(bkpinfo != NULL);
     
    281280}
    282281
    283 if (!get_isodir_info(g_isodir_device, g_isodir_format, bkpinfo->isodir, nuke_me_please)) {
     282if (!get_isodir_info(g_isodir_device, isodir_format, bkpinfo->isodir, nuke_me_please)) {
     283    mr_free(isodir_format);
    284284    return (1);
    285285}
     
    291291} else {
    292292    mr_asprintf(&mount_isodir_command, "mount %s", g_isodir_device);
    293     if (strlen(g_isodir_format) > 1) {
    294         mr_strcat(mount_isodir_command, " -t %s", g_isodir_format);
    295     }
     293    if (isodir_format) {
     294        mr_strcat(mount_isodir_command, " -t %s", isodir_format);
     295    }
     296
    296297    mr_strcat(mount_isodir_command, " -o ro %s", bkpinfo->isodir);
    297298    run_program_and_log_output("df -m", FALSE);
     
    308309    ("I have mounted the device where the ISO files are stored.");
    309310}
     311mr_free(isodir_format);
     312
    310313if (!IS_THIS_A_STREAMING_BACKUP(bkpinfo->backup_media_type)) {
    311314    mount_media();
     
    14261429  /** malloc **/
    14271430    char *command = NULL;
    1428     char *boot_device;
     1431    char *boot_device = NULL;
    14291432    char *rootdev;
    14301433    char *rootdrive;
     
    14321435    char *tmp = NULL;
    14331436    char *editor;
    1434 
    1435     int res;
    1436     int done;
    1437 
    1438     malloc_string(boot_device);
     1437    char *p = NULL;
     1438
     1439    int res = 0;
     1440    bool done;
     1441
    14391442    malloc_string(editor);
    14401443    malloc_string(rootdev);
     
    14431446    assert_string_is_neither_NULL_nor_zerolength(bd);
    14441447    strcpy(editor, find_my_editor());
    1445     strcpy(boot_device, bd);
     1448    mr_asprintf(&boot_device, "%s", bd);
    14461449
    14471450    if (offer_to_run_stabgrub
    1448         && ask_me_yes_or_no("Did you change the mountlist or cloned the system ?"))
     1451        && ask_me_yes_or_no("Did you change the mountlist or cloned the system ?")) {
    14491452        /* interactive mode */
    1450     {
    14511453        mvaddstr_and_log_it(g_currentY,
    14521454                            0,
    14531455                            "Modifying fstab, mtab, device.map and menu.lst, and running GRUB...                             ");
    14541456        for (done = FALSE; !done;) {
    1455             popup_and_get_string("Boot device",
    1456                                  "Please confirm/enter the boot device. If in doubt, try /dev/hda",
    1457                                  boot_device, MAX_STR_LEN / 4);
    1458             mr_asprintf(&command, "stabgrub-me %s", boot_device);
     1457            p = popup_and_get_string("Boot device", "Please confirm/enter the boot device. If in doubt, try /dev/hda", boot_device);
     1458            if (p == NULL) {
     1459                done = TRUE;
     1460                mr_free(p);
     1461                /* we want some warnings later on */
     1462                res = 1;
     1463                continue;
     1464            }
     1465            mr_asprintf(&command, "stabgrub-me %s", p);
     1466            mr_free(p);
     1467
    14591468            res = run_program_and_log_output(command, 1);
    14601469            mr_free(command);
     
    14941503            }
    14951504        }
    1496     } else
     1505    } else {
    14971506        /* nuke mode */
    1498     {
    14991507        if (!run_program_and_log_output("which grub-MR", FALSE)) {
    15001508            log_msg(1, "Yay! grub-MR found...");
     
    15211529        }
    15221530    }
     1531    mr_free(boot_device);
     1532
    15231533    if (res) {
    15241534        mvaddstr_and_log_it(g_currentY++, 74, "Failed.");
     
    15401550    paranoid_free(rootdrive);
    15411551    paranoid_free(conffile);
    1542     paranoid_free(boot_device);
    15431552    paranoid_free(editor);
    15441553
     
    17441753  /** malloc **/
    17451754    char *command = NULL;
    1746     char *boot_device;
     1755    char *boot_device = NULL;
    17471756    char *tmp = NULL;
    17481757    char *editor;
     1758    char *p = NULL;
    17491759    int res;
    17501760    int done;
    17511761
    1752     malloc_string(boot_device);
    17531762    malloc_string(editor);
    17541763    assert_string_is_neither_NULL_nor_zerolength(bd);
    17551764
    17561765    strcpy(editor, find_my_editor());
    1757     strcpy(boot_device, bd);
     1766    mr_asprintf(&boot_device, "%s", bd);
    17581767
    17591768    if (offer_to_hack_scripts
    1760         && ask_me_yes_or_no("Did you change the mountlist or cloned the system ?"))
     1769        && ask_me_yes_or_no("Did you change the mountlist or cloned the system ?")) {
    17611770        /* interactive mode */
    1762     {
    17631771        mvaddstr_and_log_it(g_currentY, 0,
    17641772                            "Modifying fstab and restoring MBR...                           ");
     
    17761784                }
    17771785            }
    1778             popup_and_get_string("Boot device",
    1779                                  "Please confirm/enter the boot device. If in doubt, try /dev/hda",
    1780                                  boot_device, MAX_STR_LEN / 4);
    1781             mr_asprintf(&command, "stabraw-me %s", boot_device);
     1786            p = popup_and_get_string("Boot device", "Please confirm/enter the boot device. If in doubt, try /dev/hda", boot_device);
     1787            if (p == NULL) {
     1788                done = TRUE;
     1789                mr_free(p);
     1790                /* we want some warnings later on */
     1791                res = 1;
     1792                continue;
     1793            }
     1794            mr_asprintf(&command, "stabraw-me %s", p);
     1795            mr_free(p);
     1796
    17821797            res = run_program_and_log_output(command, 3);
    17831798            mr_free(command);
     
    17891804            }
    17901805        }
    1791     } else
     1806    } else {
    17921807        /* nuke mode */
    1793     {
    17941808        mr_asprintf(&command, "raw-MR %s /tmp/mountlist.txt", boot_device);
    17951809        log_msg(2, "run_raw_mbr() --- command='%s'", command);
     
    18001814        mr_free(command);
    18011815    }
     1816    mr_free(boot_device);
    18021817
    18031818    if (res) {
     
    18081823        mvaddstr_and_log_it(g_currentY++, 74, "Done.");
    18091824    }
    1810     paranoid_free(boot_device);
    18111825    paranoid_free(editor);
    18121826    return (res);
     
    18391853    malloc_string(g_mondo_home);
    18401854    malloc_string(g_isodir_device);
    1841     malloc_string(g_isodir_format);
    18421855
    18431856    temppath = bkpinfo->tmpdir;
  • branches/2.2.10/mondo/src/mondorestore/mondoprep.h

    r2281 r2316  
    3333extern void close_progress_form(void);
    3434extern void popup_and_OK(char *);
    35 extern bool popup_and_get_string(char *, char *, char *, int);
     35extern char *popup_and_get_string(char *, char *, char *);
    3636extern long get_time(void);
    3737extern bool is_this_device_mounted(char *);
  • branches/2.2.10/mondo/src/mondorestore/mondorestore.c

    r2296 r2316  
    439439  /** needs malloc **********/
    440440    char *tmp;
     441    char *p = NULL;
    441442    char *tmp1 = NULL;
    442443    char *fstab_fname;
     
    470471    read_cfg_file_into_bkpinfo(g_mondo_cfg_file);
    471472    log_it("Done loading config file; resizing ML");
    472     if (bkpinfo->backup_media_type == nfs) {
    473         strcpy(tmp, bkpinfo->prefix);
    474         if (popup_and_get_string
    475             ("Prefix", "Prefix of your ISO images ?", tmp, MAX_STR_LEN / 4)) {
    476             strcpy(bkpinfo->prefix, tmp);
    477             log_msg(1, "Prefix set to %s",bkpinfo->prefix);
    478         }
    479     }
    480473
    481474#ifdef __FreeBSD__
     
    607600              gotos_suck:
    608601                strcpy(tmp, old_restpath);
    609 // (NB: %s is where your filesystem is mounted now, by default)", MNT_RESTORING);
    610                 if (popup_and_get_string
    611                     ("Restore path", "Restore files to where?", tmp,
    612                      MAX_STR_LEN / 4)) {
     602                // (NB: %s is where your filesystem is mounted now, by default)", MNT_RESTORING);
     603                p = popup_and_get_string("Restore path", "Restore files to where?", tmp);
     604                if (p != NULL) {
     605                    strcpy(tmp, p);
    613606                    if (!strcmp(tmp, "/")) {
    614607                        if (!ask_me_yes_or_no("Are you sure?")) {
     
    625618                    free_filelist(filelist);
    626619                }
     620                mr_free(p);
     621
    627622                if (!ask_me_yes_or_no
    628623                    ("Restore another subset of your backup?")) {
     
    952947  /** malloc **/
    953948    char *old_restpath;
     949    char *p = NULL;
    954950
    955951    struct mountlist_itself *mountlist = NULL;
     
    997993        save_filelist(filelist, "/tmp/selected-files.txt");
    998994        strcpy(old_restpath, bkpinfo->restore_path);
    999         if (popup_and_get_string("Restore path",
    1000                                  "Restore files to where? )",
    1001                                  bkpinfo->restore_path, MAX_STR_LEN / 4)) {
     995        p = popup_and_get_string("Restore path", "Restore files to where? )", bkpinfo->restore_path);
     996        if (p != NULL) {
     997            strcpy(bkpinfo->restore_path, p);
     998            mr_free(p);
     999
    10021000            log_it("Restoring everything");
    10031001            retval += restore_everything(filelist);
  • branches/2.2.10/mondo/src/mondorestore/mr-externs.h

    r2281 r2316  
    5959extern int partition_everything(struct mountlist_itself *);
    6060extern void popup_and_OK(char *);
    61 extern bool popup_and_get_string(char *, char *, char *, int);
     61extern char *popup_and_get_string(char *, char *, char *);
    6262extern void setup_newt_stuff(void);
    6363extern void reset_bkpinfo();
Note: See TracChangeset for help on using the changeset viewer.