Changeset 2352 in MondoRescue for branches/2.2.10/mondo/src/common


Ignore:
Timestamp:
Aug 28, 2009, 2:46:29 AM (15 years ago)
Author:
Bruno Cornec
Message:

Change inerface of evaluate_mountlist and spread_flaws_across_three_lines in order to solve bugs linked to strings management in these functions. May fix a restoration crash seen by some customers (backport from 2.2.9)

Location:
branches/2.2.10/mondo/src/common
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • branches/2.2.10/mondo/src/common/libmondo-mountlist-EXT.h

    r2202 r2352  
    11/* libmondo-mountlist-EXT.h */
    22
    3 extern int evaluate_mountlist(struct mountlist_itself *mountlist,
    4                               char *flaws_str_A, char *flaws_str_B,
    5                               char *flaws_str_C);
     3extern char *evaluate_mountlist(struct mountlist_itself *mountlist, int *res);
    64extern int find_device_in_mountlist(struct mountlist_itself *mountlist,
    75                                    char *device);
  • branches/2.2.10/mondo/src/common/libmondo-mountlist.c

    r2331 r2352  
    519519 * @see evaluate_drive_within_mountlist
    520520 */
    521 int
    522 evaluate_mountlist(struct mountlist_itself *mountlist, char *flaws_str_A,
    523                    char *flaws_str_B, char *flaws_str_C)
    524 {
     521char *evaluate_mountlist(struct mountlist_itself *mountlist, int *res) {
    525522
    526523    /*@ buffer *********************************************************** */
     
    531528    /*@ int ************************************************************** */
    532529    int i = 0;
    533     int res = 0;
    534530
    535531    /*@ initialize ******************************************************* */
    536532
     533    *res = 0;
    537534    drivelist = malloc(sizeof(struct list_of_disks));
    538535    assert(mountlist != NULL);
    539     assert(flaws_str_A != NULL);
    540     assert(flaws_str_B != NULL);
    541     assert(flaws_str_C != NULL);
    542536
    543537    mr_asprintf(flaws_str, "%s", "");
     
    556550            tmp = evaluate_drive_within_mountlist(mountlist, drivelist->el[i].device);
    557551            if (tmp == NULL) {
    558                 res++;
     552                (*res)++;
    559553            }
    560554        }
     
    567561        }
    568562    }
    569     res += look_for_duplicate_mountpoints(mountlist, flaws_str);
    570     res = spread_flaws_across_three_lines(flaws_str, flaws_str_A, flaws_str_B, flaws_str_C,res);
    571     mr_free(flaws_str);
    572     return(res);
     563    *res += look_for_duplicate_mountpoints(mountlist, flaws_str);
     564    return(flaws_str);
    573565}
    574566
  • branches/2.2.10/mondo/src/common/libmondo-mountlist.h

    r2202 r2352  
    44
    55
    6 int evaluate_mountlist(struct mountlist_itself *mountlist,
    7                        char *flaws_str_A, char *flaws_str_B,
    8                        char *flaws_str_C);
     6char *evaluate_mountlist(struct mountlist_itself *mountlist, int *res);
    97int find_device_in_mountlist(struct mountlist_itself *mountlist,
    108                             char *device);
  • branches/2.2.10/mondo/src/common/libmondo-string-EXT.h

    r2316 r2352  
    1919                         char *s);
    2020extern int special_dot_char(int i);
    21 extern bool spread_flaws_across_three_lines(char *flaws_str,
     21extern void spread_flaws_across_three_lines(char *flaws_str,
    2222                                            char *flaws_str_A,
    2323                                            char *flaws_str_B,
    24                                             char *flaws_str_C, int res);
     24                                            char *flaws_str_C);
    2525extern int strcmp_inc_numbers(char *stringA, char *stringB);
    2626extern char *strip_afio_output_line(char *input);
  • branches/2.2.10/mondo/src/common/libmondo-string.c

    r2334 r2352  
    599599 * @param flaws_str_B Where to put the second 74-or-less characters.
    600600 * @param flaws_str_C Where to put the rest.
    601  * @param res The result of the original evaluate_mountlist() operation.
    602  * @return TRUE if res == 0, FALSE otherwise.
    603  */
    604 bool
     601 */
     602void
    605603spread_flaws_across_three_lines(char *flaws_str, char *flaws_str_A,
    606                                 char *flaws_str_B, char *flaws_str_C,
    607                                 int res)
     604                                char *flaws_str_B, char *flaws_str_C)
    608605{
    609606
     
    612609
    613610    /*@ initialize ****************************************************** */
    614     assert(flaws_str_A != NULL);
    615     assert(flaws_str_B != NULL);
    616     assert(flaws_str_C != NULL);
    617611    assert(flaws_str != NULL);
    618612
    619     if (!res && !strlen(flaws_str)) {
    620         return (TRUE);
    621     }
    622613    if (strlen(flaws_str) > 0) {
    623         paranoid_free(flaws_str_A);
    624614        mr_asprintf(flaws_str_A, "%s", flaws_str + 1);
    625615    }
    626616    if (strlen(flaws_str_A) >= 74) {
    627617        for (i = 74; flaws_str_A[i] != ' '; i--);
    628         paranoid_free(flaws_str_B);
    629618        mr_asprintf(flaws_str_B, "%s", flaws_str_A + i + 1);
    630619        flaws_str_A[i] = '\0';
     
    632621    if (strlen(flaws_str_B) >= 74) {
    633622        for (i = 74; flaws_str_B[i] != ' '; i--);
    634         paranoid_free(flaws_str_C);
    635623        mr_asprintf(flaws_str_C, "%s", flaws_str_B + i + 1);
    636624        flaws_str_B[i] = '\0';
    637     }
    638     if (res) {
    639         return (FALSE);
    640     } else {
    641         return (TRUE);
    642625    }
    643626}
  • branches/2.2.10/mondo/src/common/libmondo-string.h

    r2316 r2352  
    1717char *slice_fname(long bigfileno, long sliceno, char *path, char *s);
    1818int special_dot_char(int i);
    19 bool spread_flaws_across_three_lines(char *flaws_str, char *flaws_str_A,
    20                                      char *flaws_str_B, char *flaws_str_C,
    21                                      int res);
     19void spread_flaws_across_three_lines(char *flaws_str, char *flaws_str_A,
     20                                     char *flaws_str_B, char *flaws_str_C);
    2221int strcmp_inc_numbers(char *stringA, char *stringB);
    2322char *strip_afio_output_line(char *input);
Note: See TracChangeset for help on using the changeset viewer.