From owner-freebsd-questions@FreeBSD.ORG Sat Dec 27 02:51:40 2008 Return-Path: Delivered-To: freebsd-questions@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 1DE4A1065680 for ; Sat, 27 Dec 2008 02:51:40 +0000 (UTC) (envelope-from keramida@ceid.upatras.gr) Received: from igloo.linux.gr (igloo.linux.gr [62.1.205.36]) by mx1.freebsd.org (Postfix) with ESMTP id 8A8BC8FC17 for ; Sat, 27 Dec 2008 02:51:39 +0000 (UTC) (envelope-from keramida@ceid.upatras.gr) Received: from kobe.laptop (adsl57-25.kln.forthnet.gr [77.49.184.25]) (authenticated bits=128) by igloo.linux.gr (8.14.3/8.14.3/Debian-5) with ESMTP id mBR2pIWt018149 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NOT); Sat, 27 Dec 2008 04:51:31 +0200 Received: from kobe.laptop (kobe.laptop [127.0.0.1]) by kobe.laptop (8.14.3/8.14.3) with ESMTP id mBR2pIkp039582; Sat, 27 Dec 2008 04:51:18 +0200 (EET) (envelope-from keramida@ceid.upatras.gr) Received: (from keramida@localhost) by kobe.laptop (8.14.3/8.14.3/Submit) id mBR2pIYw039581; Sat, 27 Dec 2008 04:51:18 +0200 (EET) (envelope-from keramida@ceid.upatras.gr) From: Giorgos Keramidas To: Gary Kline References: <20081227011335.GA29354@thought.org> <87ocyy2you.fsf@kobe.laptop> <20081227015634.GB29639@thought.org> Date: Sat, 27 Dec 2008 04:51:18 +0200 In-Reply-To: <20081227015634.GB29639@thought.org> (Gary Kline's message of "Fri, 26 Dec 2008 17:56:34 -0800") Message-ID: <8763l61gbd.fsf@kobe.laptop> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/23.0.60 (berkeley-unix) MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-MailScanner-ID: mBR2pIWt018149 X-Hellug-MailScanner: Found to be clean X-Hellug-MailScanner-SpamCheck: not spam, SpamAssassin (not cached, score=-3.867, required 5, autolearn=not spam, ALL_TRUSTED -1.80, AWL 0.53, BAYES_00 -2.60) X-Hellug-MailScanner-From: keramida@ceid.upatras.gr X-Spam-Status: No Cc: FreeBSD Mailing List Subject: Re: how can i be certain that a file has copied exactly? X-BeenThere: freebsd-questions@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: User questions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 27 Dec 2008 02:51:40 -0000 On Fri, 26 Dec 2008 17:56:34 -0800, Gary Kline 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 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);