~ubuntu-branches/ubuntu/vivid/diffutils/vivid

« back to all changes in this revision

Viewing changes to gnulib-tests/test-open.h

  • Committer: Bazaar Package Importer
  • Author(s): Santiago Vila
  • Date: 2010-02-13 11:49:00 UTC
  • mfrom: (1.1.1 upstream)
  • Revision ID: james.westby@ubuntu.com-20100213114900-09lz8jx6wct52qp8
Tags: 1:2.9-1
* New upstream release, now under GPL version 3 or later.
* There is now a --tab-size option. Closes: #82923.
* Manpage for cmp describes exit status. Closes: #200614.
* Manpage for diff describes exit status. Closes: #228441, #473233.
* The file de.po is now more recent. Closes: #313686.
* Fixed bad sdiff behaviour. Closes: #320222.
* Added wdiff to Suggests. Closes: #324627.
* Fixed cmp behaviour regarding stdout and stderr. Closes: #356083.
* The file ru.po is now more recent. Closes: #409274.
* The file es.po is now more recent. Closes: #418005, #481708.
* The file nl.po is now more recent. Closes: #427370.
* Modified watch file to use http instead of ftp.
* Removed .comment section from executables.
* Added Homepage field to control file.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/* -*- buffer-read-only: t -*- vi: set ro: */
 
2
/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
 
3
#line 1
 
4
/* Test of opening a file descriptor.
 
5
   Copyright (C) 2007-2010 Free Software Foundation, Inc.
 
6
 
 
7
   This program is free software: you can redistribute it and/or modify
 
8
   it under the terms of the GNU General Public License as published by
 
9
   the Free Software Foundation; either version 3 of the License, or
 
10
   (at your option) any later version.
 
11
 
 
12
   This program is distributed in the hope that it will be useful,
 
13
   but WITHOUT ANY WARRANTY; without even the implied warranty of
 
14
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
15
   GNU General Public License for more details.
 
16
 
 
17
   You should have received a copy of the GNU General Public License
 
18
   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
19
 
 
20
/* Written by Bruno Haible <bruno@clisp.org>, 2007.  */
 
21
 
 
22
/* This file is designed to test both open(n,buf[,mode]) and
 
23
   openat(AT_FDCWD,n,buf[,mode]).  FUNC is the function to test.
 
24
   Assumes that BASE and ASSERT are already defined, and that
 
25
   appropriate headers are already included.  If PRINT, warn before
 
26
   skipping symlink tests with status 77.  */
 
27
 
 
28
static int
 
29
test_open (int (*func) (char const *, int, ...), bool print)
 
30
{
 
31
  int fd;
 
32
  /* Remove anything from prior partial run.  */
 
33
  unlink (BASE "file");
 
34
 
 
35
  /* Cannot create directory.  */
 
36
  errno = 0;
 
37
  ASSERT (func ("nonexist.ent/", O_CREAT | O_RDONLY, 0600) == -1);
 
38
  ASSERT (errno == ENOTDIR || errno == EISDIR || errno == ENOENT
 
39
          || errno == EINVAL);
 
40
 
 
41
  /* Create a regular file.  */
 
42
  fd = func (BASE "file", O_CREAT | O_RDONLY, 0600);
 
43
  ASSERT (0 <= fd);
 
44
  ASSERT (close (fd) == 0);
 
45
 
 
46
  /* Trailing slash handling.  */
 
47
  errno = 0;
 
48
  ASSERT (func (BASE "file/", O_RDONLY) == -1);
 
49
  ASSERT (errno == ENOTDIR || errno == EISDIR || errno == EINVAL);
 
50
 
 
51
  /* Directories cannot be opened for writing.  */
 
52
  errno = 0;
 
53
  ASSERT (func (".", O_WRONLY) == -1);
 
54
  ASSERT (errno == EISDIR || errno == EACCES);
 
55
 
 
56
  /* /dev/null must exist, and be writable.  */
 
57
  fd = func ("/dev/null", O_RDONLY);
 
58
  ASSERT (0 <= fd);
 
59
  {
 
60
    char c;
 
61
    ASSERT (read (fd, &c, 1) == 0);
 
62
  }
 
63
  ASSERT (close (fd) == 0);
 
64
  fd = func ("/dev/null", O_WRONLY);
 
65
  ASSERT (0 <= fd);
 
66
  ASSERT (write (fd, "c", 1) == 1);
 
67
  ASSERT (close (fd) == 0);
 
68
 
 
69
  /* Symlink handling, where supported.  */
 
70
  if (symlink (BASE "file", BASE "link") != 0)
 
71
    {
 
72
      ASSERT (unlink (BASE "file") == 0);
 
73
      if (print)
 
74
        fputs ("skipping test: symlinks not supported on this file system\n",
 
75
               stderr);
 
76
      return 77;
 
77
    }
 
78
  errno = 0;
 
79
  ASSERT (func (BASE "link/", O_RDONLY) == -1);
 
80
  ASSERT (errno == ENOTDIR);
 
81
  fd = func (BASE "link", O_RDONLY);
 
82
  ASSERT (0 <= fd);
 
83
  ASSERT (close (fd) == 0);
 
84
 
 
85
  /* Cleanup.  */
 
86
  ASSERT (unlink (BASE "file") == 0);
 
87
  ASSERT (unlink (BASE "link") == 0);
 
88
 
 
89
  return 0;
 
90
}