Dave Dykstra
2003-Jan-14 16:25 UTC
2.5.6pre1 bombs on Sunos4 in popthelp.c on use of sprintf
2.5.6pre1 bombs on Sunos4 gcc with these errors popt/popthelp.c: In function `singleOptionDefaultValue': popt/popthelp.c:137: invalid operands to binary + popt/popthelp.c:141: invalid operands to binary + popt/popthelp.c:145: invalid operands to binary + popt/popthelp.c:149: invalid operands to binary + because it's depending on sprintf to return the number of bytes written and that doesn't happen on Sunos4. Wayne or anybody, do you have a suggested solution? The popt maintainers should also be told about that. This foible of Sunos4 is mentioned in the autoconf documentation of things to watch out for but I don't think they suggest a solution. We need to get one of these Sunos4 machines into the build farm. I know where to get one, but I had been hesitant to add machines to the build farm because of security concerns. I think the new rsync module over ssh feature will eliminate those concerns. - Dave
Dave Dykstra
2003-Jan-14 17:25 UTC
2.5.6pre1 bombs on Sunos4 in popthelp.c on use of sprintf
On Tue, Jan 14, 2003 at 10:24:04AM -0600, Dave Dykstra wrote:> 2.5.6pre1 bombs on Sunos4 gcc with these errors > popt/popthelp.c: In function `singleOptionDefaultValue': > popt/popthelp.c:137: invalid operands to binary + > popt/popthelp.c:141: invalid operands to binary + > popt/popthelp.c:145: invalid operands to binary + > popt/popthelp.c:149: invalid operands to binary + > because it's depending on sprintf to return the number of bytes written > and that doesn't happen on Sunos4.If nobody objects to the following patch, I'll put it in. It's a little slower but this is definitely not time-critical code. - Dave --- popt/popthelp.c.O Tue Jan 14 13:02:47 2003 +++ popt/popthelp.c Tue Jan 14 13:04:45 2003 @@ -134,19 +134,23 @@ case POPT_ARG_VAL: case POPT_ARG_INT: { long aLong = *((int *)opt->arg); - le += sprintf(le, "%ld", aLong); + sprintf(le, "%ld", aLong); + le += strlen(le); } break; case POPT_ARG_LONG: { long aLong = *((long *)opt->arg); - le += sprintf(le, "%ld", aLong); + sprintf(le, "%ld", aLong); + le += strlen(le); } break; case POPT_ARG_FLOAT: { double aDouble = *((float *)opt->arg); - le += sprintf(le, "%g", aDouble); + sprintf(le, "%g", aDouble); + le += strlen(le); } break; case POPT_ARG_DOUBLE: { double aDouble = *((double *)opt->arg); - le += sprintf(le, "%g", aDouble); + sprintf(le, "%g", aDouble); + le += strlen(le); } break; case POPT_ARG_STRING: { const char * s = *(const char **)opt->arg; @@ -271,7 +275,8 @@ *le++ = '='; if (negate) *le++ = '~'; /*@-formatconst@*/ - le += sprintf(le, (ops ? "0x%lx" : "%ld"), aLong); + sprintf(le, (ops ? "0x%lx" : "%ld"), aLong); + le += strlen(le); /*@=formatconst@*/ *le++ = ']'; } break;