From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Paul Eggert Newsgroups: gmane.emacs.bugs Subject: bug#12116: merge from gnulib for extern-inline Date: Wed, 01 Aug 2012 15:18:51 -0700 Organization: UCLA Computer Science Department Message-ID: <5019AB4B.3060607@cs.ucla.edu> NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-Trace: dough.gmane.org 1343859589 16157 80.91.229.3 (1 Aug 2012 22:19:49 GMT) X-Complaints-To: usenet@dough.gmane.org NNTP-Posting-Date: Wed, 1 Aug 2012 22:19:49 +0000 (UTC) Cc: Juanma Barranquero To: 12116@debbugs.gnu.org Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Thu Aug 02 00:19:48 2012 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by plane.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1SwhGY-0006To-He for geb-bug-gnu-emacs@m.gmane.org; Thu, 02 Aug 2012 00:19:42 +0200 Original-Received: from localhost ([::1]:38738 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1SwhGX-0004R3-Rt for geb-bug-gnu-emacs@m.gmane.org; Wed, 01 Aug 2012 18:19:41 -0400 Original-Received: from eggs.gnu.org ([208.118.235.92]:43446) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1SwhGT-0004Qn-Bo for bug-gnu-emacs@gnu.org; Wed, 01 Aug 2012 18:19:39 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1SwhGR-0006uE-8c for bug-gnu-emacs@gnu.org; Wed, 01 Aug 2012 18:19:37 -0400 Original-Received: from debbugs.gnu.org ([140.186.70.43]:45933) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1SwhGR-0006u6-4s for bug-gnu-emacs@gnu.org; Wed, 01 Aug 2012 18:19:35 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.72) (envelope-from ) id 1SwhNd-0006r7-KL for bug-gnu-emacs@gnu.org; Wed, 01 Aug 2012 18:27:01 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Paul Eggert Original-Sender: debbugs-submit-bounces@debbugs.gnu.org Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Wed, 01 Aug 2012 22:27:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: report 12116 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch X-Debbugs-Original-To: bug-gnu-emacs@gnu.org Original-Received: via spool by submit@debbugs.gnu.org id=B.134385998426304 (code B ref -1); Wed, 01 Aug 2012 22:27:01 +0000 Original-Received: (at submit) by debbugs.gnu.org; 1 Aug 2012 22:26:24 +0000 Original-Received: from localhost ([127.0.0.1]:55478 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.72) (envelope-from ) id 1SwhN1-0006qC-8a for submit@debbugs.gnu.org; Wed, 01 Aug 2012 18:26:24 -0400 Original-Received: from eggs.gnu.org ([208.118.235.92]:47208) by debbugs.gnu.org with esmtp (Exim 4.72) (envelope-from ) id 1SwhMx-0006q3-3Q for submit@debbugs.gnu.org; Wed, 01 Aug 2012 18:26:21 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1SwhFi-0006qN-6e for submit@debbugs.gnu.org; Wed, 01 Aug 2012 18:18:51 -0400 Original-Received: from lists.gnu.org ([208.118.235.17]:48313) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1SwhFi-0006qH-3B for submit@debbugs.gnu.org; Wed, 01 Aug 2012 18:18:50 -0400 Original-Received: from eggs.gnu.org ([208.118.235.92]:43329) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1SwhFg-0004GI-09 for bug-gnu-emacs@gnu.org; Wed, 01 Aug 2012 18:18:49 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1SwhFd-0006py-Ru for bug-gnu-emacs@gnu.org; Wed, 01 Aug 2012 18:18:47 -0400 Original-Received: from smtp.cs.ucla.edu ([131.179.128.62]:34561) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1SwhFd-0006pq-G7; Wed, 01 Aug 2012 18:18:45 -0400 Original-Received: from localhost (localhost.localdomain [127.0.0.1]) by smtp.cs.ucla.edu (Postfix) with ESMTP id AABDBA60008; Wed, 1 Aug 2012 15:18:44 -0700 (PDT) X-Virus-Scanned: amavisd-new at smtp.cs.ucla.edu Original-Received: from smtp.cs.ucla.edu ([127.0.0.1]) by localhost (smtp.cs.ucla.edu [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id ixsX8UoSJstq; Wed, 1 Aug 2012 15:18:42 -0700 (PDT) Original-Received: from [192.168.1.4] (pool-108-23-119-2.lsanca.fios.verizon.net [108.23.119.2]) by smtp.cs.ucla.edu (Postfix) with ESMTPSA id 2E63AA60007; Wed, 1 Aug 2012 15:18:42 -0700 (PDT) User-Agent: Mozilla/5.0 (X11; Linux i686; rv:14.0) Gecko/20120714 Thunderbird/14.0 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6 (newer, 3) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6 (newer, 3) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.13 Precedence: list X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6 (newer, 2) X-Received-From: 140.186.70.43 X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Original-Sender: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.bugs:62732 Archived-At: Tags: patch Here's a patch I plan to incorporate into Emacs after a bit more testing. I'm CCing to Eli and to Juanma as it will most likely require some change to the Microsoft-related build procedure, due to the three new .c files under lib/. === modified file 'ChangeLog' --- ChangeLog 2012-08-01 15:00:49 +0000 +++ ChangeLog 2012-08-01 22:11:58 +0000 @@ -1,3 +1,12 @@ +2012-08-01 Paul Eggert + + Merge from gnulib, incorporating: + 2012-08-01 extern-inline: new module + 2012-08-01 stat-time, timespec, u64, utimens: use extern-inline + * lib/stat-time.c, lib/utimespec.c, lib/u64.c, m4/extern-inline.m4: + New files. The new .c files are for instantiating extern inline + functions. + 2012-08-01 Glenn Morris * configure.ac (DOS_NT, MSDOS): New system type templates. === modified file 'lib/gnulib.mk' --- lib/gnulib.mk 2012-07-28 23:05:32 +0000 +++ lib/gnulib.mk 2012-08-01 22:11:58 +0000 @@ -465,6 +465,7 @@ ## begin gnulib module stat-time +libgnu_a_SOURCES += stat-time.c EXTRA_DIST += stat-time.h @@ -1092,6 +1093,7 @@ ## begin gnulib module timespec +libgnu_a_SOURCES += timespec.c EXTRA_DIST += timespec.h @@ -1111,6 +1113,7 @@ ## begin gnulib module u64 +libgnu_a_SOURCES += u64.c EXTRA_DIST += u64.h === added file 'lib/stat-time.c' --- lib/stat-time.c 1970-01-01 00:00:00 +0000 +++ lib/stat-time.c 2012-08-01 22:11:58 +0000 @@ -0,0 +1,3 @@ +#include +#define _GL_STAT_TIME_INLINE _GL_EXTERN_INLINE +#include === modified file 'lib/stat-time.h' --- lib/stat-time.h 2012-06-24 17:21:20 +0000 +++ lib/stat-time.h 2012-08-01 22:11:58 +0000 @@ -23,6 +23,11 @@ #include #include +_GL_INLINE_HEADER_BEGIN +#ifndef _GL_STAT_TIME_INLINE +# define _GL_STAT_TIME_INLINE _GL_INLINE +#endif + /* STAT_TIMESPEC (ST, ST_XTIM) is the ST_XTIM member for *ST of type struct timespec, if available. If not, then STAT_TIMESPEC_NS (ST, ST_XTIM) is the nanosecond component of the ST_XTIM member for *ST, @@ -46,7 +51,7 @@ #endif /* Return the nanosecond component of *ST's access time. */ -static inline long int +_GL_STAT_TIME_INLINE long int get_stat_atime_ns (struct stat const *st) { # if defined STAT_TIMESPEC @@ -59,7 +64,7 @@ } /* Return the nanosecond component of *ST's status change time. */ -static inline long int +_GL_STAT_TIME_INLINE long int get_stat_ctime_ns (struct stat const *st) { # if defined STAT_TIMESPEC @@ -72,7 +77,7 @@ } /* Return the nanosecond component of *ST's data modification time. */ -static inline long int +_GL_STAT_TIME_INLINE long int get_stat_mtime_ns (struct stat const *st) { # if defined STAT_TIMESPEC @@ -85,7 +90,7 @@ } /* Return the nanosecond component of *ST's birth time. */ -static inline long int +_GL_STAT_TIME_INLINE long int get_stat_birthtime_ns (struct stat const *st) { # if defined HAVE_STRUCT_STAT_ST_BIRTHTIMESPEC_TV_NSEC @@ -100,7 +105,7 @@ } /* Return *ST's access time. */ -static inline struct timespec +_GL_STAT_TIME_INLINE struct timespec get_stat_atime (struct stat const *st) { #ifdef STAT_TIMESPEC @@ -114,7 +119,7 @@ } /* Return *ST's status change time. */ -static inline struct timespec +_GL_STAT_TIME_INLINE struct timespec get_stat_ctime (struct stat const *st) { #ifdef STAT_TIMESPEC @@ -128,7 +133,7 @@ } /* Return *ST's data modification time. */ -static inline struct timespec +_GL_STAT_TIME_INLINE struct timespec get_stat_mtime (struct stat const *st) { #ifdef STAT_TIMESPEC @@ -143,7 +148,7 @@ /* Return *ST's birth time, if available; otherwise return a value with tv_sec and tv_nsec both equal to -1. */ -static inline struct timespec +_GL_STAT_TIME_INLINE struct timespec get_stat_birthtime (struct stat const *st) { struct timespec t; @@ -186,4 +191,6 @@ return t; } +_GL_INLINE_HEADER_END + #endif === added file 'lib/timespec.c' --- lib/timespec.c 1970-01-01 00:00:00 +0000 +++ lib/timespec.c 2012-08-01 22:11:58 +0000 @@ -0,0 +1,3 @@ +#include +#define _GL_TIMESPEC_INLINE _GL_EXTERN_INLINE +#include === modified file 'lib/timespec.h' --- lib/timespec.h 2012-07-09 08:34:39 +0000 +++ lib/timespec.h 2012-08-01 22:11:58 +0000 @@ -21,6 +21,11 @@ # include +_GL_INLINE_HEADER_BEGIN +#ifndef _GL_TIMESPEC_INLINE +# define _GL_TIMESPEC_INLINE _GL_INLINE +#endif + /* Return negative, zero, positive if A < B, A == B, A > B, respectively. For each time stamp T, this code assumes that either: @@ -49,7 +54,7 @@ The (int) cast avoids a gcc -Wconversion warning. */ -static inline int +_GL_TIMESPEC_INLINE int timespec_cmp (struct timespec a, struct timespec b) { return (a.tv_sec < b.tv_sec ? -1 @@ -59,7 +64,7 @@ /* Return -1, 0, 1, depending on the sign of A. A.tv_nsec must be nonnegative. */ -static inline int +_GL_TIMESPEC_INLINE int timespec_sign (struct timespec a) { return a.tv_sec < 0 ? -1 : a.tv_sec || a.tv_nsec; @@ -73,7 +78,7 @@ _GL_ATTRIBUTE_CONST; /* Return an approximation to A, of type 'double'. */ -static inline double +_GL_TIMESPEC_INLINE double timespectod (struct timespec a) { return a.tv_sec + a.tv_nsec / 1e9; @@ -82,4 +87,6 @@ void gettime (struct timespec *); int settime (struct timespec const *); +_GL_INLINE_HEADER_END + #endif === added file 'lib/u64.c' --- lib/u64.c 1970-01-01 00:00:00 +0000 +++ lib/u64.c 2012-08-01 22:11:58 +0000 @@ -0,0 +1,3 @@ +#include +#define _GL_U64_INLINE _GL_EXTERN_INLINE +#include === modified file 'lib/u64.h' --- lib/u64.h 2012-05-26 23:14:36 +0000 +++ lib/u64.h 2012-08-01 22:11:58 +0000 @@ -19,6 +19,11 @@ #include +_GL_INLINE_HEADER_BEGIN +#ifndef _GL_U64_INLINE +# define _GL_U64_INLINE _GL_INLINE +#endif + /* Return X rotated left by N bits, where 0 < N < 64. */ #define u64rol(x, n) u64or (u64shl (x, n), u64shr (x, 64 - n)) @@ -54,7 +59,7 @@ /* Given the high and low-order 32-bit quantities HI and LO, return a u64 value representing (HI << 32) + LO. */ -static inline u64 +_GL_U64_INLINE u64 u64hilo (uint32_t hi, uint32_t lo) { u64 r; @@ -64,7 +69,7 @@ } /* Return a u64 value representing LO. */ -static inline u64 +_GL_U64_INLINE u64 u64lo (uint32_t lo) { u64 r; @@ -74,7 +79,7 @@ } /* Return a u64 value representing SIZE. */ -static inline u64 +_GL_U64_INLINE u64 u64size (size_t size) { u64 r; @@ -84,14 +89,14 @@ } /* Return X < Y. */ -static inline int +_GL_U64_INLINE int u64lt (u64 x, u64 y) { return x.hi < y.hi || (x.hi == y.hi && x.lo < y.lo); } /* Return X & Y. */ -static inline u64 +_GL_U64_INLINE u64 u64and (u64 x, u64 y) { u64 r; @@ -101,7 +106,7 @@ } /* Return X | Y. */ -static inline u64 +_GL_U64_INLINE u64 u64or (u64 x, u64 y) { u64 r; @@ -111,7 +116,7 @@ } /* Return X ^ Y. */ -static inline u64 +_GL_U64_INLINE u64 u64xor (u64 x, u64 y) { u64 r; @@ -121,7 +126,7 @@ } /* Return X + Y. */ -static inline u64 +_GL_U64_INLINE u64 u64plus (u64 x, u64 y) { u64 r; @@ -131,7 +136,7 @@ } /* Return X << N. */ -static inline u64 +_GL_U64_INLINE u64 u64shl (u64 x, int n) { u64 r; @@ -149,7 +154,7 @@ } /* Return X >> N. */ -static inline u64 +_GL_U64_INLINE u64 u64shr (u64 x, int n) { u64 r; @@ -167,3 +172,5 @@ } #endif + +_GL_INLINE_HEADER_END === modified file 'lib/utimens.c' --- lib/utimens.c 2012-06-22 21:26:37 +0000 +++ lib/utimens.c 2012-08-01 22:11:58 +0000 @@ -21,6 +21,7 @@ #include +#define _GL_UTIMENS_INLINE _GL_EXTERN_INLINE #include "utimens.h" #include === modified file 'lib/utimens.h' --- lib/utimens.h 2012-06-24 17:21:20 +0000 +++ lib/utimens.h 2012-08-01 22:11:58 +0000 @@ -1,3 +1,22 @@ +/* Set file access and modification times. + + Copyright 2012 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 3 of the License, or any + later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Paul Eggert. */ + #include int fdutimens (int, char const *, struct timespec const [2]); int utimens (char const *, struct timespec const [2]); @@ -7,13 +26,21 @@ # include # include +_GL_INLINE_HEADER_BEGIN +#ifndef _GL_UTIMENS_INLINE +# define _GL_UTIMENS_INLINE _GL_INLINE +#endif + int fdutimensat (int fd, int dir, char const *name, struct timespec const [2], int atflag); /* Using this function makes application code slightly more readable. */ -static inline int +_GL_UTIMENS_INLINE int lutimensat (int dir, char const *file, struct timespec const times[2]) { return utimensat (dir, file, times, AT_SYMLINK_NOFOLLOW); } + +_GL_INLINE_HEADER_END + #endif === added file 'm4/extern-inline.m4' --- m4/extern-inline.m4 1970-01-01 00:00:00 +0000 +++ m4/extern-inline.m4 2012-08-01 22:11:58 +0000 @@ -0,0 +1,40 @@ +dnl 'extern inline' a la ISO C99. + +dnl Copyright 2012 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_EXTERN_INLINE], +[ + AC_REQUIRE([AC_C_INLINE]) + AH_VERBATIM([extern_inline], +[/* _GL_INLINE is a portable alternative to ISO C99 plain 'inline'. + _GL_EXTERN_INLINE is a portable alternative to 'extern inline'. + _GL_INLINE_HEADER_BEGIN contains useful stuff to put + in an include file, before uses of _GL_INLINE. + It suppresses GCC's bogus "no previous prototype for 'FOO'" diagnostic, + when FOO is an inline function in the header; see + . + _GL_INLINE_HEADER_END contains useful stuff to put + in the same include file, after uses of _GL_INLINE. */ +#if __GNUC__ ? __GNUC_STDC_INLINE__ : 199901L <= __STDC_VERSION__ +# define _GL_INLINE inline +# define _GL_EXTERN_INLINE extern inline +# if (__GNUC__ == 4 && 6 <= __GNUC_MINOR__) || 4 < __GNUC__ +# define _GL_INLINE_HEADER_BEGIN \ + _Pragma ("GCC diagnostic push") \ + _Pragma ("GCC diagnostic ignored \"-Wmissing-prototypes\"") +# define _GL_INLINE_HEADER_END \ + _Pragma ("GCC diagnostic pop") +# endif +#else +# define _GL_INLINE static inline +# define _GL_EXTERN_INLINE static inline +#endif + +#ifndef _GL_INLINE_HEADER_BEGIN +# define _GL_INLINE_HEADER_BEGIN +# define _GL_INLINE_HEADER_END +#endif]) +]) === modified file 'm4/gnulib-comp.m4' --- m4/gnulib-comp.m4 2012-07-28 23:05:32 +0000 +++ m4/gnulib-comp.m4 2012-08-01 22:11:58 +0000 @@ -55,6 +55,7 @@ # Code from module environ: # Code from module extensions: AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) + # Code from module extern-inline: # Code from module filemode: # Code from module getloadavg: # Code from module getopt-gnu: @@ -151,6 +152,7 @@ gl_UNISTD_MODULE_INDICATOR([dup2]) gl_ENVIRON gl_UNISTD_MODULE_INDICATOR([environ]) +AC_REQUIRE([gl_EXTERN_INLINE]) gl_FILEMODE gl_GETLOADAVG if test $HAVE_GETLOADAVG = 0; then @@ -261,7 +263,6 @@ fi gl_TIME_MODULE_INDICATOR([time_r]) gl_TIMESPEC -AC_REQUIRE([AC_C_INLINE]) gl_UNISTD_H gl_UTIMENS gl_gnulib_enabled_dosname=false @@ -565,6 +566,7 @@ lib/sha512.c lib/sha512.h lib/signal.in.h + lib/stat-time.c lib/stat-time.h lib/stat.c lib/stdalign.in.h @@ -590,7 +592,9 @@ lib/time_r.c lib/timespec-add.c lib/timespec-sub.c + lib/timespec.c lib/timespec.h + lib/u64.c lib/u64.h lib/unistd.in.h lib/utimens.c @@ -603,6 +607,7 @@ m4/dup2.m4 m4/environ.m4 m4/extensions.m4 + m4/extern-inline.m4 m4/filemode.m4 m4/getloadavg.m4 m4/getopt.m4