git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH] send-email: Use setlocale in addition to $ENV{LC_ALL} to set locale

From
EWEric Wong <normalperson@yhbt.net>
Date
Jun 21, 2006, 10:49 UTC
Message-ID
<20060621104941.GB15748@localdomain>
In-Reply-To
<e7b796$lj$1@sea.gmane.org>
Jakub Narebski <jnareb@gmail.com> wrote:
Show 17 quoted lines
> Jakub Narebski wrote:
> 
> > $ENV{LC_ALL} = 'C'; does not change locale used by strftime.
> > Use setlocale( LC_ALL, 'C' ); instead.
> 
> >  # most mail servers generate the Date: header, but not all...
> >  $ENV{LC_ALL} = 'C';
> > -use POSIX qw/strftime/;
> > +use POSIX qw/strftime setlocale LC_ALL/;
> > +setlocale( &LC_ALL, 'C' );
> 
> Perhaps instead of 
>   setlocale( &LC_ALL, 'C' );
> we should use
>   setlocale( &LC_ALL, '' );
> (i.e. set the LC_ALL behaviour according to the locale environment
> variables). I'm not that versed in locale, POSIX and Perl.

I'm responsible for the $ENV{LC_ALL} = 'C' setting but I never actually tested how things would work with a non-English locale (not being well-versed in these things myself, either).

I've always wondered about why /usr/bin/822-date existed without strftime on my Debian systems but never bothered asking, I guess this could be a good reason why...

For reference, here's the /usr/bin/822-date script (trailing whitespace fixed):

------- 8< -------

#!/usr/bin/perl -- # I hereby place this in the public domain - Ian Jackson, 1995. # Changes by Klee Dienes also placed in public domain (1997).

# time structure: # [ sec min hour mday mon year wday yday isdst ]

@ARGV && die "usage: 822-date\n";

$curtime = time; @localtm = localtime ($curtime); $localtms = localtime ($curtime); @gmttm = gmtime ($curtime); $gmttms = gmtime ($curtime);

if ($localtm[0] != $gmttm[0]) {
    die (sprintf ("local timezone differs from GMT by a non-minute interval\n"
		 . "local time: %s\n"
		 . "GMT time: %s\n", $localtms, $gmttms));
}

$localmin = $localtm[1] + $localtm[2] * 60; $gmtmin = $gmttm[1] + $gmttm[2] * 60;

if ((($gmttm[6] + 1) % 7) == $localtm[6]) {
    $localmin += 1440;
} elsif ((($gmttm[6] - 1) % 7) == $localtm[6]) {
    $localmin -= 1440;
} elsif ($gmttm[6] == $localtm[6]) {
    1;
} else {
    die ("822-date: local time offset greater than or equal to 24 hours\n");
}

$offset = $localmin - $gmtmin; $offhour = $offset / 60; $offmin = abs ($offset % 60);

if (abs ($offhour) >= 24) {
    die ("822-date: local time offset greater than or equal to 24 hours\n");
}
printf
    (
     "%s, %2d %s %d %02d:%02d:%02d %s%02d%02d\n",
     (Sun,Mon,Tue,Wed,Thu,Fri,Sat)[$localtm[6]], # day of week
     $localtm[3],		# day of month
     (Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec)[$localtm[4]], # month
     $localtm[5]+1900,		# year
     $localtm[2],		# hour
     $localtm[1],		# minute
     $localtm[0],		# sec
     ($offset >= 0) ? '+' : '-',# TZ offset direction
     abs ($offhour),		# TZ offset hour
     $offmin,			# TZ offset minute
     ) || die "822-date: output error: $!\n";
------- 8< -------
-- 
Eric Wong
Previous: Jakub NarebskiNext: Jakub Narebski
Message 5 of 7 in “Re: [PATCH 1/3] gitweb: whitespace cleanup”
  1. Jakub NarebskiJun 21, 2006
  2. Junio C HamanoJun 21, 2006
  3. send-email: Use setlocale in addition to $ENV{LC_ALL} to set localeJakub Narebski, Jun 21, 2006
  4. Jakub NarebskiJun 21, 2006
  5. Eric WongJun 21, 2006
  6. Jakub NarebskiJun 21, 2006
  7. Junio C HamanoJul 3, 2006

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.