Re: [ROOT] Re: StrDup

From: Rene Brun (Rene.Brun@cern.ch)
Date: Tue Nov 20 2001 - 18:07:52 MET


Hi Valery,

Thanks for this nice explanation. Microsoft had recently the same idea
than us 7 years ago ::)

If nobody objects, I will rename this function StrDup to R__StrDup.

Rene Brun

Valeri Fine wrote:
> 
> Hi, Brandos I ewould appreciate you probide Sbj line with your messages.
> I used to delete right away  any message with no "Subj"
> 
> Coming back to Rene's answer:
> 
> > The functions like Strdup were implemented in the early days of Root
> > under Windows to circumvent deficiencies in the Windows implementation
> > of the standard Posix functions (well strdup is not posix), strchr, strcpy, etc.
> > We found that the Windows implementation crashes if you pass a null pointer
> > eg to strchr.
> > The ROOT code is now protected everywhere against calls to these functions
> > with null pointers.
> > Functions like Strdup could be removed from existing code and we do not use it
> > in the new code.
> >
> > However, I do not understand how you can get a duplication with Strdup.
> > This function is not defined in the MS libs.
> 
>    It is not correct. MS has introduced this function recently,
>   Very likely they had had the same reason ROOT team had:
> 
>   1. There is no  standard for strdup
> 
>   2. the behaviour of str<bla> functions provided with zero pointer is not defined
>       and causes the program crash (not under Windows only. It is still true for other
>       (UNIX) platforms also.
> 
> However I have to mention MS defines his StrDup function with
> "#include <shlwapi.h>"
> If one could avoid this include one may have avoided the name clash.
> 
>  (See attachment)
> 
>                                       Best regards, Valeri
> >
> > Rene Brun
> >
> > Brandon Kohn wrote:
> > >
> > >    Part 1.1       Type: Plain Text (text/plain)
> > >               Encoding: quoted-printable
> > Hello all,
> >
> > I've been mucking around with Root and win32 stuff for a while now, and I've
> > found some curiosities that I would like answered.  For one, it seems that root
> > redefines some functions that exist in standard libraries (ansi, unix, and
> > win32).  For instance, the function StrDup in TString.  I get name conflicts
> > when I try to compile root objects (TH1 for instance) with some codes that
> > already include the function from the standard lib. A cursory inspection of the
> > code StrDup shows that it simply new's a char array, strcpy's the string and
> > returns the ptr to the new array.  Is this different then what the standard lib
> > does?
> >
> > If not, can it be removed from Root?
> >
> > Brandon Kohn
> > +377 97 97 41 50 ext. 306 (Work)
> > +377 97 77 86 71 (Home)
> > Monaco
> >
> 
>   --------------------------------------------------------------------------------
> 
>                    Name: Text1.tmp
>    Text1.tmp       Type: unspecified type (application/octet-stream)
>                Encoding: 7bit



This archive was generated by hypermail 2b29 : Tue Jan 01 2002 - 17:51:09 MET