iPXE
Data Structures | Macros | Functions
cpio.h File Reference

CPIO archives. More...

#include <stdint.h>
#include <ipxe/image.h>

Go to the source code of this file.

Data Structures

struct  cpio_header
 A CPIO archive header. More...
 

Macros

#define CPIO_MAGIC   "070701"
 CPIO magic. More...
 
#define CPIO_MODE_FILE   0100000
 CPIO type for regular files. More...
 
#define CPIO_MODE_DIR   0040000
 CPIO type for directories. More...
 
#define CPIO_ALIGN   4
 CPIO header length alignment. More...
 
#define INITRD_ALIGN   4096
 Alignment for CPIO archives within an initrd. More...
 

Functions

 FILE_LICENCE (GPL2_OR_LATER_OR_UBDL)
 
static const char * cpio_name (struct image *image)
 Get CPIO image name. More...
 
static size_t cpio_pad_len (size_t len)
 Get CPIO header zero-padding length. More...
 
size_t cpio_header (struct image *image, unsigned int index, struct cpio_header *cpio)
 Construct CPIO header for image, if applicable. More...
 

Detailed Description

CPIO archives.

Definition in file cpio.h.

Macro Definition Documentation

◆ CPIO_MAGIC

#define CPIO_MAGIC   "070701"

CPIO magic.

Definition at line 52 of file cpio.h.

◆ CPIO_MODE_FILE

#define CPIO_MODE_FILE   0100000

CPIO type for regular files.

Definition at line 55 of file cpio.h.

◆ CPIO_MODE_DIR

#define CPIO_MODE_DIR   0040000

CPIO type for directories.

Definition at line 58 of file cpio.h.

◆ CPIO_ALIGN

#define CPIO_ALIGN   4

CPIO header length alignment.

Definition at line 61 of file cpio.h.

◆ INITRD_ALIGN

#define INITRD_ALIGN   4096

Alignment for CPIO archives within an initrd.

Definition at line 64 of file cpio.h.

Function Documentation

◆ FILE_LICENCE()

FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL  )

◆ cpio_name()

static const char* cpio_name ( struct image image)
inlinestatic

Get CPIO image name.

Parameters
imageImage
Return values
nameImage name (not NUL terminated)

Definition at line 73 of file cpio.h.

73  {
74  return image->cmdline;
75 }
An executable image.
Definition: image.h:24
char * cmdline
Command line to pass to image.
Definition: image.h:39

References image::cmdline.

Referenced by bzimage_load_initrd(), cpio_header(), cpio_max(), cpio_name_len(), and efi_file_read_initrd().

◆ cpio_pad_len()

static size_t cpio_pad_len ( size_t  len)
inlinestatic

Get CPIO header zero-padding length.

Parameters
lenLength of CPIO header (including name, excluding NUL)
Return values
pad_lenPadding length

Definition at line 84 of file cpio.h.

84  {
85 
86  /* Pad by at least one byte (for name's terminating NUL) */
87  return ( CPIO_ALIGN - ( len % CPIO_ALIGN ) );
88 }
#define CPIO_ALIGN
CPIO header length alignment.
Definition: cpio.h:61
uint32_t len
Length.
Definition: ena.h:14

References CPIO_ALIGN, and len.

Referenced by bzimage_load_initrd(), and efi_file_read_initrd().

◆ cpio_header()

size_t cpio_header ( struct image image,
unsigned int  index,
struct cpio_header cpio 
)

Construct CPIO header for image, if applicable.

Parameters
imageImage
indexCPIO header index
cpioCPIO header to fill in
Return values
lenLength of CPIO header (including name, excluding NUL)

Definition at line 151 of file cpio.c.

