From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755301Ab0IMUzK (ORCPT ); Mon, 13 Sep 2010 16:55:10 -0400 Received: from smtp-out.google.com ([216.239.44.51]:44873 "EHLO smtp-out.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751018Ab0IMUzI (ORCPT ); Mon, 13 Sep 2010 16:55:08 -0400 DomainKey-Signature: a=rsa-sha1; s=beta; d=google.com; c=nofws; q=dns; h=from:to:cc:subject:date:message-id:x-mailer:in-reply-to:references; b=kldFlOL+yjyjAUw/CHDoEVEvAc4URmXT2gbljhDFnbvZFY921LbhWmMWpccnU03Er hF837OtWKrPNrlV/Re0Kg== From: David Sharp To: rostedt@goodmis.org Cc: mrubin@google.com, linux-kernel@vger.kernel.org, David Sharp Subject: [PATCH] trace-cmd: Use lseek64 and off64_t in tracecmd_append_cpu_data(). Date: Mon, 13 Sep 2010 13:54:26 -0700 Message-Id: <1284411266-30442-1-git-send-email-dhsharp@google.com> X-Mailer: git-send-email 1.7.1 In-Reply-To: <1284394210.17152.58.camel@gandalf.stny.rr.com> References: <1284394210.17152.58.camel@gandalf.stny.rr.com> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org lseek64 returns 64-bit, but was being truncated to int. Large offsets would cause the subsequent error checking to fail spuriously, leaving behind a bad trace.dat and a collection of trace.dat.cpuX files. Signed-off-by: David Sharp --- trace-output.c | 10 +++++----- 1 files changed, 5 insertions(+), 5 deletions(-) diff --git a/trace-output.c b/trace-output.c index 89b3954..0730a1e 100644 --- a/trace-output.c +++ b/trace-output.c @@ -705,9 +705,9 @@ out_free: int tracecmd_append_cpu_data(struct tracecmd_output *handle, int cpus, char * const *cpu_data_files) { - unsigned long long *offsets = NULL; + off64_t *offsets = NULL; unsigned long long *sizes = NULL; - unsigned long long offset; + off64_t offset; unsigned long long endian8; off64_t check_size; char *file; @@ -733,7 +733,7 @@ int tracecmd_append_cpu_data(struct tracecmd_output *handle, if (!sizes) goto out_free; - offset = lseek(handle->fd, 0, SEEK_CUR); + offset = lseek64(handle->fd, 0, SEEK_CUR); /* hold any extra data for data */ offset += cpus * (16); @@ -761,8 +761,8 @@ int tracecmd_append_cpu_data(struct tracecmd_output *handle, for (i = 0; i < cpus; i++) { fprintf(stderr, "offset=%llx\n", offsets[i]); - ret = lseek64(handle->fd, offsets[i], SEEK_SET); - if (ret < 0) { + offset = lseek64(handle->fd, offsets[i], SEEK_SET); + if (offset == (off64_t)-1) { warning("could not seek to %lld\n", offsets[i]); goto out_free; } -- 1.7.1