Re: strcpy versus strncpy

Nick Maclaren (nmm1@CUS.CAM.AC.UK)
Tue, 03 Mar 1998 21:26:39 +0000

sinster@DARKWATER.COM writes:
> In your specific example of a file name, most (all?) operating systems
> already impose a limit to the length of a file name. This limit is
> therefore a natural maximum buffer size for all programs under that
> operating system when dealing with file names: there is no justification
> for being capable of handling longer file names, since it'll have to be
> handed to the operating system eventually _anyway_, and limiting your file
> names to a shorter length is an unnecessary restriction. Under Linux,
> for example just #include <limits.h> and use PATH_MAX or NAME_MAX (as
> appropriate).

I am sorry, but this this is complete and utter nonsense. MVS is one of
the few systems that does impose such a limit and, even then, the limit
is not as obvious as might appear. Unix has NO limit, and never has had.

PATH_MAX (and friends) under Unix is a lower bound on the length of a
name that the system is required to support under all circumstances.
Some facilities check for a limit and reject longer names, though the
limit is not always PATH_MAX, and others simply fall over. But there
are facilities that work with any length of name that they are supplied
with.

When you need to write a general utility, you need to decide whether to
use PATH_MAX as a hard limit, choose another hard limit, or implement a
flexible approach. There is also the problem that PATH_MAX may be very
large (e.g. 2^31-1), so you cannot afford to allocate PATH_MAX buffers.
I haven't seen this so far, but I know of no reason that it conflicts
with POSIX.

> But this argument carries to other types of buffers as well: in nearly
> all cases there is some natural and clear limit to the size of the
> data with which you need to deal. Properly written code will use
> that natural limit. It's not reasonable to set all your buffers to
> 1024 bytes simply because "It's a nice power of 2."

This is even less true. What is the natural length of a person's full
name or postal address, for example?

Nick Maclaren,
University of Cambridge Computer Laboratory,
New Museums Site, Pembroke Street, Cambridge CB2 3QG, England.
Email: nmm1@cam.ac.uk
Tel.: +44 1223 334761 Fax: +44 1223 334679