(root)/
coreutils-9.4/
gnulib-tests/
test-vasprintf.c
       1  /* Test of vasprintf() and asprintf() functions.
       2     Copyright (C) 2007-2023 Free Software Foundation, Inc.
       3  
       4     This program is free software: you can redistribute it and/or modify
       5     it under the terms of the GNU General Public License as published by
       6     the Free Software Foundation, either version 3 of the License, or
       7     (at your option) any later version.
       8  
       9     This program is distributed in the hope that it will be useful,
      10     but WITHOUT ANY WARRANTY; without even the implied warranty of
      11     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      12     GNU General Public License for more details.
      13  
      14     You should have received a copy of the GNU General Public License
      15     along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
      16  
      17  /* Written by Bruno Haible <bruno@clisp.org>, 2007.  */
      18  
      19  #include <config.h>
      20  
      21  #include <stdio.h>
      22  
      23  #include "signature.h"
      24  SIGNATURE_CHECK (asprintf, int, (char **, char const *, ...));
      25  SIGNATURE_CHECK (vasprintf, int, (char **, char const *, va_list));
      26  
      27  #include <stdarg.h>
      28  #include <stdlib.h>
      29  #include <string.h>
      30  
      31  #include "macros.h"
      32  
      33  static int
      34  my_asprintf (char **result, const char *format, ...)
      35  {
      36    va_list args;
      37    int ret;
      38  
      39    va_start (args, format);
      40    ret = vasprintf (result, format, args);
      41    va_end (args);
      42    return ret;
      43  }
      44  
      45  static void
      46  test_vasprintf ()
      47  {
      48    int repeat;
      49  
      50    for (repeat = 0; repeat <= 8; repeat++)
      51      {
      52        char *result;
      53        int retval = my_asprintf (&result, "%d", 12345);
      54        ASSERT (retval == 5);
      55        ASSERT (result != NULL);
      56        ASSERT (strcmp (result, "12345") == 0);
      57        free (result);
      58      }
      59  
      60    for (repeat = 0; repeat <= 8; repeat++)
      61      {
      62        char *result;
      63        int retval = my_asprintf (&result, "%08lx", 12345UL);
      64        ASSERT (retval == 8);
      65        ASSERT (result != NULL);
      66        ASSERT (strcmp (result, "00003039") == 0);
      67        free (result);
      68      }
      69  }
      70  
      71  static void
      72  test_asprintf ()
      73  {
      74    int repeat;
      75  
      76    for (repeat = 0; repeat <= 8; repeat++)
      77      {
      78        char *result;
      79        int retval = asprintf (&result, "%d", 12345);
      80        ASSERT (retval == 5);
      81        ASSERT (result != NULL);
      82        ASSERT (strcmp (result, "12345") == 0);
      83        free (result);
      84      }
      85  
      86    for (repeat = 0; repeat <= 8; repeat++)
      87      {
      88        char *result;
      89        int retval = asprintf (&result, "%08lx", 12345UL);
      90        ASSERT (retval == 8);
      91        ASSERT (result != NULL);
      92        ASSERT (strcmp (result, "00003039") == 0);
      93        free (result);
      94      }
      95  }
      96  
      97  int
      98  main (int argc, char *argv[])
      99  {
     100    test_vasprintf ();
     101    test_asprintf ();
     102    return 0;
     103  }