From owner-freebsd-questions@FreeBSD.ORG Tue Dec 13 05:39:24 2011 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 285121065680 for ; Tue, 13 Dec 2011 05:39:24 +0000 (UTC) (envelope-from prvs=03216a5577=johnl@iecc.com) Received: from gal.iecc.com (gal.iecc.com [64.57.183.53]) by mx1.freebsd.org (Postfix) with ESMTP id BA3378FC1A for ; Tue, 13 Dec 2011 05:39:23 +0000 (UTC) Received: (qmail 98257 invoked from network); 13 Dec 2011 05:12:42 -0000 Received: from leila.iecc.com (64.57.183.34) by mail1.iecc.com with QMQP; 13 Dec 2011 05:12:42 -0000 Date: 13 Dec 2011 05:12:20 -0000 Message-ID: <20111213051220.45894.qmail@joyce.lan> From: "John Levine" To: freebsd-questions@freebsd.org Organization: X-Headerized: yes Mime-Version: 1.0 Content-type: text/plain; charset=utf-8 Content-transfer-encoding: 7bit Subject: What's wrong with this code? 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: Tue, 13 Dec 2011 05:39:24 -0000 This tiny routine is in a .so loadable module I use. (It's part of the mailfront SMTP daemon.) static const char* date_string(void) { static char datebuf[64]; time_t now = time(0); struct tm* tm = gmtime(&now); strftime(datebuf, sizeof datebuf - 1, "%d %b %Y %H:%M:%S -0000", tm); return datebuf; } I was getting bogus dates. Running it under GDB, time() is returning -1, and setting errno to 22, which is EINVAL. Changing the call to time to time(NULL) or time(&now) made no difference. I changed it to a call to gettimeofday(), which works fine. But what could the problem have been? When I splice this routine into a tiny test program that calls it and prints out the result, it works fine. The obvious problem, since it's in a .so, is that it's linking to something other than the system library time() function, but I did an nm on the .so, and it said this, which sure looks like the system time() function to me: U time@@FBSD_1.0 Setting a breakpoint in gdb gets a complaint about trying to set a breakpoint in /lib/libc.so.7. Any ideas what the problem was? R's, John