diff options
Diffstat (limited to 'dev-libs/foma/files/foma-0.10.0_p20220612-fix-incompatible-function-pointer-types.patch')
-rw-r--r-- | dev-libs/foma/files/foma-0.10.0_p20220612-fix-incompatible-function-pointer-types.patch | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/dev-libs/foma/files/foma-0.10.0_p20220612-fix-incompatible-function-pointer-types.patch b/dev-libs/foma/files/foma-0.10.0_p20220612-fix-incompatible-function-pointer-types.patch new file mode 100644 index 000000000000..ca6e3c3a8f76 --- /dev/null +++ b/dev-libs/foma/files/foma-0.10.0_p20220612-fix-incompatible-function-pointer-types.patch @@ -0,0 +1,71 @@ +https://bugs.gentoo.org/930501 + +--- a/foma/sigma.c ++++ b/foma/sigma.c +@@ -338,8 +338,8 @@ struct ssort { + int number; + }; + +-int ssortcmp(struct ssort *a, struct ssort *b) { +- return(strcmp(a->symbol, b->symbol)); ++int ssortcmp(const void *a, const void *b) { ++ return(strcmp(((struct ssort*) a)->symbol, ((struct ssort*)b)->symbol)); + } + + struct sigma *sigma_copy(struct sigma *sigma) { +@@ -369,7 +369,6 @@ struct sigma *sigma_copy(struct sigma *sigma) { + /* and sorts the sigma based on the symbol string contents */ + + int sigma_sort(struct fsm *net) { +- int(*comp)() = ssortcmp; + int size, i, max, *replacearray; + struct ssort *ssort; + struct sigma *sigma; +@@ -387,7 +386,7 @@ int sigma_sort(struct fsm *net) { + } + } + max = i; +- qsort(ssort, max, sizeof(struct ssort), comp); ++ qsort(ssort, max, sizeof(struct ssort), ssortcmp); + replacearray = malloc(sizeof(int)*(size+3)); + for (i=0; i<max; i++) + replacearray[(ssort+i)->number] = i+3; +--- a/foma/structures.c ++++ b/foma/structures.c +@@ -46,20 +46,18 @@ void *fsm_get_option(unsigned long long option) { + return NULL; + } + +-int linesortcompin(struct fsm_state *a, struct fsm_state *b) { +- return (a->in - b->in); ++int linesortcompin(const void *a, const void *b) { ++ return (((struct fsm_state*)a)->in - ((struct fsm_state*)b)->in); + } + +-int linesortcompout(struct fsm_state *a, struct fsm_state *b) { +- return (a->out - b->out); ++int linesortcompout(const void *a, const void *b) { ++ return (((struct fsm_state*)a)->out - ((struct fsm_state*)b)->out); + } + + void fsm_sort_arcs(struct fsm *net, int direction) { + /* direction 1 = in, direction = 2, out */ + struct fsm_state *fsm; + int i, lasthead, numlines; +- int(*scin)() = linesortcompin; +- int(*scout)() = linesortcompout; + fsm = net->states; + for (i=0, numlines = 0, lasthead = 0 ; (fsm+i)->state_no != -1; i++) { + if ((fsm+i)->state_no != (fsm+i+1)->state_no || (fsm+i)->target == -1) { +@@ -70,9 +68,9 @@ void fsm_sort_arcs(struct fsm *net, int direction) { + if (numlines > 1) { + /* Sort, set numlines = 0 */ + if (direction == 1) +- qsort(fsm+lasthead, numlines, sizeof(struct fsm_state), scin); ++ qsort(fsm+lasthead, numlines, sizeof(struct fsm_state), linesortcompin); + else +- qsort(fsm+lasthead, numlines, sizeof(struct fsm_state), scout); ++ qsort(fsm+lasthead, numlines, sizeof(struct fsm_state), linesortcompout); + } + numlines = 0; + lasthead = i + 1; |