xref: /freebsd/lib/libufs/getinode.3 (revision 6b13d60bf49ee40626d7e3a5d5a80519f0067307)
1.\" Author:	Marshall Kirk McKusick <mckusick@freebsd.org>
2.\" Date:	January 19, 2018
3.\" Description:
4.\" 	Manual page for libufs functions:
5.\"		getinode(3)
6.\"		putinode(3)
7.\"
8.\" This file is in the public domain.
9.\"
10.Dd September 2, 2020
11.Dt GETINODE 3
12.Os
13.Sh NAME
14.Nm getinode , putinode
15.Nd fetch and store inodes on a UFS file system
16.Sh LIBRARY
17.Lb libufs
18.Sh SYNOPSIS
19.In ufs/ufs/dinode.h
20.In ufs/ffs/fs.h
21.In libufs.h
22.Ft int
23.Fn getinode "struct uufsd *disk" "union dinodep *dp" "ino_t inumber"
24.Ft int
25.Fn putinode "struct uufsd *disk"
26.Sh DESCRIPTION
27The
28.Fn getinode
29and
30.Fn putinode
31functions provide an inode fetch and store API for
32.Xr libufs 3
33consumers.
34They operate on a userland UFS disk structure.
35The
36.Fn getinode
37function fetches the specified inode from the filesystem.
38The
39.Fn putinode
40function stores the most recently fetched inode to the filesystem.
41.Pp
42The
43.Va dinodep
44union is defined as:
45.Bd -literal -offset indent
46union dinodep {
47	struct ufs1_dinode *dp1;
48	struct ufs2_dinode *dp2;
49};
50.Ed
51.Pp
52Sample code to clear write permissions for inode number
53.Fa inumber
54stored on the filesystem described by
55.Fa diskp .
56.Bd -literal -offset indent
57#include <sys/stat.h>
58#include <err.h>
59
60#include <ufs/ufs/dinode.h>
61#include <ufs/ffs/fs.h>
62#include <libufs.h>
63
64void
65clearwrite(struct uufsd *diskp, ino_t inumber)
66{
67	union dinodep dp;
68
69	if (getinode(diskp, &dp, inumber) == -1)
70		err(1, "getinode: %s", diskp->d_error);
71	switch (diskp->d_ufs) {
72	case 1: /* UFS 1 filesystem */
73		dp.dp1->di_mode &= ~(S_IWUSR | S_IWGRP | S_IWOTH);
74		break;
75	case 2: /* UFS 2 filesystem */
76		dp.dp2->di_mode &= ~(S_IWUSR | S_IWGRP | S_IWOTH);
77		break;
78	default:
79		errx(1, "unknown filesystem type");
80	}
81	if (putinode(diskp) == -1)
82		err(1, "putinode: %s", diskp->d_error);
83}
84.Ed
85.Sh RETURN VALUES
86The
87.Fn getinode
88and
89.Fn putinode
90functions return 0 on success, or \-1 in case of any error.
91A string describing the error is stored in
92.Fa diskp->d_error .
93The global
94.Fa errno
95often provides additional information.
96.Sh ERRORS
97The function
98.Fn getinode
99may fail and set
100.Va errno
101for any of the errors specified for the library function
102.Xr pread 2 .
103It can also fail if the inode number is out of the range of inodes
104in the filesystem.
105.Pp
106The function
107.Fn putinode
108may fail and set
109.Va errno
110for any of the errors specified for the library functions
111.Xr ufs_disk_write 3
112or
113.Xr pwrite 2 .
114.Pp
115Additionally both functions may follow the
116.Xr libufs 3
117error methodologies in case of a device error.
118.Sh SEE ALSO
119.Xr pread 2 ,
120.Xr pwrite 2 ,
121.Xr libufs 3 ,
122.Xr ufs_disk_write 3
123.Sh HISTORY
124These functions first appeared as part of
125.Xr libufs 3
126in
127.Fx 13.0 .
128.Sh AUTHORS
129.An Marshall Kirk McKusick Aq Mt mckusick@FreeBSD.org
130