This is the mail archive of the cygwin@sourceware.cygnus.com mailing list for the Cygwin project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

RE: Unexpected stack dump using strtok() function


Hi,

yes, this code is non-portable!
I checked that it does core dump on HP-UX 10.20
compiled by just gcc, and it works with -fwritable-strings.
HP's compilers by default don't make strings readonly!

Bye, Heribert (heribert_dahms@icon-gmbh.de)

> -----Original Message-----
> From:	Mike Little [SMTP:M.Little@servicepower.com]
> Sent:	Thursday, June 22, 2000 15:21
> To:	'Marco.Pettinella@marconi.com'; cygwin@sourceware.cygnus.com
> Subject:	RE: Unexpected stack dump using strtok() function
> 
> > -----Original Message-----
> > From: Marco.Pettinella@marconi.com 
> > [mailto:Marco.Pettinella@marconi.com]
> > Sent: Thursday, June 22, 2000 1:57 PM
> > To: cygwin@sourceware.cygnus.com
> > Subject: Unexpected stack dump using strtok() function
> > 
> > 
> > 
> > 
> > Hi everybody.
> > I've just installed Cygwin 1.1.2 (uname -r : 1.1.2(0.21/3/2) ).
> > 
> > I'm doing some tests finalized to port a Unix application 
> > under Windows NT.
> > I noted that, while using strtok() function, I receive a SIGSEGV
> > which causes a stack dump under NT.
> > 
> > The little program I used to understand this behaviour was 
> > the following:
> > 
> > #include <stdio.h>
> > #include <string.h>
> > #include <stdlib.h>
> > 
> > int
> > main()
> > {
> >      static char *string = "MARCO#PETTINELLA";
> >      static char *separator = "#";
> >      char *name;
> >      char *surname;
> > 
> >      name = NULL;
> >      surname = NULL;
> > 
> >      name = strtok (string, separator);
> >      if (name == NULL) {
> >           fprintf (stderr, "NAME IS NULL!\n");
> >           return -1;
> >      }
> >      fprintf (stderr, "NAME: %s\n", name);
> > 
> >      surname = strtok (0, separator);
> >      if (surname == NULL) {
> >           fprintf (stderr, "SURNAME IS NULL!\n");
> >           return -1;
> >      }
> >      fprintf (stderr, "SURNAME: %s\n", surname);
> > 
> >      return 0;
> > }
> > 
> > I also compiled this program under SCO Unix and HP UX, and I 
> > verified that
> > it runs correctly, as expected.
> > 
> > I'm wondering if this SIGSEGV is due to a misconfiguration of 
> > my gcc or if it is
> >  a bug.
> > Does anybody have experienced a problem like this?
> > 
> > My release of gcc is 2.95.2-1.
> > 
> > Thanks in advance for your help. Marco
> 
> A couple of thoughts:
> 1) The literal 'string' ought to be in a read-only data area.
>    So the sigsegv could come from strtok trying to write a 0 over the
> first
> hash.
>    Not all compilers/OS's support such a concept, so it may not show
> up 
>    in different implementations.
> 2) Did you try looking at the stack trace? It should show which bit of
> your
> code,
>    was being executed when the signal was received.	
> 
> 
> Also, which gcc options are you using?
> 
> 
> Hope this helps,
> Mike
> 
> --
> Mike Little
> Share what you know. Learn what you don't.
> 
> ServicePOWER Business Solutions Ltd
> home: mike@ampersoft.co.uk
> 
> --
> Want to unsubscribe from this list?
> Send a message to cygwin-unsubscribe@sourceware.cygnus.com

--
Want to unsubscribe from this list?
Send a message to cygwin-unsubscribe@sourceware.cygnus.com


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]