1*5ac3bc71Schristos.\" $NetBSD: elf_rand.3,v 1.6 2024/03/03 17:37:33 christos Exp $ 2e81373b4Schristos.\" 39dd9d0cfSchristos.\" Copyright (c) 2006,2008 Joseph Koshy. All rights reserved. 49dd9d0cfSchristos.\" 59dd9d0cfSchristos.\" Redistribution and use in source and binary forms, with or without 69dd9d0cfSchristos.\" modification, are permitted provided that the following conditions 79dd9d0cfSchristos.\" are met: 89dd9d0cfSchristos.\" 1. Redistributions of source code must retain the above copyright 99dd9d0cfSchristos.\" notice, this list of conditions and the following disclaimer. 109dd9d0cfSchristos.\" 2. Redistributions in binary form must reproduce the above copyright 119dd9d0cfSchristos.\" notice, this list of conditions and the following disclaimer in the 129dd9d0cfSchristos.\" documentation and/or other materials provided with the distribution. 139dd9d0cfSchristos.\" 149dd9d0cfSchristos.\" This software is provided by Joseph Koshy ``as is'' and 159dd9d0cfSchristos.\" any express or implied warranties, including, but not limited to, the 169dd9d0cfSchristos.\" implied warranties of merchantability and fitness for a particular purpose 179dd9d0cfSchristos.\" are disclaimed. in no event shall Joseph Koshy be liable 189dd9d0cfSchristos.\" for any direct, indirect, incidental, special, exemplary, or consequential 199dd9d0cfSchristos.\" damages (including, but not limited to, procurement of substitute goods 209dd9d0cfSchristos.\" or services; loss of use, data, or profits; or business interruption) 219dd9d0cfSchristos.\" however caused and on any theory of liability, whether in contract, strict 229dd9d0cfSchristos.\" liability, or tort (including negligence or otherwise) arising in any way 239dd9d0cfSchristos.\" out of the use of this software, even if advised of the possibility of 249dd9d0cfSchristos.\" such damage. 259dd9d0cfSchristos.\" 263f622274Sjkoshy.\" Id: elf_rand.3 3957 2022-03-12 14:11:52Z jkoshy 279dd9d0cfSchristos.\" 289dd9d0cfSchristos.Dd June 17, 2006 299dd9d0cfSchristos.Dt ELF_RAND 3 30c5261b83Sjkoshy.Os 319dd9d0cfSchristos.Sh NAME 329dd9d0cfSchristos.Nm elf_rand 339dd9d0cfSchristos.Nd provide sequential access to the next archive member 349dd9d0cfSchristos.Sh LIBRARY 359dd9d0cfSchristos.Lb libelf 369dd9d0cfSchristos.Sh SYNOPSIS 379dd9d0cfSchristos.In libelf.h 389dd9d0cfSchristos.Ft off_t 399dd9d0cfSchristos.Fn elf_rand "Elf *archive" "off_t offset" 409dd9d0cfSchristos.Sh DESCRIPTION 419dd9d0cfSchristosThe 429dd9d0cfSchristos.Fn elf_rand 439dd9d0cfSchristosfunction causes the ELF descriptor 443f622274Sjkoshy.Fa archive 459dd9d0cfSchristosto be adjusted so that the next call to 469dd9d0cfSchristos.Xr elf_begin 3 479dd9d0cfSchristoswill provide access to the archive member at byte offset 483f622274Sjkoshy.Fa offset 499dd9d0cfSchristosin the archive. 509dd9d0cfSchristosArgument 513f622274Sjkoshy.Fa offset 529dd9d0cfSchristosis the byte offset from the start of the archive to the beginning of 539dd9d0cfSchristosthe archive header for the desired member. 549dd9d0cfSchristos.Pp 559dd9d0cfSchristosArchive member offsets may be retrieved using the 569dd9d0cfSchristos.Xr elf_getarsym 3 579dd9d0cfSchristosfunction. 589dd9d0cfSchristos.Sh RETURN VALUES 599dd9d0cfSchristosFunction 609dd9d0cfSchristos.Fn elf_rand 619dd9d0cfSchristosreturns 623f622274Sjkoshy.Fa offset 639dd9d0cfSchristosif successful or zero in case of an error. 649dd9d0cfSchristos.Sh EXAMPLES 659dd9d0cfSchristosTo process all the members of an archive use: 669dd9d0cfSchristos.Bd -literal -offset indent 679dd9d0cfSchristosoff_t off; 689dd9d0cfSchristosElf *archive, *e; 699dd9d0cfSchristos\&... 709dd9d0cfSchristoscmd = ELF_C_READ; 719dd9d0cfSchristosarchive = elf_begin(fd, cmd, NULL); 729dd9d0cfSchristoswhile ((e = elf_begin(fd, cmd, archive)) != (Elf *) 0) 739dd9d0cfSchristos{ 749dd9d0cfSchristos ... process `e' here ... 759dd9d0cfSchristos elf_end(e); 769dd9d0cfSchristos 779dd9d0cfSchristos off = ...new value...; 789dd9d0cfSchristos if (elf_rand(archive, off) != off) { 799dd9d0cfSchristos ... process error ... 809dd9d0cfSchristos } 819dd9d0cfSchristos} 829dd9d0cfSchristoself_end(archive); 839dd9d0cfSchristos.Ed 849dd9d0cfSchristos.Pp 859dd9d0cfSchristosTo rewind an archive, use: 869dd9d0cfSchristos.Bd -literal -offset indent 879dd9d0cfSchristosElf *archive; 889dd9d0cfSchristos\&... 899dd9d0cfSchristosif (elf_rand(archive, SARMAG) != SARMAG) { 909dd9d0cfSchristos ... error ... 919dd9d0cfSchristos} 929dd9d0cfSchristos.Ed 939dd9d0cfSchristos.Sh ERRORS 949dd9d0cfSchristosFunction 959dd9d0cfSchristos.Fn elf_rand 969dd9d0cfSchristosmay fail with the following errors: 979dd9d0cfSchristos.Bl -tag -width "[ELF_E_RESOURCE]" 989dd9d0cfSchristos.It Bq Er ELF_E_ARGUMENT 999dd9d0cfSchristosArgument 1003f622274Sjkoshy.Fa archive 1019dd9d0cfSchristoswas null. 1029dd9d0cfSchristos.It Bq Er ELF_E_ARGUMENT 1039dd9d0cfSchristosArgument 1043f622274Sjkoshy.Fa archive 1059dd9d0cfSchristoswas not a descriptor for an 1069dd9d0cfSchristos.Xr ar 1 1079dd9d0cfSchristosarchive. 1089dd9d0cfSchristos.It Bq Er ELF_E_ARCHIVE 1099dd9d0cfSchristosArgument 1103f622274Sjkoshy.Fa offset 1119dd9d0cfSchristosdid not correspond to the start of an archive member header. 1129dd9d0cfSchristos.El 1139dd9d0cfSchristos.Sh SEE ALSO 1149dd9d0cfSchristos.Xr ar 1 , 1159dd9d0cfSchristos.Xr elf 3 , 1169dd9d0cfSchristos.Xr elf_begin 3 , 1179dd9d0cfSchristos.Xr elf_end 3 , 1189dd9d0cfSchristos.Xr elf_getarsym 3 , 1199dd9d0cfSchristos.Xr elf_next 3 , 1209dd9d0cfSchristos.Xr gelf 3 121