# lib/cpio.c File Reference

Handle cpio payloads within rpm packages. More...

`#include "system.h"`
`#include <rpmio.h>`
`#include <rpmlib.h>`
`#include "cpio.h"`
`#include "cpio.h"`
`#include "debug.h"`
Include dependency graph for cpio.c:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

## Defines

#define | GET_NUM_FIELD(phys, log)
#define | SET_NUM_FIELD(phys, val, space)

## Functions

static int | strntoul (const char *str, char **endptr, int base, size_t num)
| Convert string to unsigned integer (with buffer size check).
int | cpioTrailerWrite (FSM_t fsm)
| Write cpio trailer.
int | cpioHeaderWrite (FSM_t fsm, struct stat *st)
| Write cpio header.
int | cpioHeaderRead (FSM_t fsm, struct stat *st)
| Read cpio header.
const char * | cpioStrerror (int rc)
| Return formatted error message on payload handling failure.

## Variables

int | _cpio_debug = 0

## Detailed Description

Handle cpio payloads within rpm packages.

Warning:
  FIXME: We don't translate between cpio and system mode bits! These should both be the same, but really odd things are going to happen if that's not true!

Definition in file cpio.c.

## Define Documentation

#define GET_NUM_FIELD | ( | phys,
|  | log |  | ) |

Value:

    log = strntoul(phys, &end, 16, sizeof(phys)); \
            if ( (end - phys) != sizeof(phys) ) return CPIOERR_BAD_HEADER;

Definition at line 53 of file cpio.c.

Referenced by cpioHeaderRead().

#define SET_NUM_FIELD | ( | phys,
|  | val,
|  | space |  | ) |

Value:

    sprintf(space, "%8.8lx", (unsigned long) (val)); \
            memcpy(phys, space, 8)

Definition at line 56 of file cpio.c.

Referenced by cpioHeaderWrite().

## Function Documentation

int cpioHeaderRead | ( | FSM_t | fsm,
|  | struct stat * | st |
| ) |  |  |

Read cpio header.

Return values:

  | fsm | file path and stat info
  | st |

Returns:
  0 on success

Definition at line 137 of file cpio.c.

References _cpio_debug, _free(), CPIO_CRC_MAGIC, CPIO_NEWC_MAGIC, CPIOERR_BAD_HEADER, CPIOERR_BAD_MAGIC, CPIOERR_READ_FAILED, cpioCrcPhysicalHeader::devMajor, cpioCrcPhysicalHeader::devMinor, cpioCrcPhysicalHeader::filesize, FSM_DREAD, FSM_POS, fsmNext(), GET_NUM_FIELD, cpioCrcPhysicalHeader::gid, cpioCrcPhysicalHeader::inode, fsm_s::lpath, cpioCrcPhysicalHeader::magic, major, Makedev, minor, cpioCrcPhysicalHeader::mode, cpioCrcPhysicalHeader::mtime, cpioCrcPhysicalHeader::namesize, cpioCrcPhysicalHeader::nlink, fsm_s::path, PHYS_HDR_SIZE, cpioCrcPhysicalHeader::rdevMajor, cpioCrcPhysicalHeader::rdevMinor, fsm_s::rdnb, S_ISLNK, cpioCrcPhysicalHeader::uid, fsm_s::wrbuf, fsm_s::wrlen, fsm_s::wrsize, xmalloc(), and xstrdup().

Referenced by fsmSetup().

int cpioHeaderWrite | ( | FSM_t | fsm,
|  | struct stat * | st |
| ) |  |  |

Write cpio header.

Return values:

  | fsm | file path and stat info

Parameters:

  | st |

Returns:
  0 on success

Definition at line 86 of file cpio.c.

References _cpio_debug, cpioCrcPhysicalHeader::checksum, CPIO_NEWC_MAGIC, CPIOERR_WRITE_FAILED, cpioCrcPhysicalHeader::devMajor, cpioCrcPhysicalHeader::devMinor, field(), cpioCrcPhysicalHeader::filesize, FSM_DWRITE, FSM_PAD, fsmNext(), cpioCrcPhysicalHeader::gid, cpioCrcPhysicalHeader::inode, fsm_s::lpath, cpioCrcPhysicalHeader::magic, major, minor, cpioCrcPhysicalHeader::mode, cpioCrcPhysicalHeader::mtime, cpioCrcPhysicalHeader::namesize, cpioCrcPhysicalHeader::nlink, fsm_s::path, PHYS_HDR_SIZE, fsm_s::rdbuf, cpioCrcPhysicalHeader::rdevMajor, cpioCrcPhysicalHeader::rdevMinor, fsm_s::rdnb, S_ISLNK, SET_NUM_FIELD, cpioCrcPhysicalHeader::uid, and fsm_s::wrnb.

Referenced by fsmSetup().

int cpioTrailerWrite | ( | FSM_t | fsm | ) |

Write cpio trailer.

Return values:

  | fsm | file path and stat info

Returns:
  0 on success

Definition at line 60 of file cpio.c.

References CPIO_NEWC_MAGIC, CPIO_TRAILER, FSM_DWRITE, FSM_PAD, fsmNext(), cpioCrcPhysicalHeader::magic, cpioCrcPhysicalHeader::namesize, cpioCrcPhysicalHeader::nlink, PHYS_HDR_SIZE, fsm_s::rdbuf, and fsm_s::rdnb.

Referenced by fsmSetup().

static int strntoul | ( | const char * | str,
|  | char ** | endptr,
|  | int | base,
|  | size_t | num |
| ) |  |  | `[static]`

Convert string to unsigned integer (with buffer size check).

Parameters:

  | str | input string

Return values:

  | endptr | address of 1st character not processed

Parameters:

  | base | numerical conversion base
  | num | max no. of bytes to read

Returns:
  converted integer

Definition at line 33 of file cpio.c.

References alloca().

## Variable Documentation

int _cpio_debug = 0

Definition at line 23 of file cpio.c.

Referenced by cpioHeaderRead(), and cpioHeaderWrite().