Deutsch English Français Italiano |
<v5ngtl$3ehss$3@dont-email.me> View for Bookmarking (what is this?) Look up another Usenet article |
Path: ...!eternal-september.org!feeder3.eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail From: Lew Pitcher <lew.pitcher@digitalfreehold.ca> Newsgroups: comp.lang.c Subject: Re: how copy file on linux? Date: Fri, 28 Jun 2024 23:27:49 -0000 (UTC) Organization: A noiseless patient Spider Lines: 55 Message-ID: <v5ngtl$3ehss$3@dont-email.me> References: <v5huk1$2anbd$1@dont-email.me> <v5mujo$3f10p$1@raubtier-asyl.eternal-september.org> <v5nfh0$3i4n8$1@dont-email.me> <v5ngp0$3ehss$2@dont-email.me> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Injection-Date: Sat, 29 Jun 2024 01:27:50 +0200 (CEST) Injection-Info: dont-email.me; posting-host="a6c2d2db8ef704f1aabece0e415918ba"; logging-data="3622812"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1/7minrkKleuYxPcScNfTUvr5/3pzmmQYA=" User-Agent: Pan/0.139 (Sexual Chocolate; GIT bf56508 git://git.gnome.org/pan2) Cancel-Lock: sha1:P20CY+Aos5EQGVGKRMHN2YBBASw= Bytes: 3028 Oops. missed part of my edit. See unquoted line below On Fri, 28 Jun 2024 23:25:20 +0000, Lew Pitcher wrote: > On Sat, 29 Jun 2024 00:04:00 +0100, Malcolm McLean wrote: > >> On 28/06/2024 19:15, Bonita Montero wrote: >>> int fromFile = open( from, O_RDONLY | O_NOATIME ); >>> if( !fromFile ) >>> return false; > > open() returns -1 on failure, and some non-negative number > on success. That non-negative number /can be/ 0 and still > be a valid success value. > > The above test /will not/ detect an open() failure, as !(-1) == 0 > However, the above /will/ falsely call a FAILURE (and return a "false" from the function) > a valid open() that returns > fd 0 (slim chance unless you've previously closed stdin). > > >>> invoke_on_destruct closeFrom( [&] { close( fromFile ); } ); >>> // int toFile = open( to, O_CREAT ); >>> // if( !toFile ) >>> // return false; >>> invoke_on_destruct closeTo( [&] { close( toFile ); } ); >>> // invoke_on_destruct delTo( [&] { unlink( to ); } ); >>> for( int64_t remaining = attrFrom.st_size; remaining > 0; remaining >>> -= 0x100000 ) >>> { >>> size_t n = (size_t)(remaining >= 0x100000 ? 0x100000 : remaining); >>> buf.resize( n ); >>> if( read( fromFile, buf.data(), n ) ) >>> { >>> // this branch is taken >>> cout << strerror( errno ) << endl; >>> return false; >>> } >> >> So it claims the file opens, then won't read it? >> >> Check the call. Is 0 the success return? >> >> Then I must admit I'm stumped. "to" doesn't alias "from" I suppose? >> >> I'd also wonder if somehow the C++ compiler has invoked the on destruct >> code, and closed the file. -- Lew Pitcher "In Skills We Trust"