Greetings! Great! If you could just please confirm with a fresh git pull, up to commit BUGGY_MAXIMUM_SSCANF_LENGTH, then we're ready for release. Please let me know as soon as its convenient if possible.
Take care, David Billinghurst <dbmax...@gmail.com> writes: > This change works for me, and enables maxima to pass testsuite. > > On 5/09/2014 1:30 AM, Camm Maguire wrote: >> Greetings! Just a quick note, the following is better than that which >> is committed, as it will catch exponents too. If you could try >> replacing the #ifdef BROKEN_WINDOWS_SSCANF in read.d with >> >> #ifdef BROKEN_WINDOWS_SSCANF >> if (q-s>250) { >> memmove(s+250,q,strlen(q)+1); >> q=s+250; >> } >> #endif >> >> placed right *before* the call to sscanf and report the results, that >> would be great. If this works, I'll get the 250 constant from the >> configure check and commit this instead. >> >> Take care, >> >> David Billinghurst <dbmax...@gmail.com> writes: >> >>> On 4/09/2014 11:23 AM, Camm Maguire wrote: >>>> Greetings! >>>> >>>> Could you please try commenting out the following line of o/read.d: >>>> >>>> if (n!=1||s[m]) return OBJNULL; >>> This works and prints 2.718281828459045 on the setq example >>> >>>> If this works, then try replacing it with >>>> >>>> printf("%s %d %d %lf\n",s,n,m,f);fflush(stdout); >>>> >>>> recompile, and try your setq example again. Your C library >>>> implementation of sscanf cannot correctly process >>>> >>>> n=sscanf(s,"%lf%n",&f,&m); >>>> >>>> and so far is the only such system that I have found. >>> The sscanf function stops at character 349, so next character is not >>> the null terminating the string. >>> As shown, the strtod function works, so this may be an option. >>> >>> mingw uses the microsoft MSVCRT library for I/O. I have done a search >>> and can't find mention of this bug. >>> >>> Here is a self contained test case. >>> >>> #include <stdio.h> >>> #include <stdlib.h> >>> >>> int main () { >>> char s[]= "\ >>> 2.718281828459045235360287471352662497757247093699\ >>> 95957496696762772407663035354759457138217852516642\ >>> 74274663919320030599218174135966290435729003342952\ >>> 60595630738132328627943490763233829880753195251019\ >>> 01157383418793070215408914993488416750924476146066\ >>> 80822648001684774118537423454424371075390777449920\ >>> 69551702761838606261331384583000752044933826560297\ >>> 60673711320070932870912744374704723069697720931014\ >>> 16928368190255151086574637721112523897844250569536\ >>> 96770785449969967946864454905987931636889230098793\ >>> 12773617821542499922957635148220826989519366803318\ >>> 25288693984964651058209392398294887933203625094431\ >>> 173012381970684161404"; >>> int n, m; >>> double f; >>> char *endptr; >>> >>> n=sscanf(s,"%lf%n",&f,&m); >>> printf("s = %s\n",s); >>> printf("n = %d\n",n); >>> printf("m = %d\n",m); >>> printf("f = %lf\n",f); >>> printf("s[m-2]:s[m] = %c%c%c\n",s[m-2],s[m-1],s[m]); >>> >>> /* try strtod >>> *endptr is character that stopped scan */ >>> printf("\nWith strtod\n"); >>> f = strtod(s,&endptr); >>> printf("f = %lf\n",f); >>> printf("len = %d\n",endptr-s); >>> if (! *endptr ) >>> printf("Terminating char is null\n"); >>> printf("Last char = %c\n",*(endptr-1)); >>> } >>> >>> >>> and the output >>> >>> s = >>> 2.7182818284590452353602874713526624977572470936999595749669676277240766303535475945713821785251664274274663919320030599218174135966290435729003342952605956307381323286279434907632338298807531952510190115738341879307021540891499348841675092447614606680822648001684774118537423454424371075390777449920695517027618386062613313845830007520449338265602976067371132007093287091274437470472306969772093101416928368190255151086574637721112523897844250569536967707854499699679468644549059879316368892300987931277361782154249992295763514822082698951936680331825288693984964651058209392398294887933203625094431173012381970684161404 >>> n = 1 >>> m = 349 >>> f = 2.718282 >>> s[m-2]:s[m] = 297 >>> >>> With strtod >>> f = 2.718282 >>> len = 621 >>> Terminating char is null >>> Last char = 4 >>> >>> >>> >>> >>> >>> > > > > > -- Camm Maguire c...@maguirefamily.org ========================================================================== "The earth is but one country, and mankind its citizens." -- Baha'u'llah _______________________________________________ Gcl-devel mailing list Gcl-devel@gnu.org https://lists.gnu.org/mailman/listinfo/gcl-devel