Recent releases of glibc define "open" in unistd.h as a macro, to allow
the detection at compile time of open() invocations which have undefined
behaviour (omitting the mode parameter when required, notably). This is
explicitly permitted by the POSIX specification for all function call
interfaces it defines.
The SVN build breaks with these new glibc releases - in places where
"foo->open(" is used, the "open(" part gets macro-expanded to
something... undesirable. The patch below prevents that macro expansion
and fixes the build.
(please CC me on responses, I am not subscribed to the list)
* build/generator/swig/header_wrappers.py: Wrap generated callback
function name invocation with parentheses to prevent macro expansion
with new versions of glibc.
* subversion/libsvn_fs/fs-loader.c,
subversion/libsvn_fs_base/bdb/changes-table.c,
subversion/libsvn_fs_base/bdb/copies-table.c,
subversion/libsvn_fs_base/bdb/env.c,
subversion/libsvn_fs_base/bdb/lock-tokens-table.c,
subversion/libsvn_fs_base/bdb/locks-table.c,
subversion/libsvn_fs_base/bdb/nodes-table.c,
subversion/libsvn_fs_base/bdb/reps-table.c,
subversion/libsvn_fs_base/bdb/rev-table.c,
subversion/libsvn_fs_base/bdb/strings-table.c,
subversion/libsvn_fs_base/bdb/txn-table.c,
subversion/libsvn_fs_base/bdb/uuids-table.c,
subversion/libsvn_ra/ra_loader.c,
subversion/libsvn_ra/wrapper_template.h: Wrap use of "open"
throughout, to prevent expansion as a macro with new versions of
glibc.
Index: build/generator/swig/header_wrappers.py
===================================================================
--- build/generator/swig/header_wrappers.py (revision 26575)
+++ build/generator/swig/header_wrappers.py (working copy)
@@ -153,7 +153,7 @@
type = "%s *" % struct
self._write_callback(type, return_type, struct[:-2], name, params,
- "_obj->%s" % name)
+ "(_obj->%s)" % name)
elif match[0] and match[1]:
# Callbacks declared as a typedef
Index: subversion/libsvn_fs_base/bdb/txn-table.c
===================================================================
--- subversion/libsvn_fs_base/bdb/txn-table.c (revision 26575)
+++ subversion/libsvn_fs_base/bdb/txn-table.c (working copy)
@@ -51,9 +51,9 @@
BDB_ERR(svn_fs_bdb__check_version());
BDB_ERR(db_create(&txns, env, 0));
- BDB_ERR(txns->open(SVN_BDB_OPEN_PARAMS(txns, NULL),
- "transactions", 0, DB_BTREE,
- open_flags, 0666));
+ BDB_ERR((txns->open)(SVN_BDB_OPEN_PARAMS(txns, NULL),
+ "transactions", 0, DB_BTREE,
+ open_flags, 0666));
/* Create the `next-key' table entry. */
if (create)
Index: subversion/libsvn_fs_base/bdb/reps-table.c
===================================================================
--- subversion/libsvn_fs_base/bdb/reps-table.c (revision 26575)
+++ subversion/libsvn_fs_base/bdb/reps-table.c (working copy)
@@ -44,9 +44,9 @@
BDB_ERR(svn_fs_bdb__check_version());
BDB_ERR(db_create(&reps, env, 0));
- BDB_ERR(reps->open(SVN_BDB_OPEN_PARAMS(reps, NULL),
- "representations", 0, DB_BTREE,
- open_flags, 0666));
+ BDB_ERR((reps->open)(SVN_BDB_OPEN_PARAMS(reps, NULL),
+ "representations", 0, DB_BTREE,
+ open_flags, 0666));
/* Create the `next-key' table entry. */
if (create)
Index: subversion/libsvn_fs_base/bdb/locks-table.c
===================================================================
--- subversion/libsvn_fs_base/bdb/locks-table.c (revision 26575)
+++ subversion/libsvn_fs_base/bdb/locks-table.c (working copy)
@@ -45,9 +45,9 @@
BDB_ERR(svn_fs_bdb__check_version());
BDB_ERR(db_create(&locks, env, 0));
- error = locks->open(SVN_BDB_OPEN_PARAMS(locks, NULL),
- "locks", 0, DB_BTREE,
- open_flags, 0666);
+ error = (locks->open)(SVN_BDB_OPEN_PARAMS(locks, NULL),
+ "locks", 0, DB_BTREE,
+ open_flags, 0666);
/* Create the table if it doesn't yet exist. This is a form of
automagical repository upgrading. */
Index: subversion/libsvn_fs_base/bdb/copies-table.c
===================================================================
--- subversion/libsvn_fs_base/bdb/copies-table.c (revision 26575)
+++ subversion/libsvn_fs_base/bdb/copies-table.c (working copy)
@@ -43,9 +43,9 @@
BDB_ERR(svn_fs_bdb__check_version());
BDB_ERR(db_create(&copies, env, 0));
- BDB_ERR(copies->open(SVN_BDB_OPEN_PARAMS(copies, NULL),
- "copies", 0, DB_BTREE,
- open_flags, 0666));
+ BDB_ERR((copies->open)(SVN_BDB_OPEN_PARAMS(copies, NULL),
+ "copies", 0, DB_BTREE,
+ open_flags, 0666));
/* Create the initial `next-key' table entry. */
if (create)
Index: subversion/libsvn_fs_base/bdb/lock-tokens-table.c
===================================================================
--- subversion/libsvn_fs_base/bdb/lock-tokens-table.c (revision 26575)
+++ subversion/libsvn_fs_base/bdb/lock-tokens-table.c (working copy)
@@ -45,9 +45,9 @@
BDB_ERR(svn_fs_bdb__check_version());
BDB_ERR(db_create(&lock_tokens, env, 0));
- error = lock_tokens->open(SVN_BDB_OPEN_PARAMS(lock_tokens, NULL),
- "lock-tokens", 0, DB_BTREE,
- open_flags, 0666);
+ error = (lock_tokens->open)(SVN_BDB_OPEN_PARAMS(lock_tokens, NULL),
+ "lock-tokens", 0, DB_BTREE,
+ open_flags, 0666);
/* Create the table if it doesn't yet exist. This is a form of
automagical repository upgrading. */
Index: subversion/libsvn_fs_base/bdb/strings-table.c
===================================================================
--- subversion/libsvn_fs_base/bdb/strings-table.c (revision 26575)
+++ subversion/libsvn_fs_base/bdb/strings-table.c (working copy)
@@ -47,9 +47,9 @@
multiple records. Note: this must occur before ->open(). */
BDB_ERR(strings->set_flags(strings, DB_DUP));
- BDB_ERR(strings->open(SVN_BDB_OPEN_PARAMS(strings, NULL),
- "strings", 0, DB_BTREE,
- open_flags, 0666));
+ BDB_ERR((strings->open)(SVN_BDB_OPEN_PARAMS(strings, NULL),
+ "strings", 0, DB_BTREE,
+ open_flags, 0666));
if (create)
{
Index: subversion/libsvn_fs_base/bdb/uuids-table.c
===================================================================
--- subversion/libsvn_fs_base/bdb/uuids-table.c (revision 26575)
+++ subversion/libsvn_fs_base/bdb/uuids-table.c (working copy)
@@ -47,9 +47,9 @@
BDB_ERR(db_create(&uuids, env, 0));
BDB_ERR(uuids->set_re_len(uuids, APR_UUID_FORMATTED_LENGTH));
- error = uuids->open(SVN_BDB_OPEN_PARAMS(uuids, NULL),
- "uuids", 0, DB_RECNO,
- open_flags, 0666);
+ error = (uuids->open)(SVN_BDB_OPEN_PARAMS(uuids, NULL),
+ "uuids", 0, DB_RECNO,
+ open_flags, 0666);
/* This is a temporary compatibility check; it creates the
UUIDs table if one does not already exist. */
Index: subversion/libsvn_fs_base/bdb/rev-table.c
===================================================================
--- subversion/libsvn_fs_base/bdb/rev-table.c (revision 26575)
+++ subversion/libsvn_fs_base/bdb/rev-table.c (working copy)
@@ -41,9 +41,9 @@
BDB_ERR(svn_fs_bdb__check_version());
BDB_ERR(db_create(&revisions, env, 0));
- BDB_ERR(revisions->open(SVN_BDB_OPEN_PARAMS(revisions, NULL),
- "revisions", 0, DB_RECNO,
- open_flags, 0666));
+ BDB_ERR((revisions->open)(SVN_BDB_OPEN_PARAMS(revisions, NULL),
+ "revisions", 0, DB_RECNO,
+ open_flags, 0666));
*revisions_p = revisions;
return 0;
Index: subversion/libsvn_fs_base/bdb/env.c
===================================================================
--- subversion/libsvn_fs_base/bdb/env.c (revision 26575)
+++ subversion/libsvn_fs_base/bdb/env.c (working copy)
@@ -563,7 +563,7 @@
flags |= DB_THREAD;
#endif
SVN_ERR(convert_bdb_error
- (bdb, bdb->env->open(bdb->env, bdb->path_bdb, flags, mode)));
+ (bdb, (bdb->env->open)(bdb->env, bdb->path_bdb, flags, mode)));
#if SVN_BDB_AUTO_COMMIT
/* Assert the BDB_AUTO_COMMIT flag on the opened environment. This
Index: subversion/libsvn_fs_base/bdb/changes-table.c
===================================================================
--- subversion/libsvn_fs_base/bdb/changes-table.c (revision 26575)
+++ subversion/libsvn_fs_base/bdb/changes-table.c (working copy)
@@ -54,9 +54,9 @@
one-per-row. Note: this must occur before ->open(). */
BDB_ERR(changes->set_flags(changes, DB_DUP));
- BDB_ERR(changes->open(SVN_BDB_OPEN_PARAMS(changes, NULL),
- "changes", 0, DB_BTREE,
- open_flags, 0666));
+ BDB_ERR((changes->open)(SVN_BDB_OPEN_PARAMS(changes, NULL),
+ "changes", 0, DB_BTREE,
+ open_flags, 0666));
*changes_p = changes;
return 0;
Index: subversion/libsvn_fs_base/bdb/nodes-table.c
===================================================================
--- subversion/libsvn_fs_base/bdb/nodes-table.c (revision 26575)
+++ subversion/libsvn_fs_base/bdb/nodes-table.c (working copy)
@@ -50,9 +50,9 @@
BDB_ERR(svn_fs_bdb__check_version());
BDB_ERR(db_create(&nodes, env, 0));
- BDB_ERR(nodes->open(SVN_BDB_OPEN_PARAMS(nodes, NULL),
- "nodes", 0, DB_BTREE,
- open_flags, 0666));
+ BDB_ERR((nodes->open)(SVN_BDB_OPEN_PARAMS(nodes, NULL),
+ "nodes", 0, DB_BTREE,
+ open_flags, 0666));
/* Create the `next-key' table entry (use '1' because '0' is
reserved for the root directory to use). */
Index: subversion/libsvn_ra/wrapper_template.h
===================================================================
--- subversion/libsvn_ra/wrapper_template.h (revision 26575)
+++ subversion/libsvn_ra/wrapper_template.h (working copy)
@@ -73,8 +73,8 @@
callbacks2->progress_func = NULL;
callbacks2->progress_baton = NULL;
- SVN_ERR(VTBL.open(sess, repos_URL, callbacks2, callback_baton,
- config, pool));
+ SVN_ERR((VTBL.open)(sess, repos_URL, callbacks2, callback_baton,
+ config, pool));
*session_baton = sess;
return SVN_NO_ERROR;
}
Index: subversion/libsvn_ra/ra_loader.c
===================================================================
--- subversion/libsvn_ra/ra_loader.c (revision 26575)
+++ subversion/libsvn_ra/ra_loader.c (working copy)
@@ -459,8 +459,8 @@
session->pool = pool;
/* Ask the library to open the session. */
- SVN_ERR(vtable->open(session, repos_URL, callbacks, callback_baton,
- config, pool));
+ SVN_ERR((vtable->open)(session, repos_URL, callbacks, callback_baton,
+ config, pool));
*session_p = session;
return SVN_NO_ERROR;
Index: subversion/libsvn_fs/fs-loader.c
===================================================================
--- subversion/libsvn_fs/fs-loader.c (revision 26575)
+++ subversion/libsvn_fs/fs-loader.c (working copy)
@@ -392,7 +392,7 @@
SVN_ERR(fs_library_vtable(&vtable, path, pool));
*fs_p = svn_fs_new(fs_config, pool);
SVN_ERR(acquire_fs_mutex());
- err = vtable->open(*fs_p, path, pool, common_pool);
+ err = (vtable->open)(*fs_p, path, pool, common_pool);
err2 = release_fs_mutex();
if (err)
{
@@ -494,7 +494,7 @@
SVN_ERR(fs_library_vtable(&vtable, path, fs->pool));
SVN_ERR(acquire_fs_mutex());
- err = vtable->open(fs, path, fs->pool, common_pool);
+ err = (vtable->open)(fs, path, fs->pool, common_pool);
err2 = release_fs_mutex();
if (err)
{
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@subversion.tigris.org
For additional commands, e-mail: dev-help@subversion.tigris.org
Received on Thu Sep 13 11:00:48 2007