summaryrefslogtreecommitdiff
blob: 276f2ba6ebd5304b174874ac70355f2c2ad86f35 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
/* $Id: /var/cvsroot/gentoo-src/portage/src/sandbox/problems/Attic/sandbox_dev_fd_foo.c,v 1.2 2003/03/22 14:24:38 carpaski Exp $ */

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>

void cleanup_1(void)
{
    puts("Unlinking file...");
    unlink("/tmp/_sandbox_test.file");
}

int main(void)
{
    struct stat s1, s2;
    FILE *fp1, *fp2;
    char *file = "/tmp/_sandbox_test.file";
    char devfd[32];

    printf("Opening file...\n");
    if (!(fp1 = fopen(file, "w")))
        exit(1);
    atexit(cleanup_1);
    printf("fstat'ing file...\n");
    if (fstat(fileno(fp1), &s1) < 0)
        exit(2);
    sprintf(devfd, "/dev/fd/%d", fileno(fp1));
    printf("fopening %s...\n", devfd);
    if (!(fp2 = fopen(devfd, "w")))
        exit(3);
    printf("fstat'ing %s...\n", devfd);
    if (fstat(fileno(fp2), &s2) < 0)
        exit(4);
    printf("Checking %ld == %ld and %ld == %ld...\n",
          (long int) s1.st_dev, (long int) s2.st_dev, s1.st_ino, s2.st_ino);
    if (s1.st_dev != s2.st_dev || s1.st_ino != s2.st_ino)
        exit(5);
    printf("Success!\n");
    return(0);
}