doc: Migration to Libera Chat.
[mes.git] / lib / tests / io / 90-stat.c
1 /* -*-comment-start: "//";comment-end:""-*-
2  * GNU Mes --- Maxwell Equations of Software
3  * Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
4  *
5  * This file is part of GNU Mes.
6  *
7  * GNU Mes is free software; you can redistribute it and/or modify it
8  * under the terms of the GNU General Public License as published by
9  * the Free Software Foundation; either version 3 of the License, or (at
10  * your option) any later version.
11  *
12  * GNU Mes is distributed in the hope that it will be useful, but
13  * 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 GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
19  */
20
21 #include <mes/lib.h>
22 #include <errno.h>
23 #include <stdio.h>
24 #include <string.h>
25 #include <fcntl.h>
26 #include <sys/stat.h>
27
28
29 #if __i386__ || __arm__
30 #define stat xstat
31
32 struct stat
33 {
34   unsigned long st_dev;
35   unsigned long st_ino;
36   unsigned short st_mode;
37   unsigned short st_nlink;
38   unsigned short st_uid;
39   unsigned short st_gid;
40   unsigned long st_rdev;
41   long st_size;
42   unsigned int st_blksize;
43   unsigned int st_blocks;
44   long st_atime;
45   unsigned long st_atime_usec;
46   long st_mtime;
47   unsigned long st_mtime_usec;
48   long st_ctime;
49   unsigned long st_ctime_usec;
50   unsigned int __foo0;
51   unsigned int __foo1;
52 };
53 #endif
54
55 int
56 main ()
57 {
58   // char buf[20];
59   // strcpy (buf, "Hello");
60   // eputs ("buf="); eputs (buf); eputs ("\n");
61   // strcat (buf, ", ");
62   // eputs ("buf="); eputs (buf); eputs ("\n");
63   // strncat (buf, "world!XXX", 6);
64   // eputs ("buf="); eputs (buf); eputs ("\n");
65   // if (strcmp (buf, "Hello, world!"))
66   //   return 1;
67
68   // char *name = "boo";
69   // errno = 0;
70   // fprintf (stderr, "%s: %s\n", name, strerror (errno));
71   int fd = open ("../COPYING", 0);
72
73   struct stat sbuf;
74
75   if (fd < 0)
76     return 2;
77
78   int r = fstat (fd, &sbuf);
79   if (r < 0)
80     return 1;
81
82   eputs ("st_dev=");
83   eputs (itoa (sbuf.st_dev));
84   eputs ("\n");
85   eputs ("st_ino=");
86   eputs (itoa (sbuf.st_ino));
87   eputs ("\n");
88   eputs ("st_mode=");
89   eputs (itoa (sbuf.st_mode));
90   eputs ("\n");
91   eputs ("st_nlink=");
92   eputs (itoa (sbuf.st_nlink));
93   eputs ("\n");
94   eputs ("st_uid=");
95   eputs (itoa (sbuf.st_uid));
96   eputs ("\n");
97   eputs ("st_gid=");
98   eputs (itoa (sbuf.st_gid));
99   eputs ("\n");
100   eputs ("st_rdev=");
101   eputs (itoa (sbuf.st_rdev));
102   eputs ("\n");
103   eputs ("st_size=");
104   eputs (itoa (sbuf.st_size));
105   eputs ("\n");
106
107   eputs ("st_blksize=");
108   eputs (itoa (sbuf.st_blksize));
109   eputs ("\n");
110   eputs ("st_blocks=");
111   eputs (itoa (sbuf.st_blocks));
112   eputs ("\n");
113
114   eputs ("st_atime=");
115   eputs (itoa (sbuf.st_atime));
116   eputs ("\n");
117   //eputs ("st_atime_nsec="); eputs (itoa (sbuf.st_atime_nsec)); eputs ("\n");
118
119   eputs ("st_mtime=");
120   eputs (itoa (sbuf.st_mtime));
121   eputs ("\n");
122   //eputs ("st_mtime_nsec="); eputs (itoa (sbuf.st_mtime_nsec)); eputs ("\n");
123
124   eputs ("st_ctime=");
125   eputs (itoa (sbuf.st_ctime));
126   eputs ("\n");
127   //eputs ("st_ctime_nsec="); eputs (itoa (sbuf.st_ctime_nsec)); eputs ("\n");
128
129   eputs ("size:");
130   eputs (itoa (sizeof (struct stat)));
131   eputs ("\n");
132   return 0;
133 }