On Thu, 2011-09-01 at 00:07 +0400, Dmitry V. Levin wrote:
> On Wed, Aug 31, 2011 at 10:11:49AM +0000, Denys Vlasenko wrote:
> > commit 5284557bfad96f12dd5798539008e1644f1dc094
> > Author: Denys Vlasenko <[email protected]>
> > Date:   Wed Aug 31 12:07:38 2011 +0200
> > 
> >     Optimization: eliminate some usages of strcat()
> >     
> >     * defs.h: Declare stpcpy().
> >     * util.c: Define stpcpy().
> >     * file.c: Remove static str_append().
> >     (sprint_open_modes): Use stpcpy() instead of str_append().
> >     (sprintflags): Use stpcpy() instead of strcat().
> >     (printpathn): Eliminate usage of strcat().
> >     (printstr): Eliminate usage of strcat().
> 
> This is OK, but
> 
> > --- a/defs.h
> > +++ b/defs.h
> > @@ -680,6 +680,13 @@ extern void tv_sub(struct timeval *, struct timeval *, 
> > struct timeval *);
> >  extern void tv_mul(struct timeval *, struct timeval *, int);
> >  extern void tv_div(struct timeval *, struct timeval *, int);
> >  
> > +/* Some libc have stpcpy, some don't. Sigh...
> > + * Roll our private implementation...
> > + */
> > +#undef stpcpy
> > +#define stpcpy strace_stpcpy
> > +extern char *stpcpy(char *dst, const char *src);
> > +
> 
> I'd rather add stpcpy to AC_CHECK_FUNCS, to use stpcpy() from libc if
> the latter provides stpcpy().

Like this?

-- 
vda


diff -d -urpN strace.9/configure.ac strace.a/configure.ac
--- strace.9/configure.ac       2011-08-31 10:47:35.000000000 +0200
+++ strace.a/configure.ac       2011-09-01 11:12:22.362824609 +0200
@@ -235,6 +235,7 @@ AC_CHECK_FUNCS([ \
        strsignal \
        sys_siglist \
        _sys_siglist \
+       stpcpy \
 ])
 AC_CHECK_HEADERS([ \
        inttypes.h \
diff -d -urpN strace.9/defs.h strace.a/defs.h
--- strace.9/defs.h     2011-08-31 18:09:06.454737541 +0200
+++ strace.a/defs.h     2011-09-01 11:13:21.725068326 +0200
@@ -696,12 +696,14 @@ extern void tv_sub(struct timeval *, str
 extern void tv_mul(struct timeval *, struct timeval *, int);
 extern void tv_div(struct timeval *, struct timeval *, int);
 
+#if !defined HAVE_STPCPY
 /* Some libc have stpcpy, some don't. Sigh...
  * Roll our private implementation...
  */
 #undef stpcpy
 #define stpcpy strace_stpcpy
 extern char *stpcpy(char *dst, const char *src);
+#endif
 
 #ifdef SUNOS4
 extern int fixvfork(struct tcb *);
diff -d -urpN strace.9/util.c strace.a/util.c
--- strace.9/util.c     2011-08-31 18:58:51.218271698 +0200
+++ strace.a/util.c     2011-09-01 11:13:31.919110047 +0200
@@ -164,6 +164,7 @@ xlookup(const struct xlat *xlat, int val
        return NULL;
 }
 
+#if !defined HAVE_STPCPY
 char *
 stpcpy(char *dst, const char *src)
 {
@@ -171,6 +172,7 @@ stpcpy(char *dst, const char *src)
                dst++;
        return dst;
 }
+#endif
 
 /*
  * Generic ptrace wrapper which tracks ESRCH errors


------------------------------------------------------------------------------
Special Offer -- Download ArcSight Logger for FREE!
Finally, a world-class log management solution at an even better 
price-free! And you'll get a free "Love Thy Logs" t-shirt when you
download Logger. Secure your free ArcSight Logger TODAY!
http://p.sf.net/sfu/arcsisghtdev2dev
_______________________________________________
Strace-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/strace-devel

Reply via email to