Scroll to navigation

PMSTRNCPY(3) Library Functions Manual PMSTRNCPY(3)

NAME

pmstrncpy - safe string copy

C SYNOPSIS

#include <pcp/pmapi.h>

int pmstrncpy(char *dest, size_t destlen, char *src);

cc ... -lpcp

DESCRIPTION

pmstrncpy is safe string copying routine with semantics similar to strncpy(3).

The main differences between pmstrncpy and strncpy(3) are:

  • src must be null-byte terminated for pmstrncpy
  • pmstrncpy ensures that dest is null-byte terminated, even when src is larger than destlen; this may result in truncated copying of src
  • when src is shorter than destlen pmstrncpy does not null-byte fill the remainder of dest after src has been copied and null-byte terminated
  • the length argument has the same semantics for pmstrncpy and pmstrncat(3), unlike strncpy(3) and strncat(3).
  • the return value from pmstrncpy is useful
  • the order of the arguments for pmstrncpy has been deliberately changed from the order of the arguments for strncpy(3) to avoid accidental misuse that a compiler can easily detect

On success, pmstrncpy returns 0, else -1 indicates that src is too big and the result been truncated to ensure dest has not been overrun.

HISTORY

strncpy(3) first appeared in Edition 7 AT&T Unix around 1979. It was specifically crafted to copy file names from component names from on-disk directory entries that were of a fixed maximum size and may have zero, one or more trailing null-bytes

The subsequent attempts to use strncpy(3) for more generally string copying operations has been fraught with abuse and security issues; pmstrncpy is an attempt to address these problems.

SEE ALSO

PMAPI(3), pmstrncat(3), strncat(3) and strncpy(3).

PCP Performance Co-Pilot