root/maint/gnulib/tests/test-fbufmode.c

/* [previous][next][first][last][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. test_mode
  2. main

   1 /* Test of fbufmode() function.
   2    Copyright (C) 2007-2021 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 "fbufmode.h"
  22 
  23 #include <stdio.h>
  24 
  25 #include "macros.h"
  26 
  27 #define TESTFILE "t-fbufmode.tmp"
  28 
  29 /* ISO C99 disallows more than one setvbuf call on a given stream,
  30    and HP-UX 11 and musl libc indeed don't support such use of setvbuf.
  31    Therefore allocate a new stream for each possible mode value.  */
  32 static int
  33 test_mode (int mode)
     /* [previous][next][first][last][top][bottom][index][help] */
  34 {
  35   FILE *fp;
  36   char buf[5];
  37 
  38   /* Open it for reading.  */
  39   fp = fopen (TESTFILE, "r");
  40 
  41   switch (mode)
  42     {
  43     case _IONBF:
  44       ASSERT (setvbuf (fp, NULL, _IONBF, 0) == 0);
  45       ASSERT (fbufmode (fp) == _IONBF);
  46       break;
  47 
  48     case _IOLBF:
  49       ASSERT (setvbuf (fp, buf, _IOLBF, 5) == 0);
  50       /* mingw's setvbuf implements _IOLBF the same way as _IOFBF.  */
  51       ASSERT (fbufmode (fp) == _IOLBF
  52               || fbufmode (fp) == _IOFBF);
  53       break;
  54 
  55     case _IOFBF:
  56       ASSERT (setvbuf (fp, buf, _IOFBF, 5) == 0);
  57       ASSERT (fbufmode (fp) == _IOFBF);
  58       break;
  59 
  60     default:
  61       break;
  62     }
  63 
  64   fclose (fp);
  65 
  66   return 0;
  67 }
  68 
  69 int
  70 main ()
     /* [previous][next][first][last][top][bottom][index][help] */
  71 {
  72   int ret;
  73 
  74   /* Create a file with some contents.  */
  75   {
  76     FILE *fp;
  77 
  78     fp = fopen (TESTFILE, "w");
  79     if (fp == NULL)
  80       goto skip;
  81     if (fwrite ("foobarsh", 1, 8, fp) < 8)
  82       goto skip;
  83     if (fclose (fp))
  84       goto skip;
  85   }
  86 
  87   ret = test_mode (_IONBF);
  88   if (ret != 0)
  89     goto fail;
  90 
  91   ret = test_mode (_IOLBF);
  92   if (ret != 0)
  93     goto fail;
  94 
  95   ret = test_mode (_IOFBF);
  96   if (ret != 0)
  97     goto fail;
  98 
  99   return 0;
 100 
 101  fail:
 102   return ret;
 103 
 104  skip:
 105   fprintf (stderr, "Skipping test: file operations failed.\n");
 106   return 77;
 107 }

/* [previous][next][first][last][top][bottom][index][help] */