1.\" $NetBSD: fetch.9,v 1.2 1996/01/09 21:59:24 perry Exp $ 2.\" 3.\" Copyright (c) 1996 Jason R. Thorpe. 4.\" All rights reserved. 5.\" 6.\" This code is derived from software contributed by Kenneth Stailey. 7.\" 8.\" Redistribution and use in source and binary forms, with or without 9.\" modification, are permitted provided that the following conditions 10.\" are met: 11.\" 1. Redistributions of source code must retain the above copyright 12.\" notice, this list of conditions and the following disclaimer. 13.\" 2. Redistributions in binary form must reproduce the above copyright 14.\" notice, this list of conditions and the following disclaimer in the 15.\" documentation and/or other materials provided with the distribution. 16.\" 3. All advertising materials mentioning features or use of this software 17.\" must display the following acknowledgement: 18.\" This product includes software developed for the NetBSD Project 19.\" by Jason R. Thorpe. 20.\" 4. The name of the author may not be used to endorse or promote products 21.\" derived from this software without specific prior written permission. 22.\" 23.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 24.\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 25.\" OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 26.\" IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 27.\" INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 28.\" BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 29.\" LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 30.\" AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 31.\" OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 32.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 33.\" SUCH DAMAGE. 34.\" 35.\" $FreeBSD$ 36.\" 37.Dd July 22, 2021 38.Dt FETCH 9 39.Os 40.Sh NAME 41.Nm fetch , 42.Nm fubyte , 43.Nm fuword , 44.Nm fuword16 , 45.Nm fuword32 , 46.Nm fuword64 , 47.Nm fueword , 48.Nm fueword32 , 49.Nm fueword64 50.Nd fetch data from user-space 51.Sh SYNOPSIS 52.In sys/types.h 53.In sys/systm.h 54.Ft int 55.Fn fubyte "volatile const void *base" 56.Ft long 57.Fn fuword "volatile const void *base" 58.Ft int 59.Fn fuword16 "volatile const void *base" 60.Ft int32_t 61.Fn fuword32 "volatile const void *base" 62.Ft int64_t 63.Fn fuword64 "volatile const void *base" 64.Ft int 65.Fn fueword "volatile const void *base" "long *val" 66.Ft int 67.Fn fueword32 "volatile const void *base" "int32_t *val" 68.Ft int 69.Fn fueword64 "volatile const void *base" "int64_t *val" 70.Sh DESCRIPTION 71The 72.Nm 73functions are designed to copy small amounts of data from user-space 74of the current process. 75If the user address is naturally aligned, then the operation will be 76performed atomically. 77Otherwise it may fail or be performed non-atomically, depending on 78the platform. 79.Pp 80The 81.Nm 82routines provide the following functionality: 83.Bl -tag -width "fueword32()" 84.It Fn fubyte 85Fetches a byte of data from the user-space address 86.Pa base . 87The byte read is zero-extended into the results variable. 88.It Fn fuword 89Fetches a word of data (long) from the user-space address 90.Pa base . 91.It Fn fuword16 92Fetches 16 bits of data from the user-space address 93.Pa base . 94The half-word read is zero-extended into the results variable. 95.It Fn fuword32 96Fetches 32 bits of data from the user-space address 97.Pa base . 98.It Fn fuword64 99Fetches 64 bits of data from the user-space address 100.Pa base . 101.It Fn fueword 102Fetches a word of data (long) from the user-space address 103.Pa base 104and stores the result in the variable pointed by 105.Pa val . 106.It Fn fueword32 107Fetches 32 bits of data from the user-space address 108.Pa base 109and stores the result in the variable pointed by 110.Pa val . 111.It Fn fueword64 112Fetches 64 bits of data from the user-space address 113.Pa base 114and stores the result in the variable pointed by 115.Pa val . 116.El 117.Pp 118The callers of 119.Fn fuword , 120.Fn fuword32 121and 122.Fn fuword64 123functions cannot distinguish between -1 read from 124userspace and function failure. 125.Sh RETURN VALUES 126The 127.Fn fubyte , 128.Fn fuword , 129.Fn fuword16 , 130.Fn fuword32 , 131and 132.Fn fuword64 133functions return the data fetched or -1 on failure. 134The 135.Fn fueword , 136.Fn fueword32 137and 138.Fn fueword64 139functions return 0 on success and -1 on failure. 140.Sh SEE ALSO 141.Xr copy 9 , 142.Xr store 9 143