[PATCH:libXt 5/5] makestrs: Use asprintf() if available

walter harms wharms at bfs.de
Sun Jan 25 10:40:52 PST 2015



Am 19.01.2015 19:41, schrieb Alan Coopersmith:
> Signed-off-by: Alan Coopersmith <alan.coopersmith at oracle.com>
> ---
>  configure.ac    |    5 ++++-
>  util/makestrs.c |   17 +++++++++++++++++
>  2 files changed, 21 insertions(+), 1 deletion(-)
> 
> diff --git a/configure.ac b/configure.ac
> index 34e6aab..3633ec6 100644
> --- a/configure.ac
> +++ b/configure.ac
> @@ -64,7 +64,10 @@ if test x"$CC_FOR_BUILD" = x; then
>  	fi
>  fi
>  AC_SUBST([CC_FOR_BUILD])
> -CPPFLAGS_FOR_BUILD=${CPPFLAGS_FOR_BUILD-${CPPFLAGS}}
> +DEFAULT_CPPFLAGS_FOR_BUILD="${CPPFLAGS}"
> +AC_CHECK_FUNC(asprintf,
> +  [DEFAULT_CPPFLAGS_FOR_BUILD="${DEFAULT_CPPFLAGS_FOR_BUILD} -DHAVE_ASPRINTF"])
> +CPPFLAGS_FOR_BUILD=${CPPFLAGS_FOR_BUILD-${DEFAULT_CPPFLAGS_FOR_BUILD}}
>  AC_SUBST(CPPFLAGS_FOR_BUILD)
>  DEFAULT_CFLAGS_FOR_BUILD="${CFLAGS} ${CWARNFLAGS}"
>  CFLAGS_FOR_BUILD=${CFLAGS_FOR_BUILD-${DEFAULT_CFLAGS_FOR_BUILD}}
> diff --git a/util/makestrs.c b/util/makestrs.c
> index f872ec8..5764849 100644
> --- a/util/makestrs.c
> +++ b/util/makestrs.c
> @@ -90,19 +90,26 @@ static int   solaris_abi_names = FALSE;
>  static char* includedir = NULL;
>  static FILE *ifopen(const char *file, const char *mode)
>  {
> +#ifndef HAVE_ASPRINTF
>      size_t len;
> +#endif
>      char *buffer;
>      FILE *ret;
>  
>      if (includedir == NULL)
>          return fopen(file, mode);
>  
> +#ifdef HAVE_ASPRINTF
> +    if (asprintf(&buffer, "%s/%s", includedir, file) == -1)
> +        return NULL;
> +#else
>      len = strlen(file) + strlen(includedir) + 1;
>      buffer = (char*)malloc(len + 1);
>      if (buffer == NULL)
>          return NULL;
>  
>      snprintf(buffer, len + 1, "%s/%s", includedir, file);
> +#endif
>  
>      ret = fopen(buffer, mode);
>  
> @@ -269,13 +276,23 @@ static void WriteHeader (char *tagline, File *phile, int abi)
>  
>      /* do the right thing for Motif, i.e. avoid _XmXmStrDefs_h_ */
>      if (strcmp (prefixstr, "Xm") == 0) {
> +#ifdef HAVE_ASPRINTF
> +	if (asprintf (&fileprotstr, "_%s_", phile->name) == -1)
> +	    exit (1);
> +#else
>  	if ((fileprotstr = malloc (strlen (phile->name) + 3)) == NULL)
>  	   exit (1);
>  	(void) sprintf (fileprotstr, "_%s_", phile->name);
> +#endif
>      } else {
> +#ifdef HAVE_ASPRINTF
> +	if (asprintf (&fileprotstr, "_%s%s_", prefixstr, phile->name) == -1)
> +	    exit (1);
> +#else
>  	if ((fileprotstr = malloc (strlen (phile->name) + strlen (prefixstr) +  3)) == NULL)
>  	   exit (1);
>  	(void) sprintf (fileprotstr, "_%s%s_", prefixstr, phile->name);
> +#endif
>      }
>  
>      for (tmp = fileprotstr; *tmp; tmp++) if (*tmp == '.') *tmp = '_';


IMHO, it would be better to have a private asprintf() in case ifndef HAVE_ASPRINTF
1. this may be useful in other places
2. this would improve readability

re,
 wh


More information about the xorg-devel mailing list