152  {
153  const char *name = cpio_name ( image );
154  unsigned int mode;
155  unsigned int count;
156  unsigned int max;
157  unsigned int depth;
158  unsigned int i;
159  size_t name_len;
160  size_t len;
161 
162  /* Parse command line arguments */
163  cpio_parse_cmdline ( image, &mode, &count );
164 
165  /* Determine number of CPIO headers to be constructed */
166  max = cpio_max ( image );
167  if ( count > max )
168  count = max;
169 
170  /* Determine path depth of this CPIO header */
171  if ( index >= count )
172  return 0;
173  depth = ( max - count + index + 1 );
174 
175  /* Get filename length */
176  name_len = cpio_name_len ( image, depth );
177 
178  /* Calculate mode and length */
179  if ( depth < max ) {
180  /* Directory */
182  len = 0;
183  } else {
184  /* File */
185  mode |= CPIO_MODE_FILE;
186  len = image->len;
187  }
188 
189  /* Construct CPIO header */
190  memset ( cpio, '0', sizeof ( *cpio ) );
191  memcpy ( cpio->c_magic, CPIO_MAGIC, sizeof ( cpio->c_magic ) );
192  cpio_set_field ( cpio->c_mode, mode );
193  cpio_set_field ( cpio->c_nlink, 1 );
194  cpio_set_field ( cpio->c_filesize, len );
195  cpio_set_field ( cpio->c_namesize, ( name_len + 1 /* NUL */ ) );
196  DBGC ( image, "CPIO %s %d/%d \"", image->name, depth, max );
197  for ( i = 0 ; i < name_len ; i++ )
198  DBGC ( image, "%c", name[i] );
199  DBGC ( image, "\"\n" );
200  DBGC2_HDA ( image, 0, cpio, sizeof ( *cpio ) );
201 
202  /* Calculate total length */
203  return ( sizeof ( *cpio ) + name_len );
204 }
const char * name
Definition: ath9k_hw.c:1984
#define max(x, y)
Definition: ath.h:39
char c_filesize[8]
Size of data field.
Definition: cpio.h:36
#define CPIO_MODE_FILE
CPIO type for regular files.
Definition: cpio.h:55
#define DBGC(...)
Definition: compiler.h:505
long index
Definition: bigint.h:62
An executable image.
Definition: image.h:24
#define CPIO_DEFAULT_DIR_MODE
CPIO directory mode.
Definition: cpio.c:41
static size_t cpio_name_len(struct image *image, unsigned int depth)
Get CPIO image filename.
Definition: cpio.c:87
void * memcpy(void *dest, const void *src, size_t len) __nonnull
static unsigned int cpio_max(struct image *image)
Get maximum number of CPIO headers (i.e.
Definition: cpio.c:62
uint16_t count
Number of entries.
Definition: ena.h:22
#define DBGC2_HDA(...)
Definition: compiler.h:523
static void cpio_set_field(char *field, unsigned long value)
Set field within a CPIO header.
Definition: cpio.c:49
char c_mode[8]
File mode and permissions.
Definition: cpio.h:26
size_t len
Length of raw file image.
Definition: image.h:43
char c_namesize[8]
Length of filename, including final NUL.
Definition: cpio.h:46
char c_nlink[8]
Number of links.
Definition: cpio.h:32
char c_magic[6]
The string "070701" or "070702".
Definition: cpio.h:22
#define CPIO_MAGIC
CPIO magic.
Definition: cpio.h:52
static void cpio_parse_cmdline(struct image *image, unsigned int *mode, unsigned int *count)
Parse CPIO image parameters.
Definition: cpio.c:111
#define CPIO_MODE_DIR
CPIO type for directories.
Definition: cpio.h:58
char * name
Name.
Definition: image.h:34
uint32_t len
Length.
Definition: ena.h:14
void * memset(void *dest, int character, size_t len) __nonnull
static const char * cpio_name(struct image *image)
Get CPIO image name.
Definition: cpio.h:73

References cpio_header::c_filesize, cpio_header::c_magic, cpio_header::c_mode, cpio_header::c_namesize, cpio_header::c_nlink, count, CPIO_DEFAULT_DIR_MODE, CPIO_MAGIC, cpio_max(), CPIO_MODE_DIR, CPIO_MODE_FILE, cpio_name(), cpio_name_len(), cpio_parse_cmdline(), cpio_set_field(), DBGC, DBGC2_HDA, index, len, image::len, max, memcpy(), memset(), image::name, and name.

Referenced by bzimage_load_initrd(), and efi_file_read_initrd().