Ignore:
Timestamp:
Mar 7, 2024, 1:55:18 PM (2 months ago)
Author:
Bruno Cornec
Message:

Change find_my_editor and find_home_of_exe to return dynamically assigned stringsi - adapt whine_if_not_found

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/3.3/mondo/src/mondorestore/mondo-rstr-tools.c

    r3854 r3866  
    405405/** malloc **/
    406406char *tmp = NULL;
     407char *tmp1 = NULL;
    407408char *command = NULL;
    408409char *mountdir = NULL;
     
    437438            mr_strcat(additional_parameters, "-o ro");
    438439        }
    439         if (find_home_of_exe("setfattr")) {
     440        if ((tmp = find_home_of_exe("setfattr")) != NULL) {
    440441            mr_strcat(additional_parameters, ",user_xattr");
    441442        }
    442         if (find_home_of_exe("setfacl")) {
     443        mr_free(tmp);
     444        if ((tmp = find_home_of_exe("setfacl")) != NULL) {
    443445            mr_strcat(additional_parameters, ",acl");
    444446        }
     447        mr_free(tmp);
    445448    }
    446449
     
    780783read_cfg_var(cfg_file, "acl", value);
    781784if (strstr(value, "TRUE")) {
    782     mr_asprintf(g_getfacl,"setfacl");
    783     log_msg(1, "We will restore ACLs");
    784     if (! find_home_of_exe("setfacl")) {
     785    if ((tmp = find_home_of_exe("setfacl")) == NULL) {
    785786        log_msg(1, "Unable to restore ACLs as no setfacl found");
    786     }
     787    } else {
     788        mr_asprintf(g_getfacl,"%s", tmp);
     789        log_msg(1, "We will restore ACLs");
     790    }
     791    mr_free(tmp);
    787792}
    788793read_cfg_var(cfg_file, "xattr", value);
    789794if (strstr(value, "TRUE")) {
    790     mr_asprintf(g_getfattr,"setfattr");
    791     log_msg(1, "We will restore XATTRs");
    792     if (! find_home_of_exe("setfattr")) {
     795    if ((tmp = find_home_of_exe("setfattr")) == NULL) {
    793796        log_msg(1, "Unable to restore XATTRs as no setfattr found");
    794     }
     797    } else {
     798        mr_asprintf(g_getfattr,"%s", tmp);
     799        log_msg(1, "We will restore XATTRs");
     800    }
     801    mr_free(tmp);
    795802}
    796803
     
    13901397 * Attempt to find the user's editor.
    13911398 * @return The editor found ("vi" if none could be found).
    1392  * @note The returned string points to static storage that will be overwritten with each call.
     1399 * @note The returned string points to an allocated storage that needs to be freed by caller
    13931400 */
    13941401char *find_my_editor(void) {
    13951402
    1396     static char output[MAX_STR_LEN];
    1397     if (find_home_of_exe("pico")) {
    1398         strcpy(output, "pico");
    1399     } else if (find_home_of_exe("nano")) {
    1400         strcpy(output, "nano");
    1401     } else if (find_home_of_exe("e3em")) {
    1402         strcpy(output, "e3em");
    1403     } else if (find_home_of_exe("e3vi")) {
    1404         strcpy(output, "e3vi");
    1405     } else {
    1406         strcpy(output, "vi");
    1407     }
    1408     if (!find_home_of_exe(output)) {
    1409         log_msg(2, " (find_my_editor) --- warning - %s not found", output);
     1403    char *output = NULL ;
     1404
     1405    if ((output = find_home_of_exe("pico")) == NULL) {
     1406        if ((output = find_home_of_exe("nano")) == NULL) {
     1407            if ((output = find_home_of_exe("e3em")) == NULL) {
     1408                if ((output = find_home_of_exe("e3vi")) == NULL) {
     1409                    if ((output = find_home_of_exe("vim")) == NULL) {
     1410                        output = find_home_of_exe("vi");
     1411                    }
     1412                }
     1413            }
     1414        }
     1415    }
     1416    if (output == NULL) {
     1417        log_msg(2, " (find_my_editor) --- warning - no editor found, even vi");
    14101418    }
    14111419    return (output);
     
    14591467                    popup_and_OK("The mountlist was changed. You will now edit fstab, mtab, device.map and menu.lst/grub.cfg in order to fix grub install");
    14601468                }
    1461                 if (!g_text_mode) {
    1462                     newtSuspend();
     1469                editor = find_my_editor());
     1470                if (editor == NULL) {
     1471                    popup_and_OK("No editor found. You won't be able to edit conf files");
     1472                } else {
     1473                    if (!g_text_mode) {
     1474                        newtSuspend();
     1475                    }
     1476                    mr_asprintf(tmp, "chroot %s %s /etc/fstab", MNT_RESTORING, editor);
     1477                    paranoid_system(tmp);
     1478                    mr_free(tmp);
     1479   
     1480                    mr_asprintf(tmp, "chroot %s %s /etc/mtab", MNT_RESTORING, editor);
     1481                    paranoid_system(tmp);
     1482                    mr_free(tmp);
     1483       
     1484                    if (does_file_exist(MNT_RESTORING"/boot/grub/menu.lst")) {
     1485                        mr_asprintf(tmp, "chroot %s %s /boot/grub/menu.lst", MNT_RESTORING, editor);
     1486                    } else if (does_file_exist(MNT_RESTORING"/boot/grub/grub.cfg")) {
     1487                        mr_asprintf(tmp, "chroot %s %s /boot/grub/grub.cfg", MNT_RESTORING, editor);
     1488                    } else if (does_file_exist(MNT_RESTORING"/boot/grub2/grub.cfg")) {
     1489                        mr_asprintf(tmp, "chroot %s %s /boot/grub2/grub.cfg", MNT_RESTORING, editor);
     1490                    }
     1491                    paranoid_system(tmp);
     1492                    mr_free(tmp);
     1493       
     1494                    if (does_file_exist(MNT_RESTORING"/boot/grub/device.map")) {
     1495                        mr_asprintf(tmp, "chroot %s %s /boot/grub/device.map", MNT_RESTORING, editor);
     1496                    } else if (does_file_exist(MNT_RESTORING"/boot/grub2/device.map")) {
     1497                        mr_asprintf(tmp, "chroot %s %s /boot/grub2/device.map", MNT_RESTORING, editor);
     1498                    }
     1499                    paranoid_system(tmp);
     1500                    mr_free(tmp);
     1501                    if (!g_text_mode) {
     1502                        newtResume();
     1503                    }
    14631504                }
    1464                 mr_asprintf(editor, "%s", find_my_editor());
    1465                 mr_asprintf(tmp, "chroot %s %s /etc/fstab", MNT_RESTORING, editor);
    1466                 paranoid_system(tmp);
    1467                 mr_free(tmp);
    1468 
    1469                 mr_asprintf(tmp, "chroot %s %s /etc/mtab", MNT_RESTORING, editor);
    1470                 paranoid_system(tmp);
    1471                 mr_free(tmp);
    1472    
    1473                 if (does_file_exist(MNT_RESTORING"/boot/grub/menu.lst")) {
    1474                     mr_asprintf(tmp, "chroot %s %s /boot/grub/menu.lst", MNT_RESTORING, editor);
    1475                 } else if (does_file_exist(MNT_RESTORING"/boot/grub/grub.cfg")) {
    1476                     mr_asprintf(tmp, "chroot %s %s /boot/grub/grub.cfg", MNT_RESTORING, editor);
    1477                 } else if (does_file_exist(MNT_RESTORING"/boot/grub2/grub.cfg")) {
    1478                     mr_asprintf(tmp, "chroot %s %s /boot/grub2/grub.cfg", MNT_RESTORING, editor);
    1479                 }
    1480                 paranoid_system(tmp);
    1481                 mr_free(tmp);
    1482    
    1483                 if (does_file_exist(MNT_RESTORING"/boot/grub/device.map")) {
    1484                     mr_asprintf(tmp, "chroot %s %s /boot/grub/device.map", MNT_RESTORING, editor);
    1485                 } else if (does_file_exist(MNT_RESTORING"/boot/grub2/device.map")) {
    1486                     mr_asprintf(tmp, "chroot %s %s /boot/grub2/device.map", MNT_RESTORING, editor);
    1487                 }
    1488                 paranoid_system(tmp);
    1489                 mr_free(tmp);
    14901505                mr_free(editor);
    14911506
    1492                 if (!g_text_mode) {
    1493                     newtResume();
    1494                 }
    14951507                mr_asprintf(command, "mr-stabgrub-me %s", boot_device);
    14961508                res = run_program_and_log_output(command, 1);
     
    15871599
    15881600        if (res) {
    1589             popup_and_OK
    1590                 ("You will now edit fstab and elilo.conf, to make sure they match your new mountlist.");
     1601            popup_and_OK("You will now edit fstab and elilo.conf, to make sure they match your new mountlist.");
    15911602            for (done = FALSE; !done;) {
    1592                 if (!g_text_mode) {
    1593                     newtSuspend();
     1603                editor = find_my_editor();
     1604                if (editor == NULL) {
     1605                    popup_and_OK("No editor found. You won't be able to edit conf files");
     1606                    done = TRUE;
     1607                } else {
     1608
     1609                    if (!g_text_mode) {
     1610                        newtSuspend();
     1611                    }
     1612                    mr_asprintf(tmp, "chroot %s %s /etc/fstab", MNT_RESTORING, editor);
     1613                    paranoid_system(tmp);
     1614                    mr_free(tmp);
     1615   
     1616                    mr_asprintf(tmp, "chroot %s %s /etc/elilo.conf", MNT_RESTORING, editor);
     1617                    paranoid_system(tmp);
     1618                    mr_free(tmp);
     1619                    mr_free(editor);
     1620
     1621                    if (!g_text_mode) {
     1622                        newtResume();
     1623                    }
     1624//              newtCls();
     1625                    if (ask_me_yes_or_no("Edit them again?")) {
     1626                        continue;
     1627                    }
     1628                    done = TRUE;
    15941629                }
    1595                 mr_asprintf(editor, "%s", find_my_editor());
    1596 
    1597                 mr_asprintf(tmp, "chroot %s %s /etc/fstab", MNT_RESTORING, editor);
    1598                 paranoid_system(tmp);
    1599                 mr_free(tmp);
    1600 
    1601                 mr_asprintf(tmp, "chroot %s %s /etc/elilo.conf", MNT_RESTORING, editor);
    1602                 paranoid_system(tmp);
    1603                 mr_free(tmp);
    16041630                mr_free(editor);
    1605 
    1606                 if (!g_text_mode) {
    1607                     newtResume();
    1608                 }
    1609 //              newtCls();
    1610                 if (ask_me_yes_or_no("Edit them again?")) {
    1611                     continue;
    1612                 }
    1613                 done = TRUE;
    16141631            }
    16151632        } else {
     
    16661683                ("You will now edit fstab and lilo.conf, to make sure they match your new mountlist.");
    16671684            for (done = FALSE; !done;) {
    1668                 if (!g_text_mode) {
    1669                     newtSuspend();
     1685                editor = find_my_editor();
     1686                if (editor == NULL) {
     1687                    popup_and_OK("No editor found. You won't be able to edit conf files");
     1688                } else {
     1689                    if (!g_text_mode) {
     1690                        newtSuspend();
     1691                    }
     1692                    mr_asprintf(tmp, "%s " MNT_RESTORING "/etc/fstab", editor);
     1693                    paranoid_system(tmp);
     1694                    mr_free(tmp);
     1695   
     1696                    mr_asprintf(tmp, "%s " MNT_RESTORING "/etc/lilo.conf", editor);
     1697                    paranoid_system(tmp);
     1698                    mr_free(tmp);
     1699                    mr_free(editor);
     1700   
     1701                    if (!g_text_mode) {
     1702                        newtResume();
     1703                    }
     1704//              newtCls();
     1705                    if (ask_me_yes_or_no("Edit them again?")) {
     1706                        continue;
     1707                    }
    16701708                }
    1671                 mr_asprintf(editor, "%s", find_my_editor());
    1672 
    1673                 mr_asprintf(tmp, "%s " MNT_RESTORING "/etc/fstab", editor);
    1674                 paranoid_system(tmp);
    1675                 mr_free(tmp);
    1676 
    1677                 mr_asprintf(tmp, "%s " MNT_RESTORING "/etc/lilo.conf", editor);
    1678                 paranoid_system(tmp);
    1679                 mr_free(tmp);
    16801709                mr_free(editor);
    16811710
    1682                 if (!g_text_mode) {
    1683                     newtResume();
    1684                 }
    1685 //              newtCls();
    1686                 if (ask_me_yes_or_no("Edit them again?")) {
    1687                     continue;
    1688                 }
    1689                 res =
    1690                     run_program_and_log_output("chroot " MNT_RESTORING
    1691                                                " lilo -L", 3);
     1711                res = run_program_and_log_output("chroot " MNT_RESTORING " lilo -L", 3);
    16921712                if (res) {
    1693                     res =
    1694                         run_program_and_log_output("chroot " MNT_RESTORING
    1695                                                    " lilo", 3);
     1713                    res = run_program_and_log_output("chroot " MNT_RESTORING " lilo", 3);
    16961714                }
    16971715                if (res) {
    1698                     done =
    1699                         ask_me_yes_or_no
    1700                         ("LILO failed. Re-edit system files?");
     1716                    done = ask_me_yes_or_no("LILO failed. Re-edit system files?");
    17011717                } else {
    17021718                    done = TRUE;
     
    17681784        mvaddstr_and_log_it(g_currentY, 0, "Modifying fstab and restoring MBR...                           ");
    17691785        for (done = FALSE; !done;) {
    1770             if (!run_program_and_log_output("which vi", FALSE)) {
    1771                 popup_and_OK("You will now edit fstab");
     1786            popup_and_OK("You will now edit fstab");
     1787            editor = find_my_editor());
     1788            if (editor == NULL) {
     1789                popup_and_OK("No editor found. You won't be able to edit conf files");
     1790            } else {
    17721791                if (!g_text_mode) {
    17731792                    newtSuspend();
    17741793                }
    1775                 mr_asprintf(editor, "%s", find_my_editor());
    17761794                mr_asprintf(tmp, "%s " MNT_RESTORING "/etc/fstab", editor);
    1777                 mr_free(editor);
    17781795
    17791796                paranoid_system(tmp);
     
    17831800                }
    17841801            }
     1802            mr_free(editor);
     1803
    17851804            popup_and_get_string("Boot device", "Please confirm/enter the boot device. If in doubt, try /dev/hda", boot_device, MAX_STR_LEN / 4);
    17861805            mr_asprintf(command, "mr-stabraw-me %s", boot_device);
Note: See TracChangeset for help on using the changeset viewer.