Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 27 Dec 2008 04:51:18 +0200
From:      Giorgos Keramidas <keramida@ceid.upatras.gr>
To:        Gary Kline <kline@thought.org>
Cc:        FreeBSD Mailing List <freebsd-questions@freebsd.org>
Subject:   Re: how can i be certain that a file has copied exactly?
Message-ID:  <8763l61gbd.fsf@kobe.laptop>
In-Reply-To: <20081227015634.GB29639@thought.org> (Gary Kline's message of "Fri, 26 Dec 2008 17:56:34 -0800")
References:  <20081227011335.GA29354@thought.org> <87ocyy2you.fsf@kobe.laptop> <20081227015634.GB29639@thought.org>

next in thread | previous in thread | raw e-mail | index | archive | help
On Fri, 26 Dec 2008 17:56:34 -0800, Gary Kline <kline@thought.org> wrote:
> On Sat, Dec 27, 2008 at 03:29:05AM +0200, Giorgos Keramidas wrote:
>> On Fri, 26 Dec 2008 17:13:39 -0800, Gary Kline <kline@thought.org> wrote:
>> > is there a way i can be sure that my little C program has copied a
>> > dos/win file named, say, foo.htm\;7 to simply foo.htm?
>> >
>> > my program uses fopen/fgets/fputs to copy the markup files.  of the
>> > several i have copied, no problem.  unless i hack cmp or diff, i have
>> > to avoid the shell.
>> >
>> > any ideas? in other words, does anybody have a prefab cmp(oldfile,
>> > newfile) fn?
>>
>> You don't need a prefab `cmp' function, because the base system already
>> includes tools that can help:
>>
>>             cmp file1 file2 ; echo $?
>>             md5 file1 file2
>>             sha1 file1 file2
>>             sha256 file1 file2
>
> the problem is that there are several thousands of these files with
> dos names and an embedded '\;'7 in the file names.  the shell gets in
> the way.  i have tried
>
> sprintf(cmdbuf, "/usr/bin/cmp %s %s", orig, new);
> system(cmdbuf);
>
> chokes on the embedded bytes.
>
> i'm thinking of using
>
> find . -name "*" -print -exec {} \;
>
> and let me program select out the file suffix.  i unlink the screwy
> dos-ish filename.  that's why i want to be sure the copied/renamed
> files are right.

Use quoting (and snprintf() because it supports range-checks for the
buffer you are passing to it):

    snprintf(cmdbuf, sizeof(cmdbuf), "cmp \"%s\" \"%s\"", orig, new);




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?8763l61gbd.fsf>