1228177Skib/*-
2228177Skib * Copyright (c) 2011 Giovanni Trematerra <giovanni.trematerra@gmail.com>
3228177Skib * All rights reserved.
4228177Skib *
5228177Skib * Redistribution and use in source and binary forms, with or without
6228177Skib * modification, are permitted provided that the following conditions
7228177Skib * are met:
8228177Skib * 1. Redistributions of source code must retain the above copyright
9228177Skib *    notice, this list of conditions and the following disclaimer.
10228177Skib * 2. Redistributions in binary form must reproduce the above copyright
11228177Skib *    notice, this list of conditions and the following disclaimer in the
12228177Skib *    documentation and/or other materials provided with the distribution.
13228177Skib *
14228177Skib * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
15228177Skib * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16228177Skib * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17228177Skib * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
18228177Skib * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19228177Skib * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20228177Skib * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21228177Skib * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22228177Skib * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23228177Skib * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24228177Skib * SUCH DAMAGE.
25228177Skib */
26228177Skib
27228177Skib/*
28228177Skib * $FreeBSD: releng/11.0/tests/sys/kern/pipe/pipe_ino_test.c 290914 2015-11-16 05:38:40Z ngie $
29228177Skib * Test conformance to stat(2) SUSv4 description:
30228177Skib *  "For all other file types defined in this volume of POSIX.1-2008, the
31228177Skib *  structure members st_mode, st_ino, st_dev, st_uid, st_gid, st_atim,
32228177Skib *  st_ctim, and st_mtim shall have meaningful values ...".
33228177Skib * Check that st_dev and st_ino are meaningful.
34228177Skib */
35228177Skib
36228177Skib#include <sys/types.h>
37228177Skib#include <sys/stat.h>
38228177Skib#include <err.h>
39228177Skib#include <stdio.h>
40228177Skib#include <unistd.h>
41228177Skib
42228177Skibint
43290914Sngiemain(void)
44228177Skib{
45228177Skib	int pipefd[2];
46228177Skib	struct stat st1, st2;
47228177Skib
48228177Skib	if (pipe(pipefd) == -1)
49228177Skib		err(1, "FAIL: pipe");
50228177Skib
51228177Skib	if (fstat(pipefd[0], &st1) == -1)
52228177Skib		err(1, "FAIL: fstat st1");
53228177Skib	if (fstat(pipefd[1], &st2) == -1)
54228177Skib		err(1, "FAIL: fstat st2");
55290914Sngie	if (st1.st_dev != st2.st_dev || st1.st_dev == 0 || st2.st_dev == 0)
56290914Sngie		errx(1, "FAIL: wrong dev number %d %d", st1.st_dev, st2.st_dev);
57228177Skib	if (st1.st_ino == st2.st_ino)
58228177Skib		errx(1, "FAIL: inode numbers are equal: %d", st1.st_ino);
59290914Sngie
60228177Skib	close(pipefd[0]);
61228177Skib	close(pipefd[1]);
62228177Skib	printf("PASS\n");
63228177Skib
64228177Skib	return (0);
65228177Skib}
66