[cfe-commits] r53635 - /cfe/trunk/utils/scan-build

Sam Bishop samuel.j.bishop at gmail.com
Tue Jul 15 13:00:56 PDT 2008


Hi, Ted!

On Tue, Jul 15, 2008 at 12:28 PM, Ted Kremenek <kremenek at apple.com> wrote:
> Quote file names to better handle paths with spaces.

I'll tell you how I handle this issue.  Spaces are by far the most
common problem, but there's also a chance that a path could shell
meta-characters.

In Perl, the difference between backticks and the system() function is
that the former allows you to capture a program's output and the
latter lets you avoid invoking the system shell--if you give it a
list.  Because you're not capturing any output, you could easily do
the latter.

By default, the system() function passes its argument to a sub-shell
if it detects any shell meta-characters.  (This
avoiding-a-sub-shell-if-possible behavior is simply an optimization.)
However, if you pass system() a list, it will always execute those
arguments directly.  So, for instance, `mv $fname.tmp $fname` could be
replaced with system("mv", "$fname.tmp", $fname).  Spaces,
single-quotes, double-quotes, dollar signs, etc are no longer a
problem.

Sam Bishop



More information about the cfe-commits mailing